지금부터는 E-R model(개체-관계 모델)을 통해 데이터베이스 스키마를 설계하는 방법에 대해 살펴보도록 한다.
1. Modeling
데이터베이스는 개체(entity)들의 집합과 개체들 간의 관계(relationship)로 모델링할 수 있다. 개체는 다른 개체와 구별되는 하나의 개체이다. 예를 들어 사람이나 책처럼 구체적인 것과 수업, 비행기예약과 같은 추상적인 것이 개체가 될 수 있다.
2. 개체(entity)
개체는 속성(attrubute)을 가지고 있다. 속성은 각 개체 집합의 구성원들이 가지는 특징을 표현해준다. 어떤 개체의 속성들의 일부는 그 개체를 고유하게 식별할 수 있게 도와주기도 한다.
개체 집합은 같은 특성을 가지고 있는 같은 타입의 개체들의 집합이며, 개체 집합은 서로 중첩될 수도 있고 안 될 수도 있다.
예를 들어, person entity는 student entity가 될 수도 instructor entity가 될 수도 있다. 또한 양쪽에 모두 포함될 수도 있고 모두 포함되지 않을 수도 있는 것이다.
instructor entity 집합의 경우 instructor_ID, instructor_name 이라는 속성을 가지고 있고, student entity 집합의 경우 student_ID와 student_name 이라는 속성을 가지고 있다.
3. 관계(relation)
관계(relation)이란 여러 개체들 사이의 의미있는 연관성을 의미한다. 즉 개체들이 서로 어떻게 연관되어 있는지를 말한다. 예를 들어, 교수 A와 학생 B가 advisor라는 관계를 맺고 있다면, 교수 A가 학생 B의 지도교수라는 것을 의미한다. 수학적으로는 다른 집합에 속하는 서로 다른 두 원소의 순서쌍 집합을 relation이라고 설명할 수 있다.
관계 집합은 다음과 같이 개체 집합과 개체 집합 사이에 나타낼 수 있으며, 관계 집합 스스로 속성을 가질 수 있다. 맨 위의 관계를 보면 Crick 이라는 교수가 Tanaka라는 학생의 지도교수이며, 2008년 3월 3일부터 지도교수가 되었다는 의미이다.
4. 관계집합의 차수(Degree of a Relationship Set)
관계 집합에는 차수(degree)가 잇는데, 관계 집합의 관계에 참여하는 개체 집합의 수를 바로 관계 차수라고 한다. 앞에서 본 예제에서 advisor 관계는 이항 관계(binary relationship)이다. 대부분의 관계는 이항 관계지만, 삼항 관계(ternary relationship) 등의 형태도 존재한다. 예를 들어, 학생들이 교수님의 지도 하에서 어떤 연구 프로젝트를 진행한다고 하면 instructor, student, project 세 개체가 하나의 관계를 가진다고 설명할 수 있다.
5. 속성
개체집합은 속성의 집합으로 표현할 수 있다. 속성은 개체 집합의 모든 멤버가 가지고 있는 특징을 설명하는 것이다. 예를 들어 instructor라는 개체는 ID, name, Street, city, salary 속성을 가지고 있다.
도메인은 각 속성에 허용되는 값들의 집합이다. 앞에서 배웠던 relational data model에서의 도메인과 유사하다고 생각하면 된다.
여러 가지 속성
속성 | 설명 |
단순 속성(simple attribute) | 더 이상 나누어지지 않는 속성 |
복합 속성(composite attribute) | 더 작은 단위, 즉 더 작은 다른 속성으로 나누어질 수 있다. 예를 들어 name 이라는 속성이 first_name, middle_name, last_name 으로 나누어지는 경우이다. 즉 계층적인 구조를 가질 수 있다. |
single-valued attribute | 특정 개체에 대해서 하나의 값을 가지는 속성 |
multi-valued attribute | 여러 개의 값을 가질 수 있는 속성 |
유도 속성(derived attribute) | 특정 값으로 저장되지 않고, 다른 속성들을 통해 계산되어 나오는 속성. 예를 들어 나이는 생일을 이용해서 계산할 수 있기 때문에 dervied attribute이다. |
6. Mapping Cardinality Constraints
E-R 모델에서 제약조건에는 매핑 카디널리티 제약 조건(mapping cardinality constaints)과 참여 제약조건(participation constraints) 두 가지가 있다. 매핑 카디널리티 제약조건은 binary relation 집합을 기술하는데 유용하다. 그리고 binary relationship 집합에 대한 매핑 카디널리티는 다음 유형중 하나에 포함되어야 한다다.
- One to one: 하나의 개체와 하나의 개체가 관계가 있음
- Many to one: 다수의 개체와 하나의 개체가 관계가 있음. 이때 다른 개체 집합의 원소와 매핑이 안될 수도 있음
- One to many: 위와 같음
- Many to many: 다수의 개체와 다수의 개체가 관계가 있음. 마찬가지로 다른 개체집합의 원소와 매핑이 안될 수도 있음
그림으로 확인하면 다음과 같다.
7. Keys
어떤 개체 집합이 주어지면 개체 집합 안에 있는 개체들을 구별할 방법이 필요하게 되는데, Key가 바로 그것이다. 앞서 relation model에서도 Keys에 대해서 설명했다. super key, candidate key, primary key와 같은 구성 요소는 거의 비슷하다고 할 수 있다.
수퍼키(Super key)
super key란 어떤 개체 집합에서 그 값이 각 개체를 유일하게 결정하는 하나 이상의 속성 집합이다.
후보키(Candidate key)
minimal super key라고 할 수 있다.
기본키(Primary key)
여러 개의 후보키가 존재할 때 그 중 하나를 Primary key로 선택하게 된다.
8. Keys for Relationship Sets
앞의 설명은 개체 집합에서의 Key를 설명한 것인데, 관계 집합에서도 key가 존재한다(관계 집합에서도 속성이 존재했듯이). 간단하게 말하자면, 관계 집합의 수퍼키는 관계 집합에 참여하는 개체들의 기본키의 조합으로 구성된다.
예를 들어 student 개체 집합의 primary key는 s_id이고, instructor 개체 집합의 primary key는 i_id 이면, advisor 관계 집합에서 (s_id, i_id)는 수퍼키라고 할 수 있다. 단 minimal super key는 아니다!
이렇게 정해진 수퍼키에서 후보키(minimal super key)를 설정할 때는 매핑 카디널리티를 고려해야하는데, many to many relationship일 경우 advisor의 기본키는 양쪽 개체 집합의 기본키의 합집합이 될 수 있다. 이와 다르게 many to one이나 one to many의 관계라면 many 쪽에 있는 기본키를 관계 기본키로 정하게 된다. 마지막으로 one to one의 경우에는 어느 쪽 개체 집합의 기본키를 후보키로 사용하여도 모든 relationship을 구별할 수 있다.
하나 이상의 후보키가 존재하는 경우에는 기본키를 선택할 때 그 관계 집합의 의미를 고려한다. 예를 들어 instructor ,student 사이의 advisor 관계(one to one)에 대해서 기본키를 선택한다면, 교수가 학생의 지도교수가 된다는 의미로 instructor로 선택하는 것이 더 바람직하다.
9. 중복 속성(Redundant Attributes)
E-R 모델로 데이터베이스 설계를 할 때 먼저 포함해야 할 개체 집합을 결정하고 그 개체 집합에 적절한 속성들을 선택한다. 이렇게 개체 집합과 속성이 선택되면 그 다음에 다양한 개체들 사이에 관계 집합들을 형성한다. 그래서 관계 집합은 개체 집합의 속성과 똑같은 정보를 제공하기 때문에 중복적으로 제공되는 정보를 제거하기 위해 속성을 제거하는 일이 발생될 때도 있다. 이것을 설명하기 위해서는 예시를 드는 것이 좋아보인다.
예를 들어, instructor 개체 집합은 자신이 속해 있는 학과의 이름인 dept_name 속성을 가진다. 이때 관계를 하나 만드는데, 이 관계는 instructor-department 관계로, instructor과 department를 연결시킨다. 이 때 이 관계로부터 instructor의 dept_name 속성은 중복되는 속성이 되고, 이러한 중복을 없애기 위해서 dept_name 속성을 제거한다.
그러나 이후에 배울 내용 중 E-R 모델을 relational 모델로 매핑할 때 제거했던 속성을 다시 도입할 때가 있다.
'Database' 카테고리의 다른 글
MySQL과 모바일 웹으로 만나는 데이터베이스의 정석 (1) (0) | 2021.01.07 |
---|---|
[E-R Diagram, Weak Entity Set] SQL 중급 (edwith 데이터베이스 강의 - 부산대학교 김연정 교수님) (2) | 2021.01.07 |
[JDBC Programming] SQL 중급 (edwith 데이터베이스 강의 - 부산대학교 김연정 교수님) (0) | 2021.01.03 |
[응용프로그램 인터페이스 JDBC, ODBC] SQL 중급 (edwith 데이터베이스 강의 - 부산대학교 김연정 교수님) (0) | 2021.01.03 |
[Built-in Data Types in SQL] SQL 중급 (edwith 데이터베이스 강의 - 부산대학교 김연정 교수님) (0) | 2021.01.02 |