본문 바로가기

SQLD · DB

[ SQLD ] 데이터 모델링

데이터 모델링은 데이터베이스를 설계하는 일련의(모든) 과정을 말하며,

데이터베이스 ( database, DB ) 는

1. 데이터 저장소 (뿐만 아니라 데이터간 관계에 대한 정보도 저장하고 있다) → 데이터 집합 또는 데이터의 저장공간

2. database: a collection of pieces of information that is organized and used on a computer __ called also data bank.

컴퓨터에서 사용되는 조직적인(체계화된) 정보(조각)의 집합을 의미하기 때문에 데이터 뱅크(은행)라고도 불린다.

데이터베이스의 가장 큰 특징은 여러 명의 사용자 ( or 여러 개의 응용 프로그램 ) 가 ( 데이터베이스에 ) 동시에 접근이 가능해야 한다.

 

DB가 필요한 경우

1. 많은 데이터를 다루는 경우

2. 많은 사람들이 동시에 대용량의 데이터를 사용하는 경우

→ 대량의 데이터가 한 곳에 모이고, 여러 명의 사용자가 동시에 사용할 경우

데이터를 잘 관리하기 위해

데이터를 효율적으로 관리하기 위해

데이터를 체계적으로 관리하기 위해

DB가 필요하다.

 

DBMS ( Database ManageMent Systems ) 는

사용자가 쿼리를 통해 DB ( Stored Database, 실제 정보가 저장되어 있는 곳 )에

접근하려고 할 때, 필요한 모든 작업을 해주는 프로그램의 집합이다.

프로그램 집합이라고 하는 것은 외부 ( 사용자 ) 에서 DB에 접근하기까지

많은 모듈이 필요하기 때문에 해당 모듈 전부를 칭하는 것이다.

 

명령어(쿼리)를 통해 DBMS가 관리하는 데이터베이스에

여러 명의 사용자나 응용프로그램이 동시에 접근할 수 있고,

삽입(INSERT), 갱신(UPDATE), 조회(SELECT), 삭제(DELETE) 등의 명령어(쿼리문)로

데이터를 다룰 수 있다.

 

데이터베이스 스키마와 인스턴스

데이터베이스 스키마 ( Schema )는

데이터베이스 구조, 데이터 타입, 그리고 제약조건에 대한 명세고,

데이터베이스 설계 단계에서 명시되며, 자주 변경되지 않는다.

→ 데이터가 저장되는 공간인 테이블 생성시,

삽입할 수 있는 데이터를 컬럼 ( 열, Column ) 으로 정의하는데,

컬럼에 설정한 타입과 제약조건에 따라 삽입가능한 데이터가 결정된다. 

 

데이터베이스 인스턴스 ( Instance )는

특정 시점에 데이터베이스에 실제로 저장되어 있는 데이터를 의미한다.

 

데이터 모델링은 데이터베이스 스키마를 만드는 것이며,

데이터베이스 스키마를 만든다는 것은 컬럼을 정의하는 것,

컬럼을 정의한다는 것은 Section_identifier, Course_number, Semester, Year, Instructor와 같이

컬럼명,

컬럼의 데이터타입을 정의하고, 예를 들면 Semester 컬럼의 경우 문자열 ( VARCHAR2 ) 로 정의,

컬럼에 제약조건을 설정하고, 예를 들면 Section_identifier 의 경우 null이면 안된다고 설정하는 것이다.

그리고 데이터베이스 스키마에 따라 삽입된 실제 데이터를 데이터베이스 인스턴스라고 한다. 

데이터베이스 스키마와 데이터베이스 인스턴스

 

SQL ( Structured Query Language ) 은

데이터베이스를 조작하는 ( 다루는 ) 언어고,

SQL은 DDL,  DML, DCL, TCL 로 나뉘어진다.

DDL ( Data Definition Language ) 은

( 테이블 생성, 컬럼 작성, 제약조건 설정 등 )

스키마를 만들기 위해 사용되는 언어고,

DML ( Data Manipulation Language ) 은

( 데이터 삽입, 갱신, 조회, 삭제 등 )

인스턴스에 조작에 사용되는 언어고,

DCL ( Data Control Language ) 은

사용자 권한을 관리하는 언어고,

TCL ( Transaction Control Language ) 은

트랜잭션에 대한 명령어다.

 

ER Model ( Entity Relationship Model ) 의 구성 요소에는

개체(Entity), 관계(Relationship), 속성(Attribute)이 있다.

개체는 DB를 만든다고 할 때 제일 먼저 생각나는 것,

예를 들어 학교를 DB로 만든다고 할 때,

학생 정보, 교수 정보, 교과목 정보 등이 개체의 후보가 된다.

관계(Relationship)는 개체들 사이의 연관성을 나타내는데,

다음 그림을 예로 들 수 있다.

개체는 네모로 나타내고,

관계는 마름모로 나타낸다.

그리고 개체와 관계를 선으로 이어 도식화한다.

 

그리고 속성은 개체 또는 관계가 갖는 본질적 성질을 의미한다.

학생이라는 개체가 있을 때 학생이 갖는 속성은

학번, 성별, 나이, 학년, 이름 등이 있을 것이다.

그리고 속성명의 순서대로 해당 값을 작성했을 때,

2013625, 여, 30, 아무개 는 속성과 매핑되는 속성 값으로

이러한 데이터들이 데이터베이스 인스턴스에 해당된다.

 

ER Model의 구성 요소에서

개체 또는 관계가 갖는 본질적 성질인 속성은

여러가지 기준으로 분류할 수 있다 ( 속성의 유형 )

 

1. 속성(명)에 대응되는 값의 개수에 따라 Single-valued, Multivalued 로 분류

속성이 갖는 값을 기준으로 속성 하나에 속성의 값이 하나일수도 ( Single-valued )

속성 하나에 여러 개의 속성 값을 갖을 수도 있다 ( Multivalued )

ex. 나이에 대응되는 값은 하나다. 한 사람의 나이가 21, 22, 23살일 수 없다.

취미에 대응되는 값은 여러 개가 될 수 있다.

한 사람의 취미는 달리기, 요리하기, 노래하기 등일 수 있다.

 

2. 속성에 대응되는 속성 값이 쪼개어질 수 있는지에 따라 Simple, Composite 으로 분류 

( 분해되었을 때 분해된 요소가 여전히 의미있는 값인지 )

Composite Attribute는 둘 이상의 요소로 나뉘어졌을 때

여전히 의미있는 값을 갖는 속성을 의미한다.

 

Composite Attribute에서 쪼개진 것은 Simple Attribute다.

 

3. Stored, Derived로 분류

국어, 영어, 수학, 과학 점수가 저장되어 있을 때,

총점과 평균을 저장하지 않아도 저장되어 있는 데이터를 연산하여 총점과 평균을 알 수 있다.

저장되어 있는 데이터를 사용해 다른 데이터를 산출할 수 있는 속성을 Derived Attribute 라고 한다.

 

개체 타입과 키 속성

학생 개체 ( 테이블 ) 가 있을 때,

각 학생을 지목할 수 있는 속성 ( 컬럼 ) 이 있어야하고,

해당 속성에 대응하는 값 ( 속성값) 은 항상 유일한 값이어야 한다.

키 속성 ( Key Attribute ) 이란 어떤 개체에 대해서 항상 유일한 값을 갖는 속성 ( 또는 속성들의 집합 ) 이다.

속성들의 집합이라고 한 것은 단일 속성만으로 키 속성을 만들 수 있지만,

단일 속성만으로 키 속성을 만들 수 없을 땐 속성을 조합해 키 속성을 만들 수 있다는 것을 의미한다.

 

Entity에 identifier ( Key Attribute ) 가 여러 개 존재할 수도 있고,

Entity에 identifier 가 없을 수 있다 → 식별자 ( identifier ) 를 갖지 않는 객체는 Weak Entity 라고 한다.

 

ERD ( conceptual model 에서의 ) identifier 특징과

( 각 개체는 하나 이상의 키를 가질 수 있고, 어떤 개체는 키를 갖지 않을 수도 있다. )

Table ( Logical Design에서의 ) primary key ( identifier ) 특징이 조금 다르다. 

( Logical Model 에서 identifier 는 primary key (pk) 를 의미하며

pk는 각 테이블에 반드시 한 개 있어야 한다 )

 

ER Model 에서 관계 ( Relationship ) 를 설정할 때

한 개체의 속성이 다른 개체를 참조할 때 관계가 설정된다.

예를 들면 직원 개체에 프로젝트 속성이 있고, 프로젝트라는 개체가 있다면

직원과 프로젝트를 관계로 이어준다. 

 

설정된 관계에 연결되어 있는 개체의 개수에 따라 ( 관계에 참여하는 개체의 수에 따라 )

Binary, Ternary, Unary 등으로 나뉘어지며 이를 관계의 차수 ( Degree ) 라고 한다.

관계에 연결되어 있는 개체 ( Entity ) 의 수가 2개면 2차 ( Binary ),

3개가 연결되어 있으면 3차 ( Ternary ),

하나의 객체가 하나의 관계가 설정되어 있으면 1차 ( Unary ) 라고 한다.

 

관계의 차수보다 관계의 대응수 ( Cardinality ) 개념이 중요하며

실무에서는 관계의 차수와 관계의 대응수 용어가 구분되지 않고 사용되는데,

만약 관계의 차수를 물어본다면 관계의 대응수를 물어보는 것이다.

 

관계의 대응수 ( Cardinality )

대응수에 따라 관계가 1 : N ( or N : 1 ), 1 : 1, M : N 으로 분류되며,

1. 일대다 ( 1 : N ) 관계의 경우,

( 한 명의 ) 직원은 최대 1개의 부서와 연결되며,

( 하나의 ) 부서는 여러 명의 직원과 연결된다 ( 여러 명의 직원을 포함한다 )

( 한 명의 ) 직원과 ( 하나의 ) 부서는 N : 1 관계 ( 근무 ) 다.

근무 관계의 속성인 근무시작일은 1의 반대인 직원 개체에 속할 수 있다.

 

2. 일대일 ( 1 : 1 ) 관계의 경우,

( 한 명의 ) 직원 ( →  부서장 ) 이 최대 1개의 부서와 연결될 때,

연결고리 ( 관계 ) 는 관리가 되며 관리 관계의 속성인 관리시작일은

직원 또는 부서의 개체로 이동이 가능하다.

 

3. 다대다 ( M : N ) 관계의 경우,

( 한 명의 ) 직원이 ( 각 하나의 ) 프로젝트를 여러 개 참여할 수 있고,

( 각 하나의 ) 프로젝트에 여러 명의 직원이 참여할 수 있다.

이런 경우 다대다 관계 ( 참여 ) 라고 하며,

참여 관계의 속성인 주당근무시간은

직원 개체 또는 프로젝트 개체에 모두 속할 수 없기 때문에

두 객체를 이어주는 참여 라는 관계를 개체로 만들어주고,

해당 개체에 주당 근무시간 속성을 설정한다.

 

N - ary relationships

Unary ( 1차 ), Binary ( 2차 ) 관계를 제외한

3,4,5,6,...차 관계를 의미한다.

 

ERD에서 Generalization ( 일반화 ) 는

여러 개의 개체에서 공통된 속성이 존재할 경우,

공통 속성들을 갖는 하나의 개체를 만드는 과정을 의미한다.

ISA 관계 라고도 한다.

 


 

DB, DBMS, DB System 개념 비교

 

1. DB ( database ) 는 전자적으로 저장되고 사용되는 관련있는 데이터들의 조직화된 집합을 의미한다.

여기서 ' 전자적으로 저장되고 사용된다' 는 것은 컴퓨터에 저장되고 사용된다는 것으로 이해하면 되고,

관련있는 데이터는 같은 출처 또는 같은 목적 같은 서비스에서 생성되는 데이터를 의미하며,

이런 관련있는 데이터들을 체계적으로 조직화하여 전자적으로 저장하고 사용한다는 것이다.

 

2. DBMS ( database management system ) 는

( DB를 사용하려는 ) 사용자에게 DB를 정의하고, 만들고,

관리하는 기능을 제공하는 소프트웨어 시스템을 의미한다.

 

DB를 정의하다 보면 부가적인 데이터가 발생하는데,

이런 부가적인 데이터를 metadata ( data about data ) 라고 한다.

metadata는 catalog 라고도 한다.

DB 정의시 발생하는 부가적인 데이터의 예는

데이터의 유형, 구조, ( 저장되는 데이터들의 ) 제약 조건,

보안, 저장, 인덱스 , ( 데이터베이스를 사용하는 ) 사용자 그룹 등의 데이터가 있으며,

이러한 데이터 ( metadata ) 또한 DBMS를 통해 저장 / 관리된다.

 

3. database system 은 database와

database를 관리 / 운영하는 DBMS

그리고 관련된 applications 들을 통칭한다.

 

data models은 DB의 구조를 기술하는데 사용될 수 있는 개념들이 모인 집합을 의미하고,

이 집합을 기반으로 DB의 구조를 추상화해서 표현할 수 있는 수단을 제공한다.

→ DB의 구조는 데이터 정의시 발생하는 metadata

( 데이터 유형, 데이터 ( 들과의 ) 관계, 제약 사항 등등 ) 를 의미하는 것 같다.

data model은 여러 종류가 있으며 추상화 수준과 DB 구조화 방식이 조금씩 다르다.

 

data models은 conceptual ( or high-level ) data models,

→ 일반 사용자들이 쉽게 이해할 수 있는 개념들로 이루어진 모델로 추상화 수준이 가장 높다.

→ 추상화 수준이 높다는 것은 데이터 구조를 포현한 data model을 누가봐도 이해할 수 있다는 것을 의미한다. 

데이터베이스의 구조를 개체 ( Entity ) 간 관계로 도식화 ( diagram으로 표현 ) 하는데,

이를 entity-relationship model 이라고 한다.

 

logical ( or representational ) data models,

→ 이해하기 어렵지 않으면서 디테일하게 DB를 구조화 할 수 있는 개념들을 제공한다.

 디테일하게 DB를 구조화한다는 것은

데이터가 컴퓨터에 저장될 때의 구조와 크게 다르지 않게

DB 구조화를 가능하게 한다는 것을 의미한다.

logical data model중 가장 많이 사용하는 relational data model 이다.

테이블 형태로 저장하게 되고, relational은 테이블을 의미한다.

일반적으로 테이블에 row와 column이 있는데,

table ( relational ) 의 row는 데이터 각각을 의미하게 되고,

column은 데이터의 속성 ( Attribute ) 을 의미한다.

 

physical ( or low-level ) data models 로 분류된다.

→ 컴퓨터에 데이터가 어떻게 파일 형태로 저장되는지를 기술할 수 있는 수단을 제공한다.

실제로 컴퓨터에 저장되는 형태와 밀접하게 모델링할 수 있는 방법을 제공한다.

 

database schema ( 데이터베이스 스키마 ) 는

data model을 바탕으로 실제로 그 database의 구조를 기술한 것이고,

schema는 database를 설계할 때 정해지며 한 번 정해진 후에는 자주 바뀌지 않는다.

 

database state ( 데이터베이스 스테이트 ) 

database에 있는 실제 데이터는 꽤 자주 바뀔 수 있고,

특정 시점의 database에 있는 데이터를 database state 혹은 snapshot 이라고 한다.

혹은 database에 있는 현재 instances의 집합이라고도 한다.

 

three-schema architecture는 물리적인 데이터베이스의 변경으로 인해

데이터베이스를 사용하는 user application에 영향을 미치지 않게 하기위해

사용하는 것이다 → 안정적으로 database system을 운영하기 위한 것

user application으로부터 물리적인 database를 분리시키는 것이 목적이다.

 

three-schema architecture는 3가지 level이 존재하며

각각의 level마다 schema가 정의되어 있다.

→ external level에 있는 external schemas ( or user views ),

 → 실제 사용자가 바라보는 스키마에 해당하며,

external views, user views 라고도 불린다.

logical data model을 통해 표현되며,

각 유저들이 필요로하는 데이터만 표현하고,

그 외 알려줄 필요가 없는 데이터는 숨긴다.

 

conceptual level에 있는 conceptual schemas,

→  internal schema를 한 번더 추상화시킨 스키마,

logical data model을 통해 표현되며,

전체 database에 대한 구조를 기술하며,

물리저인 저장 구조에 관한 내용은 숨긴다.

 

internal level에 있는 internal schemas

→ 물리적인 저장 장치에 가장 가깝게 있고,

physical data model을 통해

물리적으로 데이터가 어떻게 저장되는지 표현한다.

 

참고 강의

1. 데이터베이스실무(SQLD대비) | 김남규 교수

2. [ youtube ] 데이터베이스 | 쉬운 코드

3. [ youtube ] 이것이 mysql이다