관계 데이터 모델링 실습
사용할 개념적 데이터
설계 3단계: 논리적 설계
- 목적
- DBMS에 적합한 논리적 스키마 설계
- 개념적 스키마를 논리적 데이터 모델을 이용해 논리적 구조로 표현
- 일반적으로 관계 데이터 모델을 이용
- 결과물
- 논리적 스키마: 릴레이션 스키마
- 주요 작업
- 개념적 설계 단계의 결과물인 E-R다이어그램을 릴레이션 스키마로 변환
- 릴레이션 스키마 변환 후 속성의 데이터 타입, 길이, 널 값 허용 여부, 기본 값, 제약조건 등을 세부적으로 결정하고 결과를 문서화시킨다.
- E-R 다이어그램을 릴레이션 스키마로 변환하는 규칙
- 모든 개체는 릴레이션으로 변환한다.
- 다대다(N:M)관계는 릴레이션으로 변환한다.
- 일대다(1:N)관계는 외래키로 표현한다.
- 일대일(1:1)관계는 외래키로 표현한다.
- 다중 값 속성은 릴레이션으로 변환한다.
모든 개체는 릴레이션으로 변환한다
E-R 다이어그램의 각 개체를 하나의 릴레이션으로 변환
- 개체의 이름 -> 릴레이션 이름
- 개체의 속성 -> 릴레이션의 속성
- 개체의 키 속성 -> 릴레이션의 기본키
- 개체의 속성이 복합 속성인 경우에는 복합 속성을 구성하고 있는 단순 속성만 릴레이션의 속성으로 변환
- 한빛 마트 실습)
다대다 관계는 릴레이션으로 변환한다
E-R 다이어그램의 다대다 관계를 하나의 릴레이션으로 변환
- 관계의 이름 -> 릴레이션 이름
- 관계의 속성 -> 릴레이션의 속성
- 관계에 참여하는 개체를 규칙1에 따라 릴레이션으로 변환한 후 이 릴레이션의 기본키를 관계 릴레이션에 포함시켜 외래키로 지정하고 외래키들을 조합하여 관계 릴레이션의 기본키로 지정
별도의 기본키를 만들어 사용하는 방법도 있다. - 한빛 마트 실습)
일대다 관계는 외래키로 표현한다
E-R 다이어그램의 일대다 관계는 외래키로만 표현
- 일반적인 일대다 관계는 외래키로 표현한다.
- 일다대 관계에서 1측 개체의 릴레이션의 기본키를 n측 개체 릴레이션에 포함시켜 외래키로 지정한다.
반대로 하게된면 유일성을 만족할 수 없게 된다. - 관계의 속성들도 n측 개체 릴레이션에 포함시킨다.
- 일다대 관계에서 1측 개체의 릴레이션의 기본키를 n측 개체 릴레이션에 포함시켜 외래키로 지정한다.
- 약한 개체가 참여하는 일대다 관계는 외래키를 포함해서 기본키로 지정한다.
- 일대다 관계에서 1측 개체 릴레이션의 기본키를 n측 개체 릴레이션에 포함시켜 외래키로 지정한다.
- 관계의 속성들도 n측 개체 릴레이션에 포함시킨다.
- n측 개체 릴레이션은 외래키를 포함하여 기본키를 지정한다.
- 약한 개체는 오너 개체에 따라 존재 여부가 결정되므로 오너 개체의 기본키를 이용해 식별해야 한다.
- 약한 개체는 오너 개체에 따라 존재 여부가 결정되므로 오너 개체의 기본키를 이용해 식별해야 한다.
- 한빛 마트 실습)
일대일 관계는 외래키로 표현한다
E-R 다이어그램의 일대일 관계는 외래키로만 표현한다.
- 일반적인 일대일 관계는 외래키를 서로 주고 받는다.
- 관계에 참여하는 개체 릴레이션들이 서로의 기본키를 주고 받아 외래키로 지정
- 관계의 속성들도 모든 개체 릴레이션에 포함시킨다.
- 불필요한 데이터 중복이 발생할 수 있다.
- 일대일 관계에 필수적으로 참여하는 개체의 릴레이션만 외래키를 받는다.
- 관계에 필수적으로 참여하는 개체 릴레이션에만 외래키를 포함시킨다.
반대의 경우에 관계에 참여하지 않는 개체에 널값이 들어가기 떄문이다. - 관계의 속성들은 관계에 필수적으로 참여하는 개체 릴레이션에 포함시킨다.
- 관계에 필수적으로 참여하는 개체 릴레이션에만 외래키를 포함시킨다.
- 모든 개체가 일대일 관계에 필수적으로 참여하면 릴레이션을 하나로 합친다.
- 관계에 참여하는 개체 릴레이션들을 하나의 릴레이션으로 합쳐서 표현
- 관계의 이름을 릴레이션 이름으로 사용하고 관계에 참여하는 두 개체의 속성들을 관계 릴레이션에 모두 포함시킨다.
- 두 개체 릴레이션의 키 속성을 조합하여 관계 릴레이션의 기본키로 지정
다중 값 속성은 릴레이션으로 변환한다
E-R 다이어그램의 다중 값 속성은 독립적인 릴레이션으로 변환
- 다중 값 속성과 함께 그 속성을 가지고 있던 개체 릴레이션의 기본키를 외래키로 가져와 새로운 릴레이션에 포함시킨다.
- 새로운 릴레이션의 기본키는 다중 값 속성과 외래키를 조합하여 지정한다.
사원번호 | 사원명 | 직위 | 부하직원 |
---|---|---|---|
e01 | 철수 | 과장 | (영희, 민수) |
속성에 다중 값을 저장할 수 없는 릴레이션 특성을 위반한다.
사원번호 | 사원명 | 직위 | 부하직원 |
---|---|---|---|
e01 | 철수 | 과장 | 영희 |
e01 | 철수 | 과장 | 민수 |
릴레이션 특성을 위반하진 않지만 중복 저장되는 문제가 발생한다.
사원 릴레이션 | ||
---|---|---|
사원번호 | 사원명 | 직위 |
e01 | 철수 | 과장 |
사원-부하직원 릴레이션 | |
---|---|
사원번호 | 부하직원 |
e01 | 영희 |
e01 | 민수 |
기타 고려 사항
-
모든 관계를 독립적인 릴레이션으로 변환할 수 있다
속성이 많은 관계는 유형에 상관없이 릴레이션으로의 변환을 고려할 수 있다.
-
개체가 자기 자신과 관계를 맺는 순환 관계도 기본 규칙을 그대로 적용
한명의 상사가 여러명의 부하를 가지는 형태다. 일대다에서 n측에 외래키를 두므로 사원 릴레이션에 상사번호 외래키를 준다.
Leave a comment