DB 3. Relation normalization
데이터베이스 KOCW
Relation normalization
데이터의 중복
- 데이터의 중복 : 저장공간의 낭비
- update anomly 발생([사원,부서] relation을 예로 들어)
- insertion anomaly
- 불필요한 정보도 저장해야하는 문제
- 부서를 추가하고 싶은데 해당 부서에 속하는 사원이 없으면 삽입 불가능
- deletion anomaly
- 유용한 정보를 삭제하지 않고선 삭제 불가능한 경우 발생
- ex) 사원이 한명인 부서의 해당 사원이 퇴사하는 경우 부서정보가 날라감
- modification anomaly
- 수정을 하다가 문제가 생겨 일부만 수정하면 inconsistency 발생
해결
: Relation decomposition
RDB 설계 유의사항
- 이해하기 쉽고 명확한 스키마로 분해할 것(하나의 entity - 하나의 relation)
- NULL값 피하기
- 가짜 튜플이 생기지 않도록 분해(종속관계를 제대로 파악하기)
- 스키마를 지속적으로 정제
Functional dependency
- Full functional dependency : 전체 기본키를 조합해야 속성의 값을 특정할 수 있을때 그 관계를 Full FD
- Partial functional dependency : 기본키의 일부에 의해 속성을 표현할 수 있을때 그 관계를 Partial FD
- transitive functional dependency : 기본키가 아닌 속성들간의 종속성이 존재하는 것
- Partial/Transitive FD 를 없애는 방향으로 decomposition
- 하지만 Decomposition을 꼭 하는 것만이 좋은것은 아니다. decomposition을 하면 할수록 온전한 테이블을 얻기위해선 JOIN문을 많이 사용해야함. 그래서 Trade off 를 잘 고려해서 Denormalization도 적절히 수행하는 것이 중요
제 N정규형
- 제 1정규형 : 모든 속성의 값이 atomic value(<=>repeating group eg. 집합)을 갖는다.
- 제 2정규형 : 제 1정규형을 만족하면서 Partial FD를 제거한 형태
- 제 3정규형 : 제 2정규형을 만족하면서 Transitive FD를 제거한 형태
- BCNF : 제 3정규형을 만족하면서 후보키만이 Determinant인 형태