Skip to content
- 릴레이션 정규화
- 갱신 이상(update anomaly) 유발 <- 데이터 중복
- 정규화(normalization) : 함수적 종속성과 기본키를 기반으로 분석하여 릴레이션을 분해함으로써 중복과 세 가지 갱신 이상을 최소화
- 갱신 이상(update anomaly) -> 정규화를 해야 할 이유
- 수정 이상(modification anomaly)
- 반복된 데이터 중에서 일부만 수정하면 데이터의 불일치 발생
- 삽입 이상(insertion anomaly)
- 불필요한 정보를 함께 저장하지 않고는 어떤 정보의 저장 불가능
- 삭제 이상(deletion anomaly)
- 유용한 정보를 함께 삭제하지 않고는 어떤 정보의 삭제 불가능
- 정규화 사례 1
- 갱신 이상
- 정보의 중복
- 사원이름, 사원번호, 주소, 전화번호 등이 중복되어 저장됨
- 수정 이상
- 부서명을 바꿀때(예 기획->홍보) 김창섭, 이수민의 부서이름1이 모두 바뀌어야 함
- 삽입 이상
- 새로운 부서를 신설할때(홍보 신설) 사원이 없으면 등록이 불가능
- 이 릴레이션은 부서와 사원이 동시에 등록되어야만 하기 때문
- 삭제 이상
- 사원이 1명뿐인 부서의 사원을 삭제하면(영업 삭제) 영업부는 사라짐
- 릴레이션의 분해
- 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것
- 원리 릴레이션 <=> 분해된 릴레이션 : 상호 변환을 보장
- 함수적 종속성에 관한 지식을 기반으로 릴레이션 분해
- 사원 릴레이션을 분해한 결과 예
- 갱신 이상 문제 해결
- 정보의 중복 : 여전히 중복됨
- 수정 이상 : 부서이름을 변경해도 됨
- 삽입 이상 : 새로운 부서 추가 가능
- 삭제 이상 : 영업부인 김창섭을 삭제해도 영업부는 남아 있음
- 정규형(normal form)의 종류
- 제1정규형(first normal form)
- 제2정규형(second normal form)
- 제3정규형(third normal form)
- BCNF(Boyce-Codd normal form)
- 제4정규형(fourth normal form)
- 제5정규형(fifth normal form)
- 일반적으로 BCNF까지만 고려함
- 관계 데이터베이스 설계의 비공식적인 지침
- 이해하기 쉽고 명확한 스키마를 만들라
- 널 값을 피하라
- 가짜 투플이 생기지 않도록 하라
- 스키마를 정제하라
- 결정자(determinant)
- 결정자는 다른 애트리뷰트의 값을 고유하게 결정하는 애트리뷰트를 의미
- 사원 릴레이션의 사원번호는 사원이름을 고유하게 결정함
- A –> B 로 표기 : A가 B를 결정한다(또는 A는 B의 결정자이다)
- 위 사원 릴레이션에서의 결정자
- 표현 1
- 사원번호 –> 사원이름
- 사원번호 –> 주소
- 사원번호 –> 전화번호
- 부서번호 –> 부서이름
- 표현 2
- 사원번호 –> (사원일름, 주소, 전화번호)
- 부서번호 –> 부서이름
- 함수적 종속성(FD; Functional Dependency) 정의
- 정규화 이론의 핵심
- 릴레이션의 애트리뷰트들의 의미로부터 결정
- 릴레이션의 가능한 모든 인스턴스들이 만족
- 제2정규형부터 BCNF까지 적용
- 함수적 종속성 사례
- 애트리뷰트 A가 애트리뷰트 B의 결정자이면 B가 A에 함수적으로 종속한다
- 사원이름, 주소, 전화번호는 사원번호에 함수적으로 종속된다
- 사원번호 –> (사원이름, 주소, 전화번호)
- 직책은 (사원번호, 부서번호)에 함수적으로 종속,
사원번호에는 함수적으로 종속되지 않음
- (사원번호, 부서번호) –> 직책
- 완전 함수 종속(FFD; Full Functional Dependency)
- (사원번호, 부서번호) –> 직책
- 직책이 (사원번호, 부서번호) 전체에 종속된 것이지, 사원번호 또는 부서번호 중 하나에 종속된것이 아닐 때 완전 함수 종속
- 부분 함수 종속(PFD; Partial Functional Dependency)
- (사원번호, 부서번호) –> 사원이름
- 사원이름이 (사원번호, 부서번호) 전체에 종속되었고, 또한 일부인 사원번호에도 종속되었 때 부분 함수 종속
- 이행적 함수적 종속성(transitive FD)
- A가 B의 결정자이고, B가 C의 결정자일때 A가 C의 결정자인 관계를 이행적 함수적 종속이라 함
- A –> B 이고 B –> C 일 때 A –> C를 만족하는 관계
- 릴레이션 분해
- 무손실 분해(lossless decomposition)
- 분해된 두 릴레이션을 조인하면 원래의 릴레이션에 들어 있는 정보를 완전히 얻을 수 있음
- 손실 = 정보의 손실
- 다음 릴레이션을 분해
- 정규화 과정(참조: 데이터베이스 개론2판-김연희,한빛아카데미)
- 초기 릴레이션
- 제1정규형
- 모든 애트리뷰트가 원자값으로만 구성
- 모든 애트리뷰트에 반복그룹(repeating group)이 나타나지 않으면 제1정규형을 만족
- 초기 릴레이션 -> 제1정규화
- 갱신이상
- 수정이상
- 삽입이상
- 삭제이상
- 제2정규형
- 제1정규형을 만족
- 기본키가 아닌 모든 애트리뷰트가 기본키에 완전 함수 종속
- 고객아이디 –> (등급, 할인율), (고객아이디, 이벤트번호) –> 당첨여부
- 어떤 후보 키에도 속하지 않는 모든 애트리뷰트들이 R의 기본키에 완전하게 함수적으로 종속
- 제1정규형 이벤트참여 릴레이션 -> 제2정규형
- 갱신이상
- 수정이상
- 삽입이상
- 삭제이상
- 제3정규형
- 제2정규형을 만족
- 기본키가 아닌 모든 애트리뷰트가 기본키에 대한 이행적 함수 종속이 안되도록
- 고객아이디 –> 등급 –> 할인율
=> 고객아이디 –> 등급, 등급 –> 할인율
- 제2정규형 고객 릴레이션 -> 제3정규형
- 갱신이상
- 수정이상
- 삽입이상
- 삭제이상
- BCNF(보이스/코드 정규형)
- 제3정규형을 만족
- 함수 종속 관계에서 모든 결정자가 후보키이어야 함
- 제3정규형인 강좌신청 릴레이션
- (아이디, 인터넷강좌) –> 강사번호, 강사번호 –> 인터넷강좌
=> 고객아이디 –> 강사번호, 강사번호 –> 인터넷강좌
- 제3정규형인 강좌신청 릴레이션 -> BCNF
- 제4정규형
- BCNF 만족
- 함수 종속이 아닌 다치 종속(Multi Valued Dependency)를 제거
- 릴레이션R에 다중 값 종속 A ->-> B가 존재할 경우 R의 모든 애트리뷰트가 A에 함수적 종속 관계를 만족하는 정규형
- 제5정규형
- 제4정규형 만족
- 후보키를 통하지 않는 조인 종속(JD; Join Dependency)을 제거
- 릴레이션 R의 모든 조인 종속이 R의 후보키를 통해서만 성립
- 역정규화(Denormalization)
- 정규화로 분해된 릴레이션을 조인해서 사용하면 속도가 떨어짐
- 속도의 향상을 위해 정규화에 위배되지만 릴레이션을 합치는 것을 역정규화라 함
error: Content is protected !!