[데이터베이스] ER 스키마를 관계 모델의 Relation으로 사상

2022. 6. 13. 09:21CS/데이터베이스

  • 논리적 설계 단계에서는 ER 스키마를 관계 데이터 모델의 relation들로 사상함
  • ER 스키마에는 엔티티 타입과 관계 타입이 존재하지만, 관계 데이터베이스에는 엔티티 타입과 관계 타입을 구분하지 않고, relation들만 있음
  • 릴레이션으로 사상할 대상이 ER 스키마에서 엔티티 타입인지 또는 관계 타입인지, 엔티티 타입이라면 정규 엔티티 타입인지 약한 엔티티 타입인지, 관계 타입이라면 2진 관계 타입인지 3진 이상의 관계 타입인지, 애트리뷰트가 단일 값 애트리뷰트인지 또는 다치 애트리뷰트인지 등에 따라 사상하는 방법이 달라진다.
  • ER 모델을 relation으로 사상하는 7개의 단계로 이루어진 알고리즘

용환승 교수님 데이터베이스 강의 출처

 

7개의 단계

사상할 대상 알고리즘의 단계
엔티티 타입과 단일 값 애트리뷰트 단계 1: 정규 엔티티 타입
단계 2: 약한 엔티티 타입
2진 관계 타입 단계 3: 2진 1:1 관계 타입
단계 4: 정규 2진 1:N 관계 타입
단계 5: 2진 M:N 관계 타입
3진 이상의 관계 타입 단계 6: 3진 관계 타입
다치 애트리뷰트 단계 7: 다치 애트리뷰트

 

1. 정규 엔티티 타입과 단일 값 애트리뷰트

  • ER 스키마의 각 정규 엔티티 타입 E에 대해 하나의 릴레이션 R을 생성함
  • E에 있던 단순 애트리뷰트들을 릴레이션 R에 모두 포함시킴
  • E에서 복합 애트리뷰트는 그 복합 애트리뷰트를 구성하는 단순 애트리뷰트들만 릴레이션 R에 포함시킴 (리프 애트리뷰트만!!!)
  • E의 기본 키가 릴레이션 R의 기본 키가 된다.

정규 엔티티 타입을 릴레이션으로 사상

 

2. 약한 엔티티 타입과 단일 값 애트리뷰트

  • ER 스키마에서 소유 엔티티 타입 E를 갖는 각 약한 엔티티 타입 W에 대하여 릴레이션 R을 생성함
  • W에 있던 모든 단순 애트리뷰트들을 R에 포함시킴
  • 소유 엔티티 타입에 해당하는 릴레이션의 기본 키를 약한 엔티티 타입에 해당하는 릴레이션에 외래 키로 포함시킴 (자신을 소유한 엔티티 타입의 기본 키를 참조 키로 가지고 있음)
  • 약한 엔티티 타입에 해당하는 릴레이션 R의 기본 키는 약한 엔티티 타입의 부분 키와 소유 엔티티 타입에 해당하는 릴레이션을 참조하는 외래키의 조합으로 이루어짐

약한 엔티티 타입을 릴레이션으로 사상

 

3. 2진 1:1 관계 타입

  • ER 스키마의 각 2진 1:1 관계 타입 R에 대하여, R에 참여하는 엔티티 타입에 대응되는 릴레이션 S와 T를 찾음
  • S와 T 중에서 한 릴레이션을 선택하여, 만약 S를 선택했다면 T의 기본 키를 S에 외래 키로 포함시킴
  • S와 T 중에서 관계 타입에 완전하게 참여하는 릴레이션을 S의 역할을 하는 릴레이션으로 선택
  • 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트(복합 애트리뷰트를 갖고 있는 경우에는 복합 애트리뷰트를 구성하는 단순 애트리뷰트) 들을 S에 대응되는 릴레이션에 포함시킴
  • 두 엔티티 타입이 관계 타입 R에 완전하게 참여할 때는 두 엔티티 타입과 관계 타입을 하나의 릴레이션으로 합치는 방법도 가능하다.

2진 1:1 관계 타입을 릴레이션으로 사상

- join은 성능을 많이 잡아먹는 연산이므로, 릴레이션을 최소화하는 방향으로 짜야한다. -> 방법 3은 잘 사용하지 않음.

- 방법 4는 릴레이션 E1과 E2는 각각 독립적인 의미를 갖는 엔티티인데, 이를 묶어놓으면 혼선이 올 수 있다. BUT, 퍼포먼스 면으로는 성능이 좋음.

 

 

4. 정규 2진 1:N 관계 타입

  • 정규 2진 1:N 관계 타입 R에 대하여 N측의 참여 엔티티 타입에 대응되는 릴레이션 S를 찾음
  • 관계 타입 R에 참여하는 1측의 엔티티 타입에 대응되는 릴레이션 T의 기본 키를 릴레이션 S에 외래 키로 포함시킴
  • N측의 릴레이션 S의 기본 키를 1측의 릴레이션 T에 외래 키로 포함시키면 애트리뷰트에 값들의 집합이 들어가거나 정보의 중복이 많이 발생함. (정보의 중복 -> 같은 tuple을 여러 개 생성해야 한다는 뜻)
  • 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트(복합 애트리뷰트를 갖고 있는 경우에는 복합 애트리뷰트를 구성하는 단순 애트리뷰트) 들을 S에 해당하는 릴레이션에 포함시킴

 

정규 2진 1:N 관계 타입을 릴레이션으로 사상

 

5. 2진 M:N 관계 타입

  • 2진 M:N 관계 타입 R에 대해서는 릴레이션 R을 생성함
  • 참여 엔티티 타입에 해당하는 릴레이션들의 기본 키를 릴레이션 R에 외래 키로 포함시키고, 이들의 조합이 릴레이션 R의 기본 키가 됨
  • 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트(복합 애트리뷰트를 갖고 있는 경우에는 복합 애트리뷰트를 구성하는 단순 애트리뷰트) 들을 릴레이션 R에 포함시킴

 

2진 M:N 관계 타입을 릴레이션으로 사상

 

6. 3진 이상의 관계 타입

  • 3진 이상의 각 관계 타입 R에 대하여 릴레이션 R을 사상함
  • 관계 타입 R에 참여하는 모든 엔티티 타입에 대응되는 릴레이션들의 기본 키를 릴레이션 R에 외래키로 포함시킴
  • 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트(복합 애트리뷰트를 갖고 있는 경우에는 복합 애트리뷰트를 구성하는 단순 애트리뷰트)들을 릴레이션 R에 포함시킴
  • 일반적으로 외래 키들의 조합이 릴레이션 R의 기본 키가 됨
  • 관계 타입 R에 참여하는 엔티티 타입들의 카디날리티가 1:N:N이면 카디날리티가 1인 릴레이션의 기본 키를 참조하는 외래 키를 제외한 나머지 외래 키들의 조합이 릴레이션 R의 기본 키가 됨

3진 이상의 관계 타입을 릴레이션으로 사상

 

7. 다치 애트리뷰트

  • 각 다치 애트리뷰트에 대하여 릴레이션 R을 사상함
  • 다치 애트리뷰트에 해당하는 애트리뷰트를 릴레이션 R에 포함시키고, 다치 애트리뷰트를 애트리뷰트로 갖는 엔티티 타입이나 관계 타입에 해당하는 릴레이션의 기본 키를 릴레이션 R의 외래 키로 포함시킴
  • 릴레이션의 R의 기본 키는 다치 애트리뷰트와 외래 키의 조합

다치 애트리뷰트를 릴레이션으로 사상

 

* 도식화해서 대응되는 요소들을 표현하자면,

ER 개념과 데이터베이스 개념들의 대응 관계