데이터 모델링
"데이터 모델링"은 현실 세계의 데이터를 컴퓨터의 데이터베이스로 옮기는 변환 과정이다. 현실 세계의 데이터는 매우 방대하기에 필요한 데이터만 선별하여 데이터베이스로 옮겨야 한다. 이때 진행하는 것이 "추상화" 작업이다. 추상화 과정을 통해 찾은 데이터를 데이터베이스에 저장할 때, 데이터베이스에 저장하는 구조를 고려해야 한다.
먼저, 현실 세계의 중요 데이터를 개념 세계로 옮겨야 하는데 이것은 "개념적 모델링"이다. 그 후, 개념 세계의 데이터를 데이터베이스에 저장할 구조를 결정하고 결정한 구조로 표현하는 것을 "논리적 모델링"이라고 한다. 이 두 과정을 통틀어 "데이터베이스 설계"라고 한다. 즉, 이 두 과정을 통해 데이터 모델링이 이루어지는 것이다.
데이터 모델링은 매우 복잡하기에 데이터 모델링의 결과를 표현하는 도구인 "데이터 모델"을 활용하여 데이터 모델링을 쉽게 진행할 수 있다. 데이터 모델에는 "개념적 데이터 모델"과 "논리적 데이터 모델"이 있다.
- 개념적 데이터 모델: 사람이 이해할 수 있도록 현실 세계를 "개념적 모델링"하여 데이터베이스의 개념적 구조로 표현한다.
- 논리적 데이터 모델: 개념적 구조를 "논리적 모델링"하여 데이터베이스의 논리적 구조로 표현한다.
데이터 모델은 "데이터 구조", "연산", "제약조건"으로 구성된다.
- 데이터 구조(Data Structure)
- 개념적 데이터 모델에서의 데이터 구조: 현실 세계를 개념 세계로 추상화했을 때 어떤 요소로 이루어져 있는지 표현하는 개념적 구조
- 논리적 데이터 모델에서의 데이터 구조: 데이터를 어떤 모습으로 저장할 것인지를 표현하는 논리적 구조
- 연산(Operation): 데이터 구조에 따라 개념 세계나 컴퓨터 세계에서 실제로 표현된 값들을 처리하는 작업
- 제약조건(Constraint): 구조적 측면의 제약 사항과 연산을 적용하는 경우 허용할 수 있는 의미적 측면의 제약 사항
개체-관계 모델 (E-R Model)
데이터 모델에는 여러가지가 존재하는데, 사용하는 데이터 모델에 따라 개념적 구조와 논리적 구조의 모습이 달라진다. 개념적 데이터 모델 중 많이 사용되는 것은 "개체-관계 모델"이다.
개체-관계 모델은 개체와 개체 간의 관계를 이용해 현실 세계를 개념적 구조로 표현하는 방법으로, 이를 이해하기 위해서는 "개체", "속성", "관계"를 먼저 알아야 한다.
개체 (Entity)
개체(Entity)란 현실 세계에서 조직을 운영하는데 꼭 필요한 사람이나 사물과 같이 구별되는 모든 것으로, 개념적 모델링을 할 때 가장 중요한 요소이다. 저장할 만한 가치가 있는 중요 데이터를 가진 것으로 물리적으로 존재하는 것과 개념적으로 존재하는 것들이 개체가 될 수 있다. 개체의 중요한 개념들은 다음과 같다.
- 개체 타입(Entity Type): 개체를 고유한 이름과 속성들로 정의한 것
- 개체 인스턴스(Entity Instance): 개체를 구성하고 있는 속성이 실제 값을 가짐으로 실제화된 개체
- 개체 집합(Entity Set): 특정 개체 타입에 대한 개체 인스턴스들을 모아 놓은 것
개체와 속성은 파일 구조에서 "레코드"와 "필드" 용어에 대응된다. 개체 타입은 레코드 타입에 대응되고, 개체 인스턴스는 레코드 인스턴스에 대응된다.
속성 (Attribute)
속성(Attribute)은 개체가 가진 고유한 특성으로, 속성은 그 자체만으로는 의미가 없지만 연관된 속성들을 모아 개체를 구성하면 하나의 중요한 의미를 표현할 수 있다. 속성은 일반적으로 의미 있는 데이터의 가장 작은 논리적 단위로 인식된다. 속성은 다양한 기준으로 분류할 수 있다.
- 속성 값의 개수
- 단일 값 속성: 특정 개체를 구성하는 속성 값이 하나이다.
- 다중 값 속성: 특정 개체를 구성하는 속성 값이 여러 개이다.
- 의미의 분해 가능성
- 단순 속성: 의미를 더이상 분해할 수 없는 속성이다.
- 복합 속성: 의미를 분해할 수 잇기에 값이 여러 개의 의미를 포함하는 속성이다.
- 유도 속성: 값이 별도로 저장되는 것이 아니라 기존의 다른 속성 값에서 유도되어 결정되는 속성
- 널 속성: 널(NULL) 값은 아직 결정되지 않거나 모르는 값을 의미한다. 널 속성이란 널 값이 허용되는 속성이다.
- 키 속성: 모든 개체 인스턴스의 키 속성 값이 다르기에 개체 집합에 존재하는 각 개체 인스턴스들을 식별하는데 사용된다.
관계 (Relationship)
관계(Relationship)는 개체와 개체가 맺고 있는 의미 있는 연관성이며, 관계는 개체 집합들 사이의 대응 관계(매핑)을 의미한다. 관계를 여러 개체 사이에서 정의되는 "관계 타입"과 특정 객체 인스턴스들 간에 맺어진 실제 관계인 "관계 인스턴스"로 구분하여 표현한다. 관계 또한 속성을 가질 수 있고, 관계를 맺음으로 발생하는 중요한 데이터들이 관계의 속성이 된다. 그리고 관계 또한 다양한 기준에 따라 분류할 수 있다.
- 관계에 참여하는 개체 타입의 수
- 이항 관계: 개체 타입 2개가 맺는 관계
- 삼항 관계: 개체 타입 3개가 맺는 관계
- 순환 관계: 개체 타입 1개가 자신과 맺는 관계
- 매핑 카디널리티(두 개체 집합에서, 각 개체 인스턴스가 연관성을 맺는 상대 개체 집합의 인스턴스 개수)
- 일대일 관계(1:1): 개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 하나와 관계를 맺거나, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 하나와 관계를 맺는 경우
- 일대다 관계(1:n): 개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 여러 개와 관계를 맺지만, 개체 B의 각 개체 인스턴스는 개체 A의 개체 인스턴스 하나와 관계를 맺는 경우
- 다대다 관계(n:m): 개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 여러 개와 관계를 맺고, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 여러 개와 관계를 맺는 경우
- 관계의 참여 특성
- 필수적 참여(전체 참여): 개체 A의 모든 개체 인스턴스가 관계에 반드시 참여하는 경우
- 선택적 참여(부분 참여): 개체 A의 모든 개체 인스턴스 중 일부만 관계에 참여하는 경우
- 관계의 종속성
- 존재 종속: 개체 B가 독자적으로 존재할 수 없고, 다른 개체 A의 존재 여부에 의존적인 경우, B는 A에 종속되었다.
- 강한 개체(오너 개체): 다른 개체의 존재 여부를 결정하는 개체 (A)
- 약한 개체(종속 개체): 다른 개체의 존재 여부에 의존적인 개체 (B)
E-R 다이어그램 (Entity-Relationship Diagram)
E-R 다이어그램이란 개체-관계 모델을 이용하여 현실 세계를 개념적으로 모델링한 결과물을 그림으로 표현한 것이다. 시각적으로 표현하여 훨씬 더 이해하기 쉽기에 E-R 다이어그램을 많이 선호한다.
E-R 다이어그램은 개체를 표현하는 "사각형", 개체 간의 관계를 표현하는 "마름모", 개체나 관계의 속성을 표현하는 "타원", 각 요소를 연결하는 "링크(연결선)"으로 구성되고, "일대일(1:1)", "일대다(1:n)", "다대다(n:m)" 관계를 레이블로 표기한다.
다음은 E-R 다이어그램의 예시 그림이다.
논리적 데이터 모델
논리적 데이터 모델은 논리적 데이터 모델링의 결과물이며, 사용자가 생각하는 데이터베이스의 모습 또는 구조를 말한다. 이때, 논리적 데이터 모델로 표현된 데이터베이스의 논리적 구조를 데이터베이스 스키마라고 한다.
데이터베이스에 있는 데이터들 간의 관계를 표현하는 방법에 따라 다양한 논리적 데이터 모델이 존재한다. 주로 사용되는 논리적 데이터 모델은 관계 데이터 모델인데, 관계 데이터 모델이 고안되기 전에는 "계층 데이터 모델"과 "네트워크 데이터 모델"이 주로 사용되었다. 이 2가지 모델에 대해서 알아보도록 하겠다.
계층 데이터 모델
계층 데이터 모델은 데이터베이스의 논리적 구조가 트리 형태인 모델이다. 계층 데이터 모델은 두 개체 사이에 관계를 하나만 정의할 수 있다. 또한 일대다 관계만 표현할 수 있고 다대다 관계를 직접 표현할 수 없기에 별도의 개체를 추가로 생성하여 이를 표현할 수 있다.
계층 데이터 모델은 트리 구조로 이루어졌기에 루트 역할을 하는 개체가 있고, 사이클이 존재하지 않으며, 상하 관계가 성립한다. 부모 개체는 여러 개의 자식 개체를 가질 수 있으나, 자식 개체는 단 하나의 부모 개체만을 가질 수 있다.
개체 사이의 관계를 정의할 때 여러 제약이 존재하기에 개념적 구조를 논리적 구조로 자연스럽게 모델링하기 어렵다. 따라서 구조가 복잡해지고 데이터를 연산하거나 검색하는 것이 쉽지 않다.
네트워크 데이터 모델
네트워크 데이터 모델은 데이터베이스의 논리적 구조가 그래프 또는 네트워크 형태인 모델이다. 네트워크 데이터 모델에서도 일대다 관계만 직접 표현할 수 있기에 두 개체 사이의 일대다 관계들을 이용하여 다대다 관계를 표현한다.
네트워크 데이터 모델에서는 일대다 관계의 개체들을 각각 "오너"와 "멤버"라고 하며, 이들 간의 관계를 "오너-멤버 관계"라고 한다. 오너 개체 하나가 멤버 개체 여러 개와 관계를 맺을 수 있고, 멤버 개체도 오너 개체 여러 개와 관계를 맺을 수 있다. 계층 데이터 모델보다 개념적 구조를 좀 더 자연스럽게 논리적 구조로 모델링할 수 있지만, 계층 데이터 모델보다 더 구조가 복잡해질 수 있어 데이터 연산과 데이터 검색이 더 어려워질 수 있다.