[데이터베이스] 4. 데이터 모델링
by 콰이엇김연희 저자님의 "데이터베이스 개론" 책을 학습하고 정리한 글입니다.
1. 데이터 모델링과 데이터 모델의 개념
📌 데이터 모델링 (Data modeling)
현실 세계에 존재하는 데이터를 컴퓨터 세계의 데이터베이스로 옮기는 변환 과정
- 추상화 (Abstraction) : 현실 세계의 데이터 중 필요한 데이터만 선별하는 과정
- 개념적 모델링 (Conceptual modeling) : 현실 세계의 중요 데이터를 추출하여 개념 세계로 옮기는 변환 과정
- 논리적 모델링 (Logical modeling) : 개념 세계의 데이터를 데이터베이스에 저장하는 구조로 변환하는 과정
- 일반적으로 개념적 모델링과 논리적 모델링을 구분하지 않고 합쳐서 데이터 모델링이라고 표현한다.
📌 데이터 모델 (Data model)
데이터 모델링의 결과물을 표현하는 도구
- 개념적 데이터 모델 : 현실 세계를 사람의 머리로 이해할 수 있도록 개념적 모델링의 결과물인 개념적 구조로 표현하는 도구
- 논리적 데이터 모델 : 개념적 구조를 논리적으로 모델링하여 논리적 구조로 표현하는 도구
일반적으로 데이터 모델은 데이터 구조, 연산, 제약조건으로 구성된다.
- 데이터 구조 (Data structure) : 자주 변하지 않고 정적이라는 특징
- 개념적 데이터 모델의 데이터 구조 : 현실 세계를 개념 세계로 추상화했을 때 어떤 요소로 이루어져 있는지를 표현하는 개념적 구조
- 논리적 데이터 모델의 데이터 구조 : 데이터를 어떤 모습으로 저장할 것인지를 표현하는 논리적 구조
- 연산 (Operation) : 데이터 구조에 따라 개념 세계나 컴퓨터 세계에서 실제로 표현된 값들을 처리하는 작업으로, 값이 연산에 의해 계속 변경될 수 있으므로 동적이라는 특징
- 제약조건 (Constraint) : 구조적 측면의 제약 사항과 연산을 적용하는 경우 허용할 수 있는 의미적 측면의 제약 사항
📌 데이터베이스 설계
보통 개념적 데이터 모델링과 논리적 데이터 모델링을 통틀어 표현하는 말
- 데이터 모델링 과정을 통해 논리적 구조가 결정되면, 컴퓨터 저장 장치에 실제로 저장되는 형태를 의미하는 물리적 구조로 변환하는 작업을 통해 현실 세계의 데이터를 컴퓨터 세계의 데이터로 저장한다.
개념적 데이터 모델링과 논리적 데이터 모델링 작업을 지원하는 다양한 데이터 모델이 있는데, 사용하는 데이터 모델에 따라 현실 세계를 표현하는 개념적 구조나 논리적 구조의 모습이 달라진다. 개념적 데이터 모델 중 대표적으로 많이 사용하는 것이 개체-관계 모델 (ER model, Entity-Relationship Model)이다. 논리적 데이터 모델로는 관계 데이터 모델 (Relational data model)이 가장 많이 사용된다.
2. 개체-관계 모델
📌 개체-관계 모델
개체(Entity)와 개체 간의 관계(Relationship)를 이용해 현실 세계를 개념적 구조로 표현하는 방법
📌 개체-관계 다이어그램(ERD, Entity Relationship Diagram)
현실 세계를 개체-관계 모델을 이용해 개념적으로 모델링하여 그림으로 표현한 것
2-1. 개체
📌 개체 (Entity)
현실 세계에서 조직을 운영하는 데 꼭 필요한 사람이나 사물과 같이 구별되는 모든 것
- 저장할 만한 가치가 있는 중요한 데이터를 가지고 있는 사람이나 사물 등을 의미한다. 예를 들어, 현실 세계의 서점을 개념적으로 모델링할 때 중요 데이터를 가지고 있는 사람인 고객과 중요 데이터를 가지고 있는 사물인 책이 개체가 된다.
- 개체는 사람과 사물처럼 물리적으로 존재하는 것만을 의미하지 않고, 개념이나 사건처럼 개념적으로만 존재하는 것도 개체가 될 수 있다. 학교 운영에 필요한 데이터를 가지고 있는 학과나 과목은 물리적으로 존재하지 않지만 반드시 필요한 개념으로 개체가 될 수 있다.
- 개체는 다른 개체와 구별되는 이름을 가지고 있고, 각 개체만의 고유한 특성이나 상태, 즉 속성을 하나 이상 가지고 있다. 개체를 고유한 이름과 속성들로 정의한 것을 개체 타입(Entity type)이라고 한다.
- 개체를 구성하고 있는 속성이 실제 값을 가지면서 실체화된 개체를 개체 인스턴스(Entity instance) 또는 개체 어커런스(Entity occurence)라고 한다.
- 특정 개체 타입에 대한 개체 인스턴스들을 모아 놓은 것을 개체 집합(Entity set)이라고 한다.
2-2. 속성
📌 속성 (Attribute)
개체가 가지고 있는 고유한 특성
- 속성은 그 자체만으로는 의미가 없지만 관련 있는 속성들을 모아 개체를 구성하면 하나의 중요한 의미로 표현할 수 있다.
- 속성은 일반적으로 의미 있는 데이터의 가장 작은 논리적 단위로 인식한다.
✍🏻 단일 값 속성과 다중 값 속성
- 단일 값 속성 (Single-valued attribute) : 특정 개체를 구성하는 속성 값이 하나일 때의 속성
- 예를 들어, 고객 개체를 구성하는 이름, 적립금 등의 속성은 한 명의 고객 인스턴스에 대해 하나의 값을 가진다.
- 다중 값 속성 (Multi-valued attribute) : 속성이 값을 여러 개 가질 수 있을 때의 속성
- 예를 들어, 책 개체를 구성하는 저자 속성도 한 권의 책 인스턴스에 저자가 여려 명일 수 있다.
✍🏻 단순 속성과 복합 속성
- 단순 속성 (Simple attribute) : 의미를 더는 분해할 수 없는 속성
- 예를 들어 책 개체를 구성하는 이름, ISBN, 가격 등의 속성은 의미를 나눌 수 없다.
- 복합 속성 (Composite attribute) : 의미를 분해할 수 있어 값이 여러 개의 의미를 포함하는 속성
- 예를 들어 고객 개체를 구성하는 주소 속성은 도, 시, 동, 우편번호 등으로 의미를 나눌 수 있다.
✍🏻 유도 속성 (Derived attribute)
값이 별도로 저장되는 것이 아니라 기존의 다른 속성 값에서 유도되어 결정되는 속성
- 책 개체를 구성하는 가격과 할인율 속성으로 계산되는 판매 가격 속성이 유도 속성이다.
- 그리고 판매가격 속성을 계산하는 데 사용되는 가격과 할인율 같은 속성을 저장 속성(stored attribute)이라고 한다.
- 실제로 값을 저장하고 있는 것은 저장 속성이고, 유도 속성은 필요할 때마다 계산되므로 값을 따로 저장할 필요가 없다.
✍🏻 널 속성 (Null attribute)
널 값을 허용하는 속성
- 널 값은 아직 결정되지 않았거나 모르는 값(Unknown value)을 의미한다.
- 또는 해당되는 값이 없는, 즉 존재하지 않는 값의 경우도 널 값이라고 한다.
- 이처럼 널 값은 값을 아직 갖지 않은 것으로 공백(Blank)이나 0(Zero)과는 다르다.
- 예를 들어, 사원 개체를 구성하는 병역 속성은 인스턴스의 성별이 여자인 경우 보통 해당 사항이 없으므로 널 값을 가진다.
✍🏻 키 속성 (Key attribute)
개체를 구성하는 속성들 중에서 특별한 역할을 하는 속성
- 키 속성은 개체 집합에 존재하는 각 개체 인스턴스들을 식별하는 데 사용한다.
- 예를 들어 고객 개체의 고객 아이디 속성은 고객마다 다르기 때문에 고객 개체의 키 속성이 될 수 있다.
- 어떤 경우에는 키를 둘 이상의 속성들로 구성하기도 한다.
- 예를 들어 고객 개체에 고객 아이디 속성이 없을 경우, 고객명과 집전화번호 속성을 조합하여 키를 구성할 수도 있다.
- 개체 타입을 정의할 때 중요한 제약조건은 키 속성의 값이 개체 인스턴스마다 달라서 이 값으로 개체 인스턴스를 식별할 수 있어야 한다는 것이다.
- 만약 키 속성으로 적합한 속성이 여러 개면 이 중 하나를 키로 사용하면 된다.
2-3. 관계
📌 관계 (Relationship)
개체와 개체가 맺고 있는 의미 있는 연관성
- 관계는 개체 집합들 사이의 대응 관계(correspondence), 즉 매핑(mapping)을 의미한다.
- 업무 처리에 대한 요구 사항을 개체들을 이용해 하나의 문장으로 만들었을 때 동시에 해당하는 것이 관계다.
- 관계도 개체처럼 속성을 가질 수 있다. 관계를 맺음으로써 발생하는 중요한 데이터들이 관계의 속성이 된다.
- 예를 들어 고객이 책을 구매하면 발생하는 구매일자, 결제방식 등이 구매 관계의 속성이 될 수 있다.
✍🏻 관계에 참여하는 개체 타입 수 기준으로 판단하는 관계의 유형
- 이항 관계 : 개체 타입 2개가 맺는 관계
- 삼항 관계 : 개체 타입 3개가 맺는 관계
- 순환 관계 : 개체 타입 1개가 자기 자신과 맺는 관계
✍🏻 매핑 카디널리티에 따른 관계의 분류 기준
📌 매핑 카디널리티 (Mapping cardinality)
관계를 맺는 두 개체 집합에서, 각 개체 인스턴스가 연관성을 맺고 있는 상대 개체 집합의 인스턴스 개수를 의미한다.
- 일대일 관계 (1:1) : 개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 하나와 관계를 맺을 수 있고, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 하나와 관계를 맺을 수 있다면 두 개체의 관계는 일대일 관계다.
- 일대다 관계 (1:N) : 개체 A의 각 개체 인스턴스는 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있지만, 개체 B의 각 개체 인스턴스는 개체 A의 개체 인스턴스 하나와만 관계를 맺을 수 있다면 두 개체의 관계는 일대다 관계다.
- 다대다 관계 (N:M) : 개체 A의 각 인스턴스가 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있고, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 여러 개와 관계를 맺을 수 있다면 두 개체는 다대다 관계다.
✍🏻 관계의 참여 특성
- 개체 A와 B 사이의 관계에서 개체 A의 모든 개체 인스턴스가 관계에 반드시 참여해야 한다면 개체 A가 관계에 '필수적으로 참여한다' 또는 '전체 참여한다'라고 한다.
- 개체 A의 개체 인스턴스 중 일부만 관계에 참여해도 되면 개체 A가 관계에 '선택적 참여한다' 또는 '부분 참여한다'라고 한다.
✍🏻 관계의 종속성
- 개체 B가 독자적으로 존재할 수 없고 다른 개체 A의 존재 여부에 의존적이라면, 개체 B가 개체 A에 종속되어 있다고 한다.
- 개체 B가 개체 A에 종속되면, 이는 개체 A가 존재해야 개체 B가 존재할 수 있고 개체 A가 삭제되면 개체 B도 함께 삭제되어야 함을 의미한다. 이러한 종속을 존재 종속(existence dependence)이라고 한다.
- 이때 다른 개체의 존재 여부에 의존적인 개체 B를 약한 개체(weak entity)라고 하고, 다른 개체의 존재 여부를 결정하는 개체 A를 강한 개체(strong entity)라고 한다. 두 개체가 종속적인 관계를 맺고 있어 약한 개체를 종속 개체로, 강한 개체를 오너 개체로 부르기도 한다.
2-4. E-R 다이어그램
E-R 다이어그램은 개체-관계 모델을 이용해 현실 세계를 개념적으로 모델링한 결과물을 그림으로 표현한 것이다. 개체-관계 모델을 이용해 현실 세계로부터 개체, 속성, 개체 간의 관계를 찾아내 그림으로 표현하면 글로 작성하는 것보다 훨씬 이해하기 쉽기 때문에 E-R 다이어그램을 많이 선호한다.
- 기본적으로 개체를 표현하는 사각형, 개체 간의 관계를 표현하는 마름모, 개체나 관계의 속성을 표현하는 타원, 각 요소를 연결하는 링크(연결선)으로 구성된다.
- 그리고 일대일, 일대다, 다대다 관계를 레이블로 표현한다.
3. 논리적 데이터 모델
3-1. 논리적 데이터 모델의 개념과 특성
E-R 다이어그램으로 표현된 개념적인 구조를 데이터베이스에 표현하는 형태를 결정하는 논리적 데이터 모델링에서는 데이터베이스 관리 시스템의 종류가 중요하다.
- 사용자 입장에서 선택한 DBMS에 따라 ERD로 표현된 개념적 구조를 데이터베이스에 어떤 형태로 저장할지를 논리적으로 표현하는데 이러한 논리적인 구조를 논리적 데이터 모델이라고 한다.
- 쉽게 말해 논리적 데이터 모델은 논리적 데이터 모델링의 결과물이고, 사용자가 생각하는 데이터베이스의 모습 또는 구조다.
- 논리적 데이터 모델로 표현한 데이터베이스의 논리적 구조가 바로 데이터베이스 스키마(Schema)이다.
3-2. 계층 데이터 모델
📌 계층 데이터 모델 (Hierarchical data model)
데이터베이스의 논리적 구조를 트리 형태로 표현한다.
- 개체는 사각형, 개체들 간의 관계는 링크(연결선)로 나타내는데, 링크는 일대다 관계만 표현할 수 있다.
- 두 개체 사이에 관계를 하나만 정의할 수 있어 관계에 이름을 붙여 구별할 필요가 없다.
- 다대다 관계를 직접 표현할 수 없어 별도의 개체를 추가로 생성하여 이를 표현한다.
- 또한, 트리 구조로 표현되기 때문에 루트 역할을 하는 개체가 존재하고, 사이클이 존재하지 않는다.
- 뿐만 아니라, 일대다 관계를 맺는 개체 사이에는 상하 관계가 성립하여, 부모 개체와 자식 개체로 표현한다.
- 부모 개체 하나가 여러 자식 개체를 가질 수 있지만, 모든 자식 개체는 부모 개체를 하나만 가질 수 있다.
3-3. 네트워크 데이터 모델
📌 네트워크 데이터 모델 (Network data model)
데이터베이스의 논리적 구조를 그래프 또는 네트워크 형태로 표현한다.
- 개체는 사각형으로 나타내고 개체들 간의 관계는 화살표로 나타내는데, 화살표는 일대다 관계만 표현할 수 있다.
- 두 개체 간의 관계를 여러 개 정의할 수 있어 관계를 이름으로 구별한다.
- 일대다 관계만 직접 표현할 수 있으므로 두 개체 사이의 일대다 관계들을 이용해 다대다 관계를 표현한다.
- 일대다 관계의 개체들을 각각 오너(owner)와 멤버(member)라고 부르고, 이들 사이 관계를 오너-멤버 관계라고 부른다.
- 같은 개체들 사이의 관계를 2개 이상 표현할 수 있어 개념적 구조를 논리적으로 좀 더 자연스럽게 모델링할 수 있다.
- 하지만 계층 데이터 모델보다 구조가 훨씬 복잡해질 수 있어, 데이터 연산과 검색이 더 어려워지는 문제가 발생한다.
참고자료
'컴퓨터과학 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 7. 데이터베이스 언어 SQL (0) | 2024.11.26 |
---|---|
[데이터베이스] 3. 데이터베이스 시스템 (0) | 2024.11.18 |
[데이터베이스] 2. 데이터베이스 관리 시스템 (0) | 2024.11.14 |
[데이터베이스] 1. 데이터베이스 기본 개념 (0) | 2024.11.14 |
블로그의 정보
콰이엇의 개발기록
콰이엇