본문 바로가기

CS/데이터베이스

[데이터베이스] ER Model - Relational Database Design(Mapping)

 Mapping

 현재 사용되는 많은 DBMS들은 Relational Database Model 을 기반으로 하므로, Conceptual Design 영역인 ER Model에 의한 데이터베이스 디자인을 곧바로 DBMS에 적용할 수 없다. 따라서 ER Model 기반의 디자인을 Relational Database Model 에 대응되도록 매핑할 필요가 있다.

모든 정보를 보존

 ER 모델에 존재하는 모든 어트리뷰트들은 모두 의미를 지니고 있다. 따라서 Relational 모델에서도 해당 어트리뷰트들 각각을 누락하지 않고 모두 테이블에 대응시켜야 한다.

제약조건을 최대한 유지

 Relational 모델은 ER 모델에 비해 표현력이 약하다. 예를 들어 ER 모델에서는 max cardinality나 min-max notation을 통해 엔티티 사이의 관계를 정확한 수치에 기반하여 나타낼 수 있다. 그러나, Relational 모델에는 대응되는 기능이 존재하지 않는다. 이러한 이유로 ER 모델에서 구현된 전체 기능이 Relational 모델 기반의 테이블 하나에 전부 표현되지 않을 가능성이 존재한다. 

 이러한 이유로 모든 제약조건을 Relational 모델에서 유지할 수는 없으나, ER 모델의 의미를 최대한 살리기 위해 제약조건들을 가능한 한 많이 유지하는 것이 중요하다.

NULL 값을 최소화

 NULL 값들은 다른 value들과 동일하게 어트리뷰트에 대응되는 자리를 차지한다. 그러나, 일반적인 값들과는 달리 "없음"을 나타내는 표기일 뿐이므로 실질적인 유용한 정보를 가지고 있다고는 보기 어렵다. 따라서 Relational 모델을 구성하는 단계에서도 이러한 NULL 값들을 최소화하는 방향으로 관리해야 한다.


ER-to-Relational Mapping Algorithm

  1. Mapping of Regular Entity Types
  2. Mapping of Weak Entity Types
  3. Mapping of Binary 1:1 Relationship Types
  4. Mapping of Binary 1:N Relationship Types.
  5. Mapping of Binary M:N Relationship Types.
  6. Mapping of Multivalued attributes.
  7. Mapping of N-ary Relationship Types.

[1] Regular Entity Type 에 대한 매핑

 Regular Entity는 다른 엔티티에 의존하지 않고도 스스로를 식별할 수 있는 엔티티를 말한다. 구체적으로는 다른 엔티티의 Key 를 참조하지 않고도 자신을 식별할 수 있는 경우를 의미한다.

  1.  ER 스키마 상의 Regular Entity Type E 에 대응되는 Relation R을 만든다. R에는 E의 모든 simple attribute가 포함된다. 즉, ER 모델의 일반적인 엔티티는 simple attribute에 한하여 relation으로 그대로 옮길 수 있다. Composite Attribute 인 경우 분해해서 simple attribute으로 생성한다.
  2. E 의 Key attribute 중 하나를 Primary Key로 선택하여 지정한다. 차후 해당 키를 기반으로 튜플들이 구분된다.
  3. Primary Key로 선택된 attribute가 composite 이면, 각각을 simple attribute로 나눠서 relation에 저장한 후, 해당 값들을 묶어서 Primary Key로 지정한다.

[2] Weak Entity Type 에 대한 매핑

 Weak Entity는 스스로 가지고 있는 attribute만으로는 식별되지 않는 엔티티를 의미한다. 구체적으로는 키 자체는 있으나 다른 엔티티와의 관계 없이는 스스로를 식별하는 것이 의미 없는 경우와 키 자체도 외부 엔티티에게 의존하는 경우가 존재한다.

  1. Weak Entity를 W, Owner(strong) Entity을 E라고 할 때 W의 simple attribute 들을 relation R에 대응시킨다. Composite attribute은 분해해서 simple attribute 형태로 대응시킨다.
  2. Owner Entity E의 Primary Key 에 대응되는 Foreign Key를 R의 attribute로 추가한다.
  3. 필요한 경우 W의 partial key와 E의 primary key의 조합으로 R의 Primary key를 만든다.

[3] Binary 1 : 1 Relation 매핑

 ER Schema 상의 1 : 1 relationship인 R에 대해 관계에 참여하는 엔티티 S와 T를 식별한다. Relational Model로의 매핑 방법에는 크게 3가지가 존재한다.

A. Foreign Key Approach ( 2 relations )

 두 관계 T와 S가 있을 때, T의 Primary Key을 S의 Foreign Key로 지정하여 저장한다. S는 통상적으로 Total Participation이 발생하는 쪽으로 설정하는데, 이 경우 필요없는 NULL을 줄일 수 있다는 장점이 있다.

B. Merged relation option ( 1 relation )

 두 엔티티 T와 S의 어트리뷰트들을 붙여서 관계 R을 생성한다. 양측이 모두 total participation인 경우 유용하다. 결합 조건을 기준으로 두 엔티티를 묶은 후 어트리뷰트들을 나열하기만 하면 된다.

C. Cross-reference or relationship relation option ( 3 relations )

 두 엔티티 T와 S는 그대로 두고, T와 S 사이의 relation을 나타내는 R을 따로 생성한다. R은 T와 S의 primary key를 이용하여 두 엔티티 사이의 관계를 연결한다.

[4] Binary 1 : N Relation 매핑

 [3]-A 방법과 유사하다. 추가적으로 T와 S 사이의 관계 R 에서 나타나는 attribute들을 N side에 둔다.

  1. Entity Type T 가 1 측이고, S가 N 측이라고 하면, T의 Primary Key을 S의 Foreign Key로 둔다.
  2. 1 : N 관계 자체가 가지는 attribute 들은 S 쪽에 둔다.

 R을 분리하여 relation으로 만들기도 하는데 (cross-reference), 꼭 필요한 상황이 아니기도 하고 상대적으로 Join 등에 의한 성능 저하 및 추가 테이블에 의한 성능 저하가 있으므로 그렇게까지 하지는 않는다.

[5] Binary M : N Relation 매핑

 Entity Type T와 S가 M : N 관계 R에 참여하는 경우, R을 새로운 relation으로 분리하여 생성한다. 이후 T와 S에 대해 cross reference을 적용한다. 즉, T와 S의 Primary key 을 foreign key로 두고 관계를 식별한다. ( [3]-C 참고 )

 관계 R에 대한 relation R' 은 R의 어트리뷰트들을 simple attribute 형태로 저장한다.

[6] Multi-Valued Attributes 매핑

엔티티 T에 대한 attribute A가 Multi-Valued attribute 라면, 해당 관계를 새로운 relation R로 독립시킨다. R은 A가 가진 simple attribute들과 T의 Primary Key에 대응되는 속성을 가져, 해당 속성을 통해 자신을 식별할 수 있게 된다. Primary Key은 T의 Primary Key 및 R의 어트리뷰트 조합으로 구성된다.

[7] N-ary Relationship Type 매핑

 Relationship Model 에서는 참여하는 엔티티가 2개를 초과하는 relationship을 표현할 수 없다. 따라서 ER Model 에서의 다중 엔티티 참여 관계는 여러개의 Binary Relationship으로 변경해야 한다.

  • 엔티티들이 참여하는 관계 R에 대해 엔티티와 R 사이의 관계를 전부 Weak Entity 형태로 나타내어 여러개의 Binary Relationship으로 변환한 후 처리한다. 이때 R 역시 하나의 엔티티가 된다. 
  • 서로게이트 키를 부여하여 처리한다.  https://en.wikipedia.org/wiki/Surrogate_key

ternary entity relationship을 weak entity을 통해 3개의 binary entity로 변경한 모습