이번 포스트에서는 데이터 모델링에 대해 정리하겠습니다.
데이터 모델링과 데이터 모델의 개념
데이터베이스는 현실 세계에 존재하는 수많은 데이터 중에서 조직을 운영하는데 꼭 필요한 데이터만 선별하여 컴퓨터에 저장한 것이다.
아래 그림은 현실 세계의 병원을 컴퓨터 세계의 병원 데이터베이스로 변환한 모습이다.
데이터 모델링(Data modeling) -> 현실 세계에 존재하는 데이터를 컴퓨터 세계의 데이터베이스로 옮기는 변환 과정.
추상화(abstraction) -> 데이터베이스로 변환하는 과정을 생각하는 과정. 예를 들면 코끼리를 데이터베이스를 변환하는 과정에서 데이터베이스로 뽑아낼만한 가치가 있는 중요 데이터만 뽑아내는 작업.
개념적 모델링(conceptual modeling) -> 현실 세계에서 코끼리에 대한 중요 데이터를 추출해서 개념 세계로 옮기는 작업을 데이터 모델링 과정 중에서도 개념적 모델링이라고 한다.
논리적 모델링(logical modeling) -> 개념 세계의 데이터를 데이터베이스에 저장할 구조를 결정하고 이 구조로 표현하는 작업을 논리적 모델링이라고 한다.
이 데이터 모델링은 데이터베이스 설계의 핵심 과정이다. 이러한 데이터 모델링을 쉽게 할 수 있도록 도와주는 도구가 있는데 이것이 바로 데이터 모델(data model)이다.
데이터 모델 -> 데이터 모델링의 결과물을 표현하는 도구로, 개념적 데이터 모델과 논리적 데이터 모델이 있다.
개념적 데이터 모델 -> 사람의 머리로 이해할 수 있도록 현실 세계를 개념적 데이터 모델링하여 데이터베이스의 개념적 구조로 표현하는 도구다.
논리적 데이터 모델 -> 개념적 구조를 논리적 데이터 모델링하여 데이터베이스의 논리적 구조로 표현하는 도구다.
일반적으로 데이터 모델은 데이터 구조(data structure), 연산(operation), 제약조건(constraint)으로 구성된다. 보통 데이터 모델에서 데이터 구조를 강조하지만, 적용 가능한 연산과 제약조건도 이해할 필요가 있다.
데이터 구조는 크게 두 가지로 볼 수 있다.
개념적 데이터 모델에서의 데이터 구조 -> 현실 세계를 개념 세계로 추상화했을 때 어떤 요소로 이루어져 있는지를 표현하는 개념적 구조다.
논리적 데이터 모델에서 데이터 구조 -> 데이터를 어떤 모습으로 저장할 것인지를 표현하는 논리적 구조.
보통 데이터 구조는 자주 변하지 않고 정적이라는 특징이 있다.
연산 -> 데이터 구조에 따라 개념 세계나 컴퓨터 세계에서 실제로 표현된 값을 처리하는 작업으로, 값이 연산에 의해 계속 변경될 수 있으므로 동적이라는 특징이 있다.
제약조건 -> 데이터 무결성 유지를 위한 제약조건에는 구조적 측면의 제약 사항과 연산을 적용하는 경우 허용할 수 있는 의미적 측면의 제약사항이 있다.
아파트를 건설하려면 먼저, 요구사항을 반영하고 설계도부터 그려야 한다. -> 설계도를 이용해서 집을 짓기 전에 모델하우스도 지어봐야 한다.
-> 여기서 사람들이 요구 사항을 반영하여 설계도를 그리는 과정이 개념적 데이터 모델링이다.
-> 설계도를 그릴 때 사용하는 방법이나 도구가 개념적 데이터 모델이다.
-> 설계도를 토대로 모델하우스를 만드는 과정을 논리적 데이터 모델링이다.
-> 모델하우스를 만들 때 사용하는 방법이나 도구가 논리적 데이터 모델이다.
보통 개념적 데이터 모델링과 논리적 데이터 모델링을 통틀어 데이터베이스 설계라고 한다.
개념적 데이터 모델링과 논리적 데이터 모델링 작업을 지원하는 다양한 데이터 모델이 존재하는데, 사용하는 데이터 모델에 따라 현실 세계를 표현하는 개념적 구조나 논리적 구조의 모습이 달라진다.
-> 개념적 데이터 모델 중 대표적으로 많이 사용되는 것이 개체-관계 모델(E-R Model: Entity-Relationship Model)이다.
-> 논리적 데이터 모델로는 관계 데이터 모델(relational data model)이 가장 많이 사용된다.
개체-관계 모델
개체-관계 모델은 개체와 개체 간의 관계를 이용해 현실 세계를 개념적 구조로 표현하는 방법이다.
-> 현실 세계를 개체-관계 모델을 이용해 개념적으로 모델링하여 그림으로 표현한 것을 개체-관계 다이어그램(Entity-Relationship Diagram 또는 E-R 다이어그램)이라고 한다.
개체-관계 모델을 제대로 활용하려면 먼저 개체, 속성, 관계를 이해해야 하므로 각각의 개념을 알아보자.
[ 개체 ]
개체(Entity)는 현실 세계에서 조직을 운영하는 데 꼭 필요한 사람이나 사물과 같이 구별되는 모든 것을 의미한다. 즉, 개체는 저장할 만한 가치가 있는 중요 데이터를 가지고 있는 사람이나 사물 등이며, 개념적 모델링을 하는 데 가장 중요한 요소다.
개체 타입(Entity type) -> 개체는 다른 개체와 구별되는 이름을 가지고 있고, 각 개체만의 고유한 특성이나 상태, 즉 속성을 하나 이상 가지고 있다. 즉, 개체를 고유한 이름과 속성들로 정의한 것을 개체 타입이라고 한다.
개체 인스턴스(Entity instance) -> 개체를 구성하고 있는 속성이 실제 값을 가짐으로써 실체화된 개체를 의미한다. ex) 위 그림에서 <정소화, 부천시 원미구, 032-666-6666, 2000)과 같이 고객 개체 타입을 구성하는 각 속성에 구체적인 값을 가지는 개체 인스턴스가 여러 개 존재할 수 있다.
개체 집합(Entity set) -> 특정 개체 타입에 대한 개체 인스턴스들을 모아 놓은 것. 즉, 데이터베이스에서 실제로 저장하고 관리하는 것이 이 개체 인스턴스들의 모임인 개체 집합이라고 할 수 있다.
개체-관계 모델과 파일은 아래와 같이 대응된다.
개체-관계 모델 | 파일 구조 |
개체(Entity) | 레코드(Record) |
속성(Attribute) | 필드(Field) |
개체 타입 | 레코드 타입 |
개체 인스턴스 | 레코드 인스턴스 |
E-R 다이어그램에서 개체를 사각형으로 표현하고 아래 그림과 같이 사각형 안에 개체의 이름을 표기한다.
[ 속성 ]
속성(attribute)은 개체가 가지고 있는 고유한 특성이다. 속성은 그 자체만으로는 의미가 없지만 관련 있는 속성들을 모아 개체를 구성하면 하나의 중요한 의미를 표현할 수 있다. 속성은 일반적으로 의미 있는 데이터의 가장 작은 논리적 단위로 인식된다.
E-R 다이어그램에서 속성은 타원으로 표현하고, 타원 안에 속성의 이름을 표기한다. 아래 그림에서 고객 아이디와 고객명 속성을 E-R 다이어그램으로 표현한 예시다.
속성은 다음과 같이 다양한 기준으로 분류할 수 있다.
단일 값 속성과 다중 값 속성
특정 개체를 구성하는 속성 값이 하나면 단일 값 속성(single-valued attribute)으로 분류한다. ex) 고객 개체를 구성하는 이름, 적립금
이와 달리 속성이 값을 여러개 가질 수 있으면 다중 값 속성(multi-valued attribute)로 분류한다. ex) 고객 개체를 구성하는 연락처 속성은 한 명의 고객 인스턴스에 대해 집 전화번호와 휴대폰 번호 등 값을 여러개 가질 수 있으므로 다중 값 속성.
아래와 같이 다중값 속성은 이중 타원으로 표현한다. 연락처 속성이 다중 값 속성이다.
단순 속성과 복합 속성
단순 속성(simple attribute)은 의미를 더는 분해할 수 없는 속성이다. 즉, 단순 속성의 값은 의미가 하나다. ex) 고객 개체를 구성하는 적립금 속성은 의미가 더는 분해되지 않기 때문에 단순 속성.
반면, 복합 속성(composite attribute)은 의미를 분해할 수 있어 값이 여러 개의 의미를 포함한다. ex) 고객 개체를 구성하는 주소 속성은 도, 시, 동, 우편번호 등으로 의미를 나눌 수 있다. 고객 개체의 생년월일 속성도 연, 월, 일로 의미를 세분화할 수 있으므로 복합 속성.
복합 속성은 E-R 다이어그램에서 아래와 같이 표현한다. 아래 그림은 고객 개체가 가지고 있는 고객아이디, 고객명 속성과 복합 속성인 생년월일을 E-R 다이어그램으로 표현한 예시다.
유도 속성
값이 별도로 저장되는 것이 아니라 기존의 다른 속성 값에서 유도되어 결정되는 속성을 유도 속성(derrived attribute)으로 분류한다. 책 개체를 구성하는 가격과 할인율 속성으로 계산되는 판매 가격 속성이 유도 속성이다. 그리고 판매가격 속성을 계산하는 데 사용되는 가격과 할인율 같은 속성을 저장 속성(stored attribute)라고 한다.
유도 속성은 E-R 다이어그램에서 점선 타원으로 표현한다. 아래 그림은 책 개체가 가지고 있는 가격, 할인율 속성과 해당 속성들에서 유도되는 판매가격 속성을 E-R 다이어그램으로 표현한 예시다.
널 속성
널(null) 값은 데이터베이스에서 여러 가지로 중요한 의미를 지니므로 의미를 정확히 이해해야 한다. 널 값은 아직 결정되지 않았거나 모르는 값(unknown value)를 의미한다.
그리고 널 값이 허용되는 속성을 널 속성(null attribute)이라 한다.
키 속성
개체를 구성하는 속성들 중에서 특별한 역할을 하는 속성이 있는데 바로 키 속성(key attribute)이다. 모든 개체 인스턴스의 키 속성 값이 다르므로 키 속성은 개체 집합에 존재하는 각 개체 인스턴스들을 식별하는 데 사용된다. 또한, 어떤 경우에는 키를 둘 이상의 속성들로 구성하기도 한다.
개체 타입을 정의할 때 중요한 제약조건은 키 속성의 값이 개체 인스턴스마다 달라서 이 값으로 개체 인스턴스를 식별할 수 있어야 한다는 것이다. 만약 키 속성으로 적합한 속성이 여러개면 이 중 하나를 키로 사용하면 된다.
키 속성은 E-R 다이어그램에서 밑줄을 그어 표현한다. 아래 그림은 고객 개체의 고객아이디라는 키 속성을 E-R 다이어그램으로 표현한 예시다.
[ 관계 ]
관계(Relationship)는 개체와 개체가 맺고 있는 의미 있는 연관성으로, 개체-관계 모델의 중요한 요소다. 관계는 개체 집합들 사이의 대응 관계(correspondence), 즉, 매핑(mapping)을 의미한다.
-> 요구사항의 '동사'에 해당한다.
관계를 여러 개체(타입) 사이에서 정의되는 관계 타입(relationship type)과 실제 속성 값으로 구성된 특정 개체 인스턴스들 간에 맺어진 실제 관계인 관계 인스턴스로 구분하여 표현하기도 한다.
관계는 E-R 다이어그램에서 마름모로 표현한다. 아래 그림은 고객 개체와 책 개체 사이에 정의되는 구매 관계를 E-R 다이어그램으로 표현한 예시다. 예시에서는 구매 관계가 가지고 있는 구매일자와 결제방식 속성도 함께 표현했다.
관계의 유형
관계도 다양한 기준에 따라 분류할 수 있다. 먼저 관계에 참여하는 개체 타입의 수를 기준으로 이항 관계, 삼항 관계, 순환 관계 등으로 나눌 수 있다.
이항 관계 -> 개체 타입 2개가 맺는 관계.
삼항 관계 -> 개체 타입 3개가 맺는 관계.
순환 관계 -> 개체 타입 1개가 자기 자신과 맺는 관계.
8번째 포스트에서 살펴볼 데이터베이스 설계 과정에서 중요하게 활용되는 관계의 분류 기준은 매핑 원소의 수, 즉 매핑 카디널리티(mapping cardinality)다.
매핑 카디널리티 -> 관계를 맺는 두 개체 집합에서, 각 개체 인스턴스가 연관성을 맺고 있는 상대 개체 집합의 인스턴스 개수를 의미한다. 관계는 매핑 카디널리티를 기준으로 일대일(1:1), 일대다(1:n), 다대다(n:n)라는 세 가지 유형으로 분류할 수 있다.
일대일(1:1) 관계 -> 개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 하나와 관계를 맺을 수 있고, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 하나와 관계를 맺을 수 있다면 두 개체의 관계는 일대일 관계이다.
일대다(1:n) 관계 -> 개체 A의 각 개체 인스턴스는 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있지만, 개체 B의 각 개체 인스턴스는 개체 A의 개체 인스턴스 하나와만 관계를 맺을 수 있다면 두 개체는 일대다 관계이다.
다대다(n:n) 관계 -> 개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있고, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 여러 개와 관계를 맺을 수 있다면 두 개체는 다대다 관계다. ex) 예를 들어 아래 그림과 같이 고객 개체와 책 개체 사이에는 구매 관계가 존재한다. 일반적으로 고객 한 명이 책을 여러 권 구매할 수 있고, 책은 한 종류가 여러 고객에게 판매될 수 있기 때문에 두 개체의 구매 관계는 다대다 관계가 된다.
관계의 참여 특성
개체 A와 B 사이의 관계에서, 개체 A의 모든 개체 인스턴스가 관계에 반드시 참여해야 된다면 개체 A가 관계에 '필수적 참여한다' 또는 '전체 참여한다'라고 한다. 그리고 개체 A의 개체 인스턴스 중 일부만 관계에 참여해도 되면 개체 A가 관계에 '선택적 참여한다' 또는 '부분 참여한다'라고 한다.
필수적 참여 관계는 E-R 다이어그램에서 이중선으로 표현한다. 아래 그림은 고객 개체가 구매 관계에 필수적으로 참여하고 있음을 E-R 다이어그램으로 표현한 예시다.
관계의 종속성
두 개체가 관계에 대해 종속적인 특성을 가지는 경우도 있다. 개체 B가 독자적으로는 존재할 수 없고 다른 개체 A의 존재 여부에 의존적이라면, 개체 B가 개체 A에 종속되어 있다고 한다.
존재 종속(existence dependence) -> 개체 B가 개체 A에 종속되면, 이는 개체 A가 존재해야 개체 B가 존재할 수 있고 개체 A가 삭제되면 개체 B도 함께 삭제되어야 함을 의미한다. 이때 다른 개체의 존재 여부에 의존적인 개체 B를 약한 개체(weak entity)라 하고 다른 개체의 존재 여부를 결정하는 개체 A를 강한 개체(strong entity)라 한다.
즉, 강한 개체인 직원 개체에 직원번호라는 키 속성이 존재한다면, 직원번호 속성과 이름 속성을 조합하여 약한 개체인 부양가족 개체의 키를 구성할 수 있다. 그러면 부양가족 개체의 키는 (직원번호, 이름)이 된다. 이때 이름과 같이 약한 개체를 구별해주는 속성을 구별자(delimiter) 또는 구분키(partial key)라고 한다.
아래 그림은 강한 개체인 직원 개체와 약한 개체인 부양가족 개체의 관계를 E-R 다이어그램으로 표현한 예시다. 이처럼 약한 개체는 이중 사각형으로 표현하고 약한 개체가 강한 개체와 맺는 관계는 이중 마름모로 표현한다. 아래 예시에서는 부양가족이 부양 관계에 필수적으로 참여하기 때문에 이중선으로 표현했다.
[ E-R 다이어그램 ]
앞서 설명한 것처럼 E-R 다이어그램은 개체-관계 모델을 이용해 현실 세계를 개념적으로 모델링한 결과물을 그림으로 표현한 것이다. 개체-관계 모델을 이용해 현실 세계로부터 개체, 속성, 개체 간의 관계를 찾아내 그림으로 표현하면 글로 작성하는 것보다 훨씬 더 이해하기 쉽기 때문에 E-R 다이어그램을 많이 선호한다.
E-R 다이어그램의 구성은 아래와과 같다.
사각형 -> 개체를 표현.
마름모 -> 개체 간의 관계를 표현.
타원 -> 개체나 관계의 속성을 표현.
링크(연결선) -> 각 요소를 연결하는 링크
논리적 데이터 모델
[ 논리적 데이터 모델의 개념과 특성 ]
개체-관계 모델은 현실 세계를 사람들의 머릿속에 그릴 수 있는 개념적인 구조로 모델링하는 데 사용하므로 어떤 데이터베이스 관리 시스템으로 데이터베이스를 구축하든 상관이 없다. 하지만, E-R 다이어그램으로 표현된 개념적인 구조를 데이터베이스에 표현하는 형태를 결정하는 논리적 데이터 모델링에서는 데이터베이스 관리 시스템의 종류가 중요하다.
논리적 데이터 모델 -> 사용자 입장에서 선택한 데이터베이스 관리 시스템에 따라 E-R 다이어그램으로 표현된 개념적 구조를 데이터베이스에 어떤 형태로 저장할지를 논리적으로 표현하는데, 이러한 논리적 구조를 논리적 데이터 모델이라 한다. 쉽게 말해 논리적 데이터 모델은 논리적 데이터 모델링의 결과물이고, 사용자가 생각하는 데이터베이스의 모습 또는 구조다. 그리고 논리적 데이터 모델로 표현된 데이터베이스의 논리적 구조가 바로 데이터베이스 스키마(schema)이다.
[ 계층 데이터 모델 ]
계층 데이터 모델(hierarchical data model)은 데이터베이스의 논리적 구조가 트리(tree) 형태이다. 아래 그림은 고객, 책, 출판사 개체와 그들 사이의 관계를 계층 데이터 모델로 표현한 예시다. 개체는 사각형으로 나타내고 개체들 간의 관계는 링크(연결선)으로 나타내는데, 링크는 일대다 관계만 표현할 수 있다. 그리고 계층 데이터 모델은 두 개체 사이에 관계를 하나만 정의할 수 있어 관계에 이름을 붙여 구별할 필요가 없다.
계층 데이터 모델은 트리 구조로 표현되기 때문에 출판사 개체처럼 루트 역할을 하는 개체가 존재하고 사이클이 존재하지 않는다. 또한, 개체들 사이에는 상하 관계가 성립한다.
아래 그림은 부서, 직원, 상품, 고객 개체와 그들 사이의 관계를 계층 데이터 모델로 표현한 예시다.
-> 계층 데이터 모델은 복잡해질 수 있고 데이터의 삽입, 삭제, 수정 등을 연산하거나 원하는 데이터를 검색하기가 쉽지 않다는 단점 있음.
[ 네트워크 데이터 모델 ]
네트워크 데이터 모델(network data model)은 데이터베이스의 논리적 구조가 그래프(graph) 또는 네트워크(network) 형태다.
-> 네트워크 데이터 모델에서도 일대다 관계만 직접 표현할 수 있으므로 두 개체 사이의 일대다 관계들을 이용해 다대다 관계를 표현.
아래 그림은 부서, 직원, 상품, 고객 개체와 그들 사이의 관계를 네트워크 데이터 모델로 표현한 예시다.
References
데이터베이스 개론, 김연희(2022)