본문 바로가기

데이터 베이스

Ch.4 데이터 모델링 [데이터베이스 개론 도서]

728x90

- 개념적 모델링과 논리적 모델리의 정의

- 속성의 종류

- 매핑 카디널리티 개념

- 관계의 유형과 예시

데이터 모델링과 데이터 모델의 개념


현실 세계의 모든 정보를 컴퓨터에 그대로 담기란 불가능하다. 그래서 현실 세계에 존재하는 데이터를 컴퓨터 세계의 데이터베이스로 옮기는 변환 과정을 거쳐야 한다. 이 과정을 데이터 모델링(data modeling)이라고 한다.

 

하지만 데이터 모델링은 쉽지 않은 과정이다. 현실 세계와의 큰 차이가 존재하고, 방대한 양의 데이터 중 필요한 데이터만 선별하는 것도 비용이 들기 때문이다. 그래서 일반적으로 현실 세계의 객체를 컴퓨터 세계로 옮길 땐 여러 단계를 거친다. 먼저 사람의 머릿속에 연상시킬 수 있는 중요한 데이터를 찾아 개념 세계로 옮긴 뒤, 이를 컴퓨터 세계에 저장하는 구조를 결정해서 표현하곤 한다.

 

 

현실 세계에서 코끼리에 대한 중요 데이터를 추출하여 개념 세계로 옮기는 작업을 개념적 모델링(conceptual modeling)이라고 한다. 그리고 개념 세계의 데이터를 데이터베이스에 저장할 구조를 결정하고 표현하는 작업을 논리적 모델링(logical modeling)이라고 한다. 그리고 이 둘을 포함한 개념이 데이터 모델링이다.

 

데이터 모델링을 쉽게 할 수 있도록 도와주는 도구를 데이터 모델(data model)이라고 한다. 데이터 모델은 데이터 모델링의 결과물을 표현하는 도구로, 개념적 데이터 모델과 논리적 데이터 모델이 있다.

 

- 개념적 데이터 모델 : 사람의 머리로 이해할 수 있도록 현실 세계를 개념적 데이터 모델링하여 데이터베이스의 개념적 구조로 표현하는 도구

- 논리적 데이터 모델 : 개념적 구조를 논리적 데이터 모델링하여 데이터베이스의 논리적 구조로 표현하는 도구

 

일반적으로 데이터 모델은 데이터 구조(data structure), 연산(operation), 제약조건(constraint)로 구성된다.

 

 

현실 세계에 대해 사람들의 요구 사항을 잘 반영할 수 있는 개념적 모델링의 대표적인 도구에는 개체-관계 모델(E-R Model)이다.

개체 - 관계 모델 (E-R Model)


어떻게 현실 세계를 컴퓨터 세계로 개념화 할 수 있을까? 이 고민의 대한 답으로 1976년 등장한 개체-관계 모델은 현실 세계에서 존재하는 개체(Entity)와 그들 간의 관계(Relationship)를 기반으로 현실 세계를 개념적 구조로 표현하는 방법이다.

 

그리고 현실 세계를 개체-관계 모델을 이용해 개념적으로 모델링하여 그림으로 표현한 것을 개체-관계 다이어그램 즉, E-R 다이어그램이라 한다.

개체 (entity)


개체는 저장할 만한 가치가 있는 중요 데이터를 가지고 있는 사람이나, 사물 등을 의미한다.

 

개체는 사람과 사물처럼 물리적으로 존재하는 것만을 의미하지 않는다. 개념이나 사건처럼 개념적으로만 존재하는 것도 개체가 될 수 있다. 개체는 다른 개체와 구별되는 이름을 가지고 있고, 각 개체만의 고유한 특성이나 상태, 즉 속성을 하나 이상 가지고 있다. 

 

예를 들어 식당 운영에 필요한 데이터를 가지고 있는 직원, 재료, 메뉴 등이 개체가 될 수 있다. 

 

 

개체를 구성하고 있는 속성이 실제 값을 가지면 개체 인스턴스(entity instance)가 된다. 그리고 여러 개의 객체 인스턴스들을 모아 놓은 것을 개체 집합(entity set)이라 한다. 데이터베이스에서 실제로 저장하고 관리하는 것이 이 개체 인스턴스들의 모임인 개체 집합이라 할 수 있다. 데이터베이스에서는 개체를 테이블로 표현한다.

 

개체와 속성은 파일 구조에서 레코드(record)와 필드(field) 용어에 대응한다.

그리고 E-R 다이어그램에서 객체는 사각형으로 표현하고 사각형 안에 개체의 이름을 표기한다.

 

속성 (attribute)


속성은 개체가 가지고 있는 고유한 특성이다.

 

속성은 일반적으로 의미 있는 데이터의 가장 작은 논리적 단위로 인식되는데, E-R 다이어그램에서 타원으로 표현하고, 타원 안에 속성의 이름을 표기한다.

 

 

속성은 기준에 따라 다양하게 분류할 수 있다.

 

 

단일 값 속성   /   다중 값 속성

특정 개체를 구성하는 속성 값이 하나면 단일 값 속성(single-valued attribute)로 분류한다. 예를 들어 고객 개체를 구성하는 이름, 적립금 등의 속성은 한 명의 고객 인스턴스에 대해 하나의 값만 가지므로 단일 값 속성이다.

 

이와 달리 속성이 여러 값을 가질 수 있으면 다중 값 속성(multi-valued attribute)로 분류한다. 한 명의 고객이 여러 연락처를 가질 수 있다. 집 전화번호, 휴대폰 번호 등 여러 값을 가질 수 있는 것을 다중 값 속성이라 한다. 또 책 개체를 구성하는 저자 속성도 한 권의 책 인스턴스에 저자가 여러 명일 수 있기 때문에 다중 값 속성으로 분류한다.

 

다중 값 속성은 이중 타원으로 표현한다.

 

단순 속성   /   복합 속성

단순 속성(simple attribute)은 더는 분해할 수 없는 속성이다. 고객의 이름 속성도, 적립금 속성도 더는 분해할 수 없다. 단순 속성의 값은 의미가 하나다. 

 

복합 속성(composite attribute)은 의미를 분해할 수 있어 값이 여러 개의 의미를 포함한다. 주소 속성은 거리명, 지번, 우편번호, 시, 도 등의 속성으로 이뤄져 있다. 날짜 속성도 일, 월, 년도 등의 속성으로 이루어져 있다. 복합 속성은 단순 속성이 여러 개 모여 만들어진 속성으로 볼 수 있다.

 

유도 속성   /   저장 속성

유도 속성(derived attribute)의 값은 별도로 저장되는 것이 아니라 기존의 다른 속성 값에서 유도되어 결정된다. 판매 가격이란 속성은 가격과 할인율 속성으로 계산되어 도출된다. 또한 나이 속성은 출생년도에서 계산되어 도출된다. 여기서 판매 가격, 나이 속성을 유도 속성으로 본다. 유도 속성은 점선 타원으로 표현한다.

 

저장 속성(stored attribute)은 유도 속성을 도출하고자 계산하는 데 사용되는 속성을 지칭한다. 위 예시에선 가격, 할인율, 출생년도 등이 저장 속성이다.

 

널 속성

널(null) 값은 아직 결정되지 않았거나 모르는 값을 의미한다. 또는 해당되는 값이 없는, 즉 존재하지 않는 값의 경우도 널 값이라 한다. 이는 공백이나 0과 다르다.

 

널 값이 허용되는 속성을 널 속성(null attribute)이라 한다. 예를 들어 고객의 등급 속성 값이 널이라면 고객의 등급이 아직 결정되지 않았음을 의미하고, 고객 개체 인스턴스의 취미 속성이 널 값이라면 가입 시 고객이 취미를 입력하지 않음았음을 의미한다.

키 속성

키 속성(key attribute)개체를 구성하는 속성들 중에서 특별한 역할을 한다.

 

모든 객체 인스턴스의 키 속성 값이 다르므로 키 속성은 개체 지합에 존재하는 각 개체 인스턴스들을 식별하는 데 사용된다. 고객아이디 속성, 책 ISBN 속성이 키 속성이 될 수 있다. 때로는 둘 이상의 속성들로 키를 구성하기도 한다. 고객아이디 대신, 고객명과 전화번호 속성을 조합하여 키를 구성할 수 있다. 어찌 됐던 키 속성의 값으로 개체 인스턴스를 식별할 수 있으면 된다.

 

키 속성은 E-R 다이어그램에서 밑줄을 그어 표현한다.

 

관계 (relationship)


개체와 개체가 맺고 있는 의미 있는 연관성을 의미한다.

 

관계는 개체 집합들 사이의 대응 관계, 즉 매핑(mapping)을 의미한다. 관계를 고려하지 않으면 책을 구매한 고객에 대한 데이터나 특정 고객이 구매한 책에 대한 데이터를 검색할 수 없다. 관계를 통해서만 개체들 간의 연관성을 이용한 업무를 할 수 있다.

 

관계는 동사에 해당한다. 고객과 책 개체들을 이용해 하나의 문장을 만들었을 때 '고객은 책을 구매한다' 식의 문장으로 만들 수 있는데, 이때 구매가 고객과 책 개체 사이의 관계가 될 수 있다.

 

관계도 개체처럼 속성을 가질 수 있다. 만약 고객이 책을 구매하면 발생하는 구매일자, 결제방식 등이 구매 관계의 속성이 되는 것이다.

 

관계는 E-R 다이어그램에서 마름모로 표현한다.

 

구매 관계의 속성으로 구매일자, 결제방식을 가진다

 

관계의 유형

관계에 참여하는 개체 타입의 수를 기준으로 이항 관계, 삼항 관계, 순환 관계 등으로 나눌 수 있다.

 

매핑 원소의 수, 즉 매핑 카디널리티(mapping cardinality)를 통해 관계 분류 기준을 세우기도 한다.

매핑 카디널리티는 관계를 맺는 두 개체 집합에서, 각 개체 인스턴스가 연관성을 맺고 있는 상대 개체 집합의 인스턴스 개수를 의미한다. 조금 더 쉽게 말해 개체 간의 관계에서 한 쪽 개체의 튜플(인스턴스) 수와 다른 쪽 개체의 튜플 수의 관계를 말한다.

 

관계는 매핑 카디널리티를 기준으로 일대일1:1, 일대다1:n, 다대다n:m라는 세 가지 유형으로 분류할 수 있다.

 

- 일대일 1:1 관계

개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 하나와 관계를 맺을 수 있고, 개체 B의 인스턴스도 동일하게 하나만 관계를 맺을 수 있다면 일대일 관계다.

예를 들어 남편 한 명이 아내 한 명과 혼인 관계를 맺어야 한다면 대한민국에선 일부일처제이기 때문에 두 개체의 혼인 관계는 일대일 관계가 된다.

 

 

- 일대다 1:n 관계

개체 A의 각 개체 인스턴스는 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있지만, 반대로 개체 B의 각 개체 인스턴스는 개체 A의 개체 인스턴스 하나와만 관계를 맺어야 한다.

부서 개체와 사원 개체 사이에는 소속 관계가 존재한다. 일반적으로 한 부서에는 사원이 여러 명 소속될 수 있지만, 한 명의 사원은 부서 하나에만 소속되기 때문에 두 개체의 소속 관계는 일대다 관계가 된다.

 

 

- 다대다 n:m 관계

개체 A와 개체 B 인스턴스들은 서로 여러 개와 관계를 맺을 수 있다.

예를 들어 고객 개체와 책 개체 사이에는 구매 관계가 존재한다. 일반적으로 고객 한 명이 여러 권을 구매할 수 있고, 책은 한 종류가 여러 고객에게 판매될 수 있기 때문에 두 개체의 구매 관계는 다대다 관계가 된다.

 

관계의 참여 특성

개체의 모든 인스턴스가 관계에 반드시 참여하는가 아닌가 여부는 데이터베이스 설계 과정에서 중요하다. 만약 개체 A의 개체 인스턴스 중 일부만 관계에 참여해도 되면 개체 A가 관계에 '선택적 참여한다' 또는 '부분 참여한다'고 표현한다. 반대로 모든 개체 인스턴스가 관계에 참여해야 한다면 '필수적 참여한다' 또는 '전체 참여한다'고 한다.

 

예를 들어 고객 개체와 책 개체 사이의 구매 관계에서 모든 고객이 책을 반드시 구매해야 한다는 제약조건이 존재한다면, 고객 개체가 구매 관계에 필수적 참여한다고 할 수 있다. 반대로 고객이 구매하지 않은 책이 존재할 수 있다면 책 개체가 구매 관계에 선택적 참여한다고 본다.

 

필수적 참여 관계는 E-R 다이어그램에서 이중선으로 표현한다.

 

관계의 종속성

두 개체가 관계에 대해 종속적인 특성을 가질 수 있다.

 

만약 개체 B가 독자적으로 존재할 수 없고 다른 A개체 존재 여부에 의존적이라면, 개체 B가 개체 A에 종속되어 있다고 한다. 이러한 종속 관계에선 개체 A가 삭제될 경우 개체 B도 함께 삭제된다. 이러한 종속을 존재 종속(existence dependence)라고 한다.

 

예를 들어 학생 개체와 학부모 개체 사이의 보호 관계를 보자. 학교 입장에선 학부모 개체 자체엔 의미가 없다. 학생 개체가 있어야만 학생을 보호하는 학부모 개체가 존재할 수 있다. 학생 개체가 없으면 학부모 개체도 필요가 없다. 그래서 학교에 새로운 학생이 입학하면 보호 관계를 맺는 학부모가 생기지만, 학생이 졸업하고 나면 학부모 개체도 함께 삭제된다.

 

또 다른 예시론 회사의 직원 개체와 부양가족 개체 사이의 부양 관계가 있다. 회사에 새로운 직원이 입사하면 해당 직원의 부양가족 데이터도 함께 저장되지만, 직원이 퇴사하면 직원의 부양가족 데이터도 함께 삭제된다.

 

이렇게 의존적인 개체를 약한 개체라 하고, 다른 개체의 존재 여부를 결정하는 개체를 강한 개체라고 한다. 일반적으로 강한 개체와 약한 개체는 일대다 관계를 가지며, 약한 개체는 강한 개체의 키를 포함하여 키를 구성한다.

 

강한 개체인 직원 개체와 약한 개체인 부양가족 개체 관계를 E-R 다이어그램으로 나타냈을 때, 약한 개체는 이중 사각형으로 표현하고, 약한 개체와 강한 개체와 맺는 관계는 이중 마름모로 표현한다. 이때 부양가족이 부양 관계에 필수적으로 참여하기 때문에 이중선으로 연결한다. 부모 개체의 키를 이용해서 약한 개체의 튜플을 식별할 수 있기 때문에 이를 식별관계라고 한다.

 

논리적 데이터 모델


현실 세계를 개념적인 구조로 모델링하는 개체-관계 모델은 어떤 데이터베이스 관리 시스템에 적용하든 상관 없다. 하지만 E-R 다이어그램으로 표현된 개념적인 구조를 데이터베이스에 표현하는 형태를 결정하는 논리적 데이터 모델링에서는 DBMS 종류가 중요하다.

 

E-R 다이어그램으로 표현된 개념적 구조를 데이터베이스에 어떤 형태로 저장할지를 논리적으로 표현하는 구조를 논리적 데이터 모델이라 한다. 쉽게 말해 논리적 데이터 모델은 논리적 데이터 모델링의 결과물이고, 사용자가 생각하는 데이터베이스의 모습 또는 구조다. 그리고 이를 데이터베이스 스키마(shecma)라고 한다. 논리적 구조는 데이터베이스 관리 시스템에 따라 달라진다.

 

일반적으로 사용되는 관계 데이터 모델의 논리적 구조는 2차원 테이블 형태다.

계층 데이터 모델 (hierarchical data model)

계층 데이터 모델은 데이터베이스의 논리적 구조가 트리(tree) 형태다. 그래서 루트 역할을 하는 개체가 존재한다. 

계층 데이터 모델은 개체 사이의 관계를 정의할 때 여러 제약이 존재하기 때문에 개념적 구조를 논리적 구조로 자연스럽게 모델링하기 어려운 한계가 있다.

네트워크 데이터 모델 (network data model)

데이터 베이스의 논리적 구조가 그래프(graph) 또는 네트워크(network) 형태다.