데이터 모델링(data modeling)은 현실 세계에 존재하는 데이터를 컴퓨터 세계의 데이터베이스로 옮기는 변환 과정을 의미한다.
현실 세계의 데이터를 컴퓨터 세계로 옮기기 위해 필요한 작업 중 추상화(abstraction)라는 작업이 있다.
추상화는 현실 세계에 존재하는 개체로부터 중요한 개념을 분리하는 작업이다.
즉, 우리는 추상화된 정보를 가지고 현실 세계의 개체를 유추할 수 있다.
⇒ 보통 두 모델링 단계를 통틀어 데이터 모델링이라고 부른다.
데이터 모델(data model)은 데이터 모델링의 결과를 표현하는 도구로, 개념적 데이터 모델과 논리적 데이터 모델이 있다.
일반적으로 데이터 모델은 데이터 구조(data structure), 연산(operation), 제약조건(contraint)으로 구성된다.
보통 개념적 데이터 모델링과 논리적 데이터 모델링을 통틀어 데이터 베이스 설계라고 한다.
개체-관계 모델은 1976년 Peter Chen이 제안한 것으로, 개체(entity)와 개체 간의 관계(relationship)를 이용해 현실 세계를 개념적 구조로 표현하는 방법이다.
현실 세계를 개체-관계 모델을 이용해 개념적으로 모델링하여 도식화한 것을 개체-관계 다이어그램(E-R diagram)이라 한다.
개체(entity)는 중요한 데이터를 가지는 사람, 사물 혹은 개념이나 사건 등을 의미하며, 개념적 모델링을 하는데 있어 중요한 요소이다.
개체는 다른 개체와 구별되는 이름을 가지고 있고, 각 개체만의 고유한 특성이나 상태, 즉 속성을 하나 이상 갖는다.
개체를 고유의 이름과 속성들로 정의한 것을 개체 타입(entity type)이라하고, 개체를 구성하는 속성이 실제 값을 가짐으로써 실체화된 개체를 개체 인스턴스(entity instance)라고 한다.
특정 개체 타입에 대한 개체 인스턴스들을 모아 놓은 것을 개체 집합(entity set)이라하며, 데이터베이스에서 실제로 저장하고 관리하는 것은 이 개체 집합이라고 할 수 있다.
E-R 다이어그램에서 개체는 사각형으로 표현하고, 사각형 안에 개체의 이름을 표기한다.
속성(attribute)은 개체가 가지고 있는 고유한 특성이다. 속성 그 자체만으로는 큰 의미가 없지만 관련 있는 속성들을 모아 개체를 구성하면 하나의 중요한 의미를 표현할 수 있다. 속성은 일반적으로 의미 있는 데이터의 가장 작은 논리적 단위로 인식된다.
E-R 다이어그램에서 속성은 타원으로 표현하고, 타원 안에 속성의 이름을 표기한다.
단일 값 속성과 다중 값 속성
특정 개체를 구성하는 속성의 값이 하나면 단일 값 속성(single-valued attribute)으로 분류한다.
즉, 한 개체가 특정 속성에 대해 갖는 값이 오직 하나인 속성을 의미한다.
이와 달리 속성이 값을 여러 개 가질 수 있으면 다중 값 속성(multi-valued attribute)으로 분류한다.
즉, 한 개체가 특정 속성에 대해 갖는 값이 두개 이상일 수 있는 속성을 의미한다.
다중 값 속성은 E-R 다이어그램에서 이중 타원으로 표현한다.
단순 속성과 복합 속성
단순 속성(simple attribute)은 의미를 더는 분해할 수 없는 속성이다.
즉, 단순 속성의 값은 의미가 오직 하나이다.
반면, 복합 속성(composite attribute)은 의미를 분해할 수 있어 값이 여러 개의 의미를 포함한다.
즉, 복합 속성은 여러 개의 단순 속성이 합쳐진 속성으로 볼 수 있다.
유도 속성
값이 별도로 저장되는 것이 아니라 기존의 다론 속성 값에서 유도되어 결정되는 속성을 유도속성(derivated attribute)으로 분류한다.
속성 1과 속성 2의 계산으로 유도되는 속성 3이 있다고 가정한다면, 속성 1과 속성 2는 저장 속성(stored attribute)이고, 속성 3은 유도 속성이 된다.
실제로 값을 가지고 있는 것은 저장 속성이고 유도 속성은 필요할 때마다 계산되므로 값을 따로 저장할 필요가 없다.
유도 속성은 E-R 다이어그램에서 점선 타원으로 표현한다.
널 속성
널(null) 값은 아직 결정되지 않았거나 모르는 값(unknown value)을 의미한다. 또는 해당되는 값이 없는, 즉 존재하지 않는 값의 경우도 널 값이라 한다. 이처럼 널 값은 값을 아직 갖지 않은 것이므로 공백(blank)이나 0(zero)과는 다르다.
널 값이 허용되는 속성을 널 속성(null attribute)이라 한다.
키 속성
개체를 구성하는 속성들 중에서 특별한 역할을 하는 속성이 있는데 바로 키 속성(key attribute)이다.
모든 개체 인스턴스의 키 속성 값이 다므르로 키 속성은 개체 집합에 존재하는 각 개체 인스턴스들을 식별하는데 사용한다.
키 속성은 E-R 다이어그램에서 밑줄을 그어 표현한다.
관계(relationship)은 개체와 개체가 맺고 있는 의미 있는 연관성으로, 개체-관계 모델의 중요한 요소이다.
관계는 개체 집합들 사이의 대응 관계(correspondence), 즉 매핑(mapping)을 의미한다.
관계를 여러 개체(타입) 사이에서 정의되는 관계 타입(relationship type)과 실제 속성 값으로 구성되어 있는 특정 개체 인스턴스들 간에 맺어진 실제 관계인 관계 인스턴스(relationship instance)로 구분하여 표현하기도 한다.
관계도 개체처럼 속성을 가질 수 있다. 관계를 맺음으로써 발생하는 중요한 데이터들이 관계의 속성이 된다.
관계는 E-R 다이어그램에서 마름모로 표현한다.
관계의 유형
일대일 관계
개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 하나와 관계를 맺을 수 있고,
개체 B의 각 개체 인스턴스가 개체 A의 개체 인스턴스 하나와 관계를 맺을 수 있다.
일대다 관계
개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있고,
개체 B의 각 개체 인스턴스는 개체 A의 개체 인스턴스 하나와만 관계를 맺을 수 있다.
다대다 관계
개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있고,
개체 B의 각 개체 인스턴스가 개체 A의 개체 인스턴스 여러개와 관계를 맺을 수 있다.
관계의 참여 특성
개체 A와 B 사이의 관계에서, 개체 A의 모든 개체 인스턴스가 관계에 반드시 참여해야 된다면 개체 A가 관계에 ‘필수적 참여한다.’ 또는 ‘전체 참여한다.’라고 한다.
개체 A의 개체 인스턴스 중 일부만 관계에 참여해도 되면 개체 A가 관계에 ‘선택적 참여한다.’ 또는 ‘부분 참여한다.’라고 한다.
필수적 참여 관계는 E-R 다이어그램에서 이중선으로 표현한다.
관계의 종속성
개체 B가 독자적으로 존재할 수 없고 다른 개체 A의 존재 여부에 의존적이라면, 개체 B가 개체 A에 종속되어 있다고 한다. 개체 B가 개체 A에 종석되면, 개체 A가 존재해야 개체 B가 존재할 수 있고 개체 A가 삭제되면 개체 B도 함께 삭제되어야 함을 의미한다. 이러한 종속을 특별히 존재 종속(existence dependence)이라 한다.
이때, 다른 개체의 존재 여부에 의존적인 개체 B를 약한 개체(weak entity)라 하고, 다른 개체의 존재 여부를 결정하는 개체 A를 강한 개체(strong entity)라 한다.
약한 개체는 E-R 다이어그램에서 이중 사각형으로 표현하고 약한 개체와 강한 개체가 맺는 관계는 이중 마름모로 표현한다.
앞서 설명한 것처럼 E-R 다이어그램은 개체-관계 모델을 이용해 현실 세계를 개념적으로 모델링한 결과물을 도식화한 것이다.
개체-관계 모델은 현실 세계를 사람들의 머릿속에 그릴 수 있는 개념적인 구조로 모델링하는 데 사용하므로 어떤 DBMS로 데이터베이스를 구축하든 상관이 없다. 하지만 E-R 다이어그램으로 표현된 개념적인 구조를 데이터베이스에 표현하는 형태를 결정하는 논리적 데이터 모델링에서는 DBMS 종류가 중요하다.
선택한 DBMS에 따라 사용자 입장에서 E-R 다이어그램으로 표현된 개념적 구조를 데이터베이스에 저장할 형태로 표현한 논리적 구조를 논리적 데이터 모델이라 한다. 쉽게 말해 논리적 데이터 모델은 논리적 데이터 모델링의 결과물이고, 사용자가 생각하는 데이터베이스의 모습 또는 구조이다. 그리고 논리적 데이터 모델로 표현된 데이터베이스의 논리적 구조가 바로 데이터베이스 스키마이다.
일반적으로 많이 사용되는 논리적 데이터 모델은 관계 데이터 모델로, 데이터베이스의 논리적 구조가 2차원 테이블 형태이다. 관계 데이터 모델은 5장에서 자세히 다루어진다.
계층 데이터 모델(hierarchical data model)은 데이터베이스의 논리적인 구조가 트리(tree) 형태다. 개체는 사각형으로 나타내고 관계는 링크로 나타내는데, 링크는 일대다 관계만 표현할 수 있다. 그리고 두 개체 사이에 관계는 하나만 정의 가능하다.
일대다 관계를 맺는 개체들 사이에는 상하 관계가 성립한다. 상위에 있는 개체를 부모 개체, 하위에 있는 개체를 자식 개체라 하고, 이들 사이의 일대다 관계를 부모-자식 관계라 한다. 모든 자식 개체는 부모 개체를 하나만 가질 수 있다는 제약 사항이 존재한다.
계층 데이터 모델은 개체 사이의 관계를 정의할 때 여러 제약이 존재하기 때문에 개념적 구조를 논리적 구조로 사연스럽게 모델링하기 어려워 구조가 복잡해질 수 있다. 그리고 데이터 관련 연산이 쉽지 않다는 단점이 있다.
네트워크 데이터 모델(network data model)은 데이터베이스의 논리적 구조가 그래프(graph) 또는 네트워크(network)형태다. 개체는 사각형으로 표현하고 관계는 화살표로 나타내는데, 화살표는 일대다 관계만 표현할 수 있다. 그래서 네트워크 데이터 모델은 두 개체 간의 관계를 여러 개 정의할 수 있어 관계를 이름으로 구별한다.
네트워크 데이터모델에서도 일대다 관계만 직접 표현할 수 있으므로 두 개체 사이의 일대다 관계들을 이용해 다대다 관계를 표현한다. 네트워크 데이터 모델에서는 일대다 관계의 대체들을 각각 오너(owner)와 멤버(member)라 부르고, 이들 사이의 관계를 오너-멤버 관계(owner-membership relationship)라 부른다.
네트워크 데이터 모델은 같은 개체들 사이의 관계를 두 개 이상 표현할 수 있어 계층 데이터 모델보다 개념적 구조를 논리적 구조로 좀 더 자연스럽게 모델링 할 수 있다. 그러나 계층 데이터 모델보다 구조가 훨씬 복잡해 질 수 있어, 데이터 처리 연산이 계층 데이터 모델보다 더 어려워지는 문제가 발생한다.
논리적 데이터 모델로 객체의 개념을 도입한 객체지향 데이터 모델(object-oriented data model), 그리고 객체 지향 데이터 모델과 관계 데이터 모델의 특성을 모두 수용하는 객체관계 데이터 모델(object-relational data model)이 사용되기도 한다. 하지만 누구나 쉽게 이해할 수 있는 데이터 구조와 데이터 연산을 제공하는 관계 데이터 모델이 꾸준히 인기가 높다.