멈추지 않고 끈질기게

[DB] 데이터 모델링 본문

DB

[DB] 데이터 모델링

sam0308 2023. 4. 17. 10:59

※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다.

※ 해당 포스팅은 하기 출처들을 참조하였습니다.

- 김연희, 데이터베이스 개론, 한빛아카데미, 2022

 

 

 

 

이번 포스팅에서는 데이터 모델링에 대하여 알아보겠습니다.

1. 데이터 모델링이란

 현실 세계의 데이터를 데이터 베이스에 저장하기 위해서는, 우선 대상의 주요 데이터를 선별하는 과정이 필요하며 이를 추상화(abstraction)라고 합니다. 그리고 추상화한 데이터를 데이터베이스에 저장하려면 데이터베이스의 구조에 맞게 변환하는 과정이 필요합니다. 현실 세계의 데이터를 추상화하여 개념 세계로 옮기는 과정을 개념적 모델링(conceptual modeling)이라고 하며, 개념 세계의 데이터를 데이터베이스에 저장할 구조를 결정하고 표현하는 과정을 논리적 모델링(logical modeling)이라고 합니다. 이 두가지를 통틀어 데이터 모델링이라 합니다. 

 

그림 1. 데이터 모델링

 예를 들어 2D 게임에서 기사 캐릭터를 만든다고 가정해 봅시다. 우선 누가 봐도 기사를 연상할만한 중세 시대 갑옷을 입은 기사의 외형(스프라이트)가 필요할 것이고, 공격 타입은 근접공격, 보통의 공격력과 높은 방어력, 낮은 이동속도 등으로 기사를 표현할 수 있을 것입니다. 이렇게 필요한 데이터들을 추출하는 과정이 개념적 모데링에 속할 것입니다. 또한 해당 데이터들을 실제로 저장하려면, 각 데이터 타입을 정해야 할 것입니다. 스프라이트 ID나 공격력은 int 타입으로, 방어력이나 이동속도 등은 float 타입으로 저장하는 등 데이터 타입을 명확하게 정하고 표현하는 과정이 논리적 모델링에 해당합니다. 

 

 이러한 데이터 모델링 과정을 보다 용이하게 만들기 위해 이용하는 것이 데이터 모델입니다. 데이터 모델은 데이터 모델링의 결과를 표현하는 도구로, 개념적 데이터 모델과 논리적 데이터 모델로 나뉩니다. 개념적 데이터 모델은 현실 세계를 데이터베이스의 개념적 구조에 맞게 표현하기 위한 도구이며, 논리적 데이터 모델은 개념적 구조를 데이터베이스의 논리적 구조에 맞게 표현하기 위한 도구입니다.

 

 데이터 모델은 일반적으로 데이터 구조, 연산, 제약조건의 3가지 요소로 구성됩니다. 데이터 구조는 개념적 데이터 모델에서는 현실 데이터를 추상화했을 때 어떤 요소로 이루어져 있는지를 표현하며, 논리적 데이터 모델에서는 데이터를 어떻게 저장할 것인지를 표현합니다. 데이터 구조는 자주 변하지 않는 정적인 요소입니다. 연산은 실제로 저장된 데이터들을 처리하는 작업으로, 데이터를 변경시키는 동적인 요소입니다. 제약조건은 데이터 무결성 유지를 위한 요소로, 구조적 측면의 제약과 연산 허용 범위를 제한하는 의미적 측면의 제약이 있습니다.

 

 

2. 개체-관계 모델(E-R 모델)

 개체-관계 모델(이하 E-R 모델)는 개체와 개체 간의 관계를 통해 현실 세계를 개념적 구조료 표현하는 방법으로, 현실 세계를 E-R 모델을 통해 개념적 모델링하여 그림으로 표현한 것을 개체-관계 다이어그램(이하 E-R 다이어그램)이라 합니다. E-R 모델은 개체, 속성, 관계의 3가지 요소로 구성되어 있습니다. 

 

개체

 개체(entity)란 다소 추상적인 개념으로, 데이터 측면에서 보자면 저장할만한 가치가 있는 데이터를 가진 사람이나 사물 등을 뜻한다고 볼 수 있습니다. 또한, 꼭 물리적인 존재 뿐만 아니라 개념적으로 존재하는 것들도 개체가 될 수 있습니다. 예를 들면 게임에서 플레이어와 몬스터들도 개체에 속하지만, 플레이어의 직업 또는 몬스터의 타입 등도 개체가 될 수 있습니다.

 

그림 2. 개체 타입과 개체 인스턴스

 개체는 다른 개체와 구별되는 이름을 가지고 있어야 하며, 각 개체만의 고유한 특성이나 상태(속성)를 하나 이상 가집니다. 개체를 고유의 이름 및 속성들로 정의한 것을 개체 타입이라 하며, 개체를 구성하는 속성들에 실제 값을 대입하여 실체화된 것을 개체 인스턴스(entity instance), 혹은 개체 어커런스(entity occurance)라고 합니다. 개체 인스턴스가 모여 개체 집합(entity set)이 되며, 실제로 데이터베이스에서 저장, 관리하는 대상이 됩니다. 

 

 E-R 다이어그램에서 개체는 사각형으로 표현하며, 안에 개체 이름을 표기하여 구분합니다.

 

그림 3. 개체의 E-R 다이어그램 표현

 

속성

 속성(attribute)은 개체가 가지는 고유한 특성으로, 의미 있는 데이터의 최소 논리적 단위가 됩니다. E-R 다이어그램에서는 타원형으로 표현하며, 안에 속성 이름을 표기하여 구분합니다. 속성에는 다양한 종류가 있으며, 각 속성마다 E-R 다이어그램에서 표현하는 방법도 조금씩 달라집니다.

 

 각 속성별 특징은 다음과 같습니다.

 

1) 단일 값 속성

 특정 개체를 구성하는 속성 값이 하나면 단일 값 속성으로 분류합니다. 예를 들어 플레이어 ID는 플레이어당 하나만 존재하므로 단일 값 속성이 됩니다.

 

2) 다중 값 속성

 속성이 여러개의 값을 가질 수 있는 경우 다중 값 속성으로 분류하며, E-R 다이어그램에서는 이중 타원으로 표현합니다. 플레이어가 무기를 양손에 착용할 수 있는 경우, 무기 속성은 다중 값 속성이 됩니다.

 

3) 단순 속성

 속성이 더이상 의미를 분해할 수 없다면, 즉 하위 속성을 가질 수 없다면 단순 속성으로 분류합니다. 단일 값 속성에서 예를 든 플레이어 ID의 경우, 더이상 분해할 수 없는 속성이므로 단일 값 속성이자 단순 속성이 됩니다.

 

4) 복합 속성

 의미를 더 나눌 수 있다면, 즉 하위 속성을 가질 수 있다면 복합 속성으로 분류합니다. 예를 들어 플레이어의 위치 속성은 다시 x좌표, y좌표, z좌표로 나뉠 수 있으므로 복합 속성이 됩니다. 복합 속성은 E-R 다이어그램에서 해당 속성과 하위 속성을 연결선으로 이어 표현합니다.

 

5) 유도 속성

 해당 속성의 값이 별도로 저장되는 것이 아닌, 다른 속성들의 값을 통해 유도되어 결정되는 속성은 유도 속성으로 분류하며, E-R 다이어그램에서는 점선 타원으로 표현합니다. 예를 들어 플레이어의 전투력은 기본 스탯(공격력, 방어력 등), 스킬 레벨 등을 참조하여 내부 알고리즘의 계산을 통해 값이 결정되므로 유도 속성이 됩니다. 

 

6) 키(key) 속성

 개체 집합에 존재하는 각 개체 인스턴스를 식별하는데 사용하는 속성을 키 속성이라 하며, E-R 다이어그램에서는 속성 이름에 밑줄을 그어 표현합니다. 개체 타입 정의 시, 인스턴스간에 중복되는 값이 없는 속성을 키 속성으로 선택하여 인스턴스를 구분할 수 있도록 해야 합니다. 예를 들어 플레이어 ID는 각 플레이어마다 고유하게 가지는 값이기 때문에 키 속성으로 사용할 수 있습니다.

 

 키 속성은 경우에 따라 둘 이상의 속성으로 구성할 수도 있습니다. 예를 들어 닉네임 중복을 허용하는 게임의 경우, 닉네임 외에 별도로 생성되는 코드가 있으며 이 두가지를 함께 사용하여 특정 플레이어를 검색할 수 있습니다. 특정 플레이어 검색이 가능하다는 뜻은 두가지 속성을 통해 인스턴스 식별이 가능하다는 뜻이므로, 닉네임과 생성코드 두가지 속성을 조합하여 키 속성으로 사용할 수 있을 것입니다.

 

7) 널(null) 속성

 널(null)은 프로그래밍 언어에서도 등장하는 개념으로, 데이터베이스에서는 아직 결정되지 않았거나 모르는 값, 존재하지 않는 값을 의미합니다(0과는 의미가 다릅니다). 이러한 널 값을 허용하는 속성을 널 속성이라 합니다. 예를 들어 플레이어가 아직 길드에 가입하지 않은 상태라면, 해당 플레이어의 길드 속성값은 널 값이 될 것입니다. 이처럼 값이 결정되지 않을 수 있는 속성을 널 속성으로 만들게 됩니다.

 

그림 4. 속성별 E-R 다이어그램 표현

 

관계

 관계(relationship)는 개체간의 의미 있는 연관성을 나타낸 것으로, E-R 모델에서 중요한 요소입니다. 개체 집합들 사이의 대응 관계(mapping)를 표현하며, 관계를 통해 개체들 간의 연관성을 이용한 처리를 수행할 수 있습니다. 관계도 개체처럼 속성을 가질 수 있으며, 해당 관계를 통해 발생하는 데이터들이 관계의 속성이 됩니다. 예를 들어 플레이어가 NPC에게서 포션을 구매했을 경우, 소모 재화나 구입 상품 등이 구매라는 관계의 속성이 될 수 있습니다. 관계는 E-R 다이어그램에서 마름모로 표현하며, 관계명을 안에 표기합니다. 관계의 속성은 개체와 마찬가지로 속성과 연결선을 통해 표현합니다.

 

그림 5. 관계의 E-R 다이어그램 표현

 

 

1) 관계의 유형

 관계도 다양한 기준에 따라 분류할 수 있으며, 그 중 많이 사용되는 기준이 매핑 카디널리티(mapping cardinality)입니다. 

관계를 맺는 두 개체 집합에서 한 인스턴스가 연관성을 맺는 인스턴스 수를 의미하며, 일대일(1:1), 일대다(1:N), 다대다(N:M)의 3가지 유형이 존재합니다. 

 

 1:1 관계는 개체 A와 개체 B의 인스턴스가 서로 하나의 인스턴스와 관계를 맺을 수 있는 관계입니다. 1:N 관계는 개체 A의 인스턴스는 개체 B의 인스턴스 여러개와 관계를 맺을 수 있으나, B의 인스턴스는 A의 인스턴스 하나와 관계를 맺을 수 있는 관계입니다. N:M 관계에서는 A와 B 서로 여러개의 인스턴스와 관계를 맺을 수 있습니다.

 

그림 6. 1:1, 1:N, N:M 관계의 예시

 그림 6은 3가지 관계 유형에 대한 예시입니다. 각 던전마다 고유의 보스가 존재한다면, 던전과 보스의 관계는 1:1 관계가 됩니다. 플레이어는 하나의 길드에만 속할 수 있고, 한 길드에는 여러명의 플레이어가 속할 수 있으므로 플레이어와 길드의 관계는 1:N 관계입니다. 몬스터와 아이템의 드랍 관계의 경우, 한 몬스터가 여러가지 아이템을 드랍할 수 있으며 한 아이템이 여러 종류의 몬스터에게서 드랍될 수 있으므로 N:M 관계가 됩니다. 

 

2) 관계의 참여 특성 

 개체 A와 B의 관계에서 A의 모든 인스턴스가 해당 관계에 반드시 참여해야 하는 경우 , 개체 A가 관계에 필수적 참여(혹은 전체 참여) 한다고 합니다. 반대로 B의 인스턴스 중 일부만 관계에 참여해도 되는 경우, 개체 B가 관계에 선택적  참여(혹은 부분 참여) 한다고 합니다. 

 

그림 7. 필수적 참여와 선택적 참여

 그림 7은 필수적 참여 관계와 선택적 참여 관계의 예시를 E-R 다이어그램으로 표현한 것입니다. 몬스터 처치 시 반드시 아이템을 하나 이상 드랍해야 한다면, 몬스터는 드랍 관계에 필수적 참여한다고 볼 수 있습니다. 반대로 몬스터 처치 시 HP 포션은 드랍해도 MP 포션은 드랍하지 않을 수 있으므로, 아이템은 드랍 관계에 선택적 참여합니다. E-R 다이어그램에서 필수적 참여 관계는 몬스터와 드랍 간의 연결처럼 이중선으로 표현합니다.

 

3) 관계의 종속성

 개체가 관계에 대해 종속적인 특성을 가지는 경우도 있으며, 이렇게 개체 A가 개체 B와의 관계를 통해서만 존재할 수 있다면(종속적이라면) 개체 A는 개체 B에 종속적이다 라고 합니다. 이 때 다른 개체의 존재여부를 결정하는 개체를 강한 개체(strong entity), 종속적인 개체를 약한 개체(weak entity)라고 합니다. 데이터베이스에서 강한 개체를 삭제할 경우, 약한 개체도 같이 삭제되어야 합니다. 강한 개체와 약한 개체의 관계는 보통 1:N 관계이며, 약한 개체는 강한 개체와의 관계에 필수적 참여합니다.

 

그림 8. 강한 개체와 약한 개체

 그림 8은 강한 개체와 약한 개체가 맺는 관계의 예시를 E-R 다이어그램으로 표현한 것입니다. 펫은 독자적으로 존재할 수 없고 플레이어의 캐릭터에 소속된 상태여야 하며, 캐릭터 삭제 시 해당 캐릭터가 보유중이던 펫도 함께 삭제됩니다. 따라서 캐릭터와 펫의 보유 관계에서는 캐릭터가 강한 개체, 펫이 약한 개체가 됩니다. E-R 다이어그램에서 약한 개체는 이중 사각형으로 표현하며, 약한 개체와 강한 개체가 맺는 관계는 이중 마름모로 표현합니다.

 

그림 9. 완성된 E-R 다이어그램

 그림 9는 지금까지 소개한 내용들을 통해 게임에서 플레이어와 NPC, 플레이어와 펫의 관계를 E-R 다이어그램으로 표현한 것입니다. 플레이어는 여러명의 NPC에게서 구매할 수 있고, NPC 또한 여러명의 플레이어에게 물건을 판매하므로 해당 관계는 N:M 이며, 이 경우 E-R 다이어그램에서 연결선에 n 과 m을 표기합니다. 플레이어는 여러마리의 펫을 보유할 수 있으며, 펫은 한명의 플레이어에게만 속하므로 1:N 관계이고, 마찬가지로 연결선에 1과 n을 표기합니다. 관계 유형 외에도 위에서 언급한 키 속성, 다중 값 속성, 복합 속성 등의 표현을 포함하고 있습니다.

 

 

3. 계층 데이터 모델과 네트워크 데이터 모델

 계층 데이터 모델(hierachical data model)은 데이터베이스이 논리적 구조를 트리 형태로 구성합니다. 개체는 사각형으로 표현하며 개체들 간의 관계는 링크(연결선)으로 표현합니다. 링크는 1:N 관계만 표현할 수 있으며, 개체 사이의 관계를 하나만 정의할 수 있기에 관계에 별도의 이름을 붙이지 않습니다. 

 

그림 10. 계층 데이터 모델 예시

 계층 데이터 모델은 트리 구조로 표현하므로 관계를 맺는 개체 간에 상하 관계가 존재합니다. 상위 개체를 부모 개체, 하위 개체를 자식 개체라고 하며 이들 사이의 관계를 부모자식 관계라고 부릅니다. 트리 구조의 특성상 부모는 여러개의 자식 개체를 가질 수 있지만, 자식은 하나의 부모 개체만을 가질 수 있습니다. 이렇듯 관계 정의 시 제약이 많아 개념적 구조를 논리적 구조로 모델링하는 과정이 어렵고, 이로 인해 구조가 복잡해질 수 있습니다. 또한 데이터의 삽입, 삭제, 수정 및 검색이 어렵다는 단점이 있습니다.

 

 

 네트워크 데이터 모델(network data model)은 데이터베이스의 논리적 구조를 그래프나 네트워크 형태로 구성합니다. 개체는 사각형으로, 개체 간의 관계는 화살표로 표현합니다. 화살표는 1:N 관계만 표현할 수 있으며, 계층 데이터 모델과 달리 개체 간의 관계를 여러개 정의할 수 있기 때문에 이름을 붙여 구분합니다.  

 

그림 11. 네트워크 데이터 모델 예시

 네트워크 데이터 모델은 개체 간의 관계를 2개 이상 표현할 수 있기에 개념적 구조를 논리적 구조로 모델링하는 과정이 계층 데이터 모델에 비해 쉽습니다. 다만 구조 자체는 오히려 더욱 복잡해질 수 있기에, 데이터의 삽입, 삭제, 수정 및 검색 난이도는 계층 데이터 모델보다도 어려워집니다. 

 

 사실 상기 두가지 데이터 모델보다 삽입, 삭제, 수정 및 검색 난이도가 낮은 관계 데이터 모델이 많이 사용됩니다. 다만 관계 데이터 모델에 대해서는 자주 사용되는 만큼 깊게 알아보기 위하여 별도의 포스팅에서 다루도록 하겠습니다.

 

 

 

'DB' 카테고리의 다른 글

[DB][SQL] 데이터의 검색  (0) 2023.05.02
[DB] 관계 데이터 모델  (0) 2023.04.22
[DB] 데이터베이스 관리 시스템(DBMS)  (0) 2023.04.09
[DB] 트랜잭션(Transaction)  (0) 2023.04.04
[DB] 데이터베이스의 정의  (0) 2023.02.26