ER스키마를 관계 모델의 릴레이션으로 사상
- 논리적 설계 단계에서 ER스키마를 관계 데이터 모델의 릴레이션으로 사상한다.
- ER스키마에는 엔티티 타입과 관계 타입이 존재하지만 관계 데이터 베이스에는 엔티티 타입과 관계 타입을 구분하지 않고 릴레이션들만 있다.
- 애트리뷰트의 유형, 타입의 유형, 엔티티의 타입에 따라 사상하는 방법이 달라진다.
- 참여제약조건을 릴레이션에 표현하기 위해서는 제약 조건에 서술한다.
ER-관계 사상 알고리즘
단계 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의 외래 키로 포함시킨다.
- S와 T중에서 완전 참여하는 릴레이션을 S로 선택한다.
- 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트들을 S에 대응되는 릴레이션에 포함시킨다.
- 두 엔티티 타입이 관계 타입에 완전 참여할 때는 두 엔티티 타입과 관계 타입을 하나의 릴레이션으로 합치는 것도 가능하다.
- 방법 1과 2 중 NULL 값이 최소화되는 방식대로 선택한다.
단계 4 : 정규 2진 1:N 관계 타입
- 정규 2진 1:N 관계 타입 R에 대하여 N측의 참여 엔티티 타입에 대응되는 릴레이션 S를 찾음
- 1측에 해당하는 릴레이션의 기본 키를 S의 외래 키로 포함시킨다.
- N측의 릴레이션 S의 기본 키를 1측의 외래 키로 포함시키면 값들의 집합이 들어가거나 정보의 중복이 많이 발생한다.
- 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트들을 N측의 릴레이션에 포함시킨다.
단계 5 : 2진 M:N 관계 타입
- 2진 M:N 관계 타입 R에 대해서 릴레이션 R을 생성한다.
- 참여 엔티티 타입에 해당하는 릴레이션들의 기본 키를 릴레이션 R에 외래 키로 포함시키고 이들의 조합이 릴레이션 R의 기본 키가 된다.
- 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트들을 릴레이션 R에 포함시킨다.
단계 6 : 3진 이상의 관계 타입
- 각 관계 타입 R에 대하여 릴레이션 R을 생성한다.
- 관계 타입 R에 참여하는 모든 엔티티 타입에 대응되는 릴레이션들의 기본 키를 릴레이션 R에 외래 키로 포함시킨다.
- 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트들을 릴레이션 R에 포함시킨다.
- 일반적으로 외래 키들의 조합이 릴레이션 R의 기본 키가 된다.
- 관계 타입 R에 참여하는 엔티티 타입들의 카디널리티가 1:N:N이면 카디널리티가 1인 릴레이션의 기본 키를 참조하는 외래 키를 제외한 나머지 외래 키들의 조합이 기본 키
- 다른 2개의 외래 키의 조합에 따라 정해지기 때문에 포함시키지 않아도 된다.
단계 7 : 다치 애트리뷰트
- 각 다치 애트리뷰트에 대하여 릴레이션 R을 생성한다.
- 다치 애트리뷰트에 해당하는 애트리뷰트를 릴레이션 R에 포함시키고, 다치 애트리뷰트를 애트리뷰트로 갖는 엔티티 타입이나 관계 타입에 해당하는 릴레이션의 기본 키를 릴레이션 R에 외래 키로 포함시킨다.
- 릴레이션 R의 기본 키는 다치 애트리뷰트와 외래 키의 조합
예시
EMPLOYEE(Empno, Empname, Title, City, Ku, Dong, Dno[FK])
PROJECT(Projno, Projname, Budget, StartDate, Manager[FK])
DEPARTMENT(Deptno, Deptname, Floor)
SUPPLIER(Suppno, Suppname, Credit)
PART(Partno, Partname, Price, Subpartno[FK])
DEPENDENT(Empno, Depname, Sex)
WORKS_FOR(Empno, Projno, Duration, Responsibility)
SUPPLY(Suppno, Projno, Partno, Quantity)
PROJ_LOC(Projno, Location)