juuuding
[데이터베이스] CH 7 릴레이션 정규화 (2) 본문
제1정규형, 제2정규형, 제3정규형, BCNF
1. 제 1 정규형
- 한 릴레이션 R이 제 1정규형을 만족할 필요충분조건: R의 모든 애트리뷰트가 원자값만을 가짐
- 릴레이션의 모든 애트리뷰트에 반복 그룹이 나타나지 않으면 제1정규형 만족
- 제1정규형을 만족하지 않을 때 제1정규형으로 변환해주기
+ 애트리뷰트의 집합에 속한 각 값마다 하나의 투플로 표현
+ 모든 반복 그룹 애트리뷰트를 분리해서 새로운 릴레이션에 넣기. 그리고 원래 릴레이션의 기본키를 새로운 릴레이션에 애트리뷰트로 추가함
1-2. 제1정규형에 존재하는 갱신 이상
- 위 그림의 학생 릴레이션은 모든 애트리뷰트가 원자값을 가지므로 제1정규형 만족
- 이 릴레이션의 기본 키는 (학번, 과목번호)
1-3. 삭제 이상
- 어떤 학과에 소속된 마지막 학생 투플을 삭제하면 이 학생이 소속된 학과에 관한 정보도 삭제됨
1-4. 수정 이상
- 한 학과에 소속한 학생 수만큼 그 학과의 전화번호가 중복되어 저장되므로 여러 학생이 소속된 학과의 전화번호가 변경되었을 때 그 학과에 속한 모든 학생들의 투플에서 전화번호를 수정하지 않으면 데이터베이스의 일관성이 유지되지 않음
1-5. 삽입 이상
- 한 명의 학생이라도 어떤 학과에 소속되지 않으면 이 학과에 관한 투플을 삽입할 수 없음. 왜냐하면 학번이 기본 키의 구성요소인데 엔티티 무결성 제약조건에 따라 기본 키에 널값을 입력할 수 없기 때문
1-6. 갱신 이상이 생기는 이유
- 기본 키에 대한 부분 함수적 종속성이 학생 릴레이션에 존재하기 때문
2. 제2정규형
- 한 릴레이션 R이 제2정규형을 만족할 필요충분조건: R이 제1정규형 만족, 어떤 후보 키에도 존재하지 않는 모든 애트리뷰트들이 R의 기본 키에 완전하게 함수적으로 종속하는 것
- 기본 키가 두 개 이상의 애트리뷰트로 구성되었을 경우에만 제1정규형이 제2정규형을 만족하는가를 고려
(기본 키가 하나면 무조건 완전 함수 종속 -> 제2정규형 만족)
2-1. 제2정규형에 존재하는 갱신 이상
- 그림의 학생1 릴레이션의 기본 키는 한 애트리뷰트인 학번이므로 제2정규형 만족
2-2. 수정 이상
- 여러 학생이 소속된 학과의 전화번호가 변경되었을 때 그 학과에 속한 모든 학생들의 투플에서 전화번호를 수정하지 않으면 데이터베이스의 일관성이 유지되지 않음
2-3. 삽입 이상
- 어떤 학과를 신설해서 아직 소속 학생이 없으면 그 학과의 정보를 입력할 수 없음. 왜냐하면 학번이 기본 키의 구성요소인데 엔티티 무결성 제약조건에 따라 기본 키에 널값을 입력할 수 없기 때문
2-4. 삭제 이상
- 어떤 학과에서 마지막 학생의 투플이 삭제되면 그 학과의 전화번호도 함께 삭제됨
2-5. 갱신 이상이 생기는 이유
- 학생1 릴레이션에 이행적 종속성이 존재하기 때문
3. 제3정규형
- 한 릴레이션 R이 제3정규형을 만족할 필요충분조건: R이 제2정규형 만족, 키가 아닌 모든 애트리뷰트가 R의 기본 키에 이행적으로 종속하지 않는 것
3-1. 제3정규형에 존재하는 갱신 이상
- 수강 릴레이션에서 각 학생은 여러 과목을 수강할 수 있고, 각 강사는 한 과목만 가르침. 이 릴레이션의 기본 키는 (학번, 과목)
- 키가 아닌 강사 애트리뷰트가 기본 키에 완전하게 함수적으로 종속하므로 제2정규형 만족, 강사 애트리뷰트가 기본 키에 직접 종속하므로 제3정규형도 만족
- 이 릴레이션에는 다음과 같은 함수적 종속성들이 존재
(학번, 과목) -> 강사
강사 -> 과목
3-2. 수정 이상
- 여러 학생이 수강 중인 어떤 과목의 강사가 변경되었을 때 그 과목을 수강하는 모든 학샐들의 투플에서 강사를 수정하지 않으면 데이터베이스의 일관성이 유지되지 않음
3-3. 삽입 이상
- 어떤 과목을 신설하여 아직 수강하는 학생이 없으면 어떤 강사가 그 과목을 가르친다는 정보를 입력할 수 없음
- 왜냐하면 학번이 기본 키를 구성하는 애트리뷰트인데 엔티티 무결성 제약조건에 따라 기본 키에 널값을 입력할 수 없기 때문
3-4. 삭제 이상
- 어떤 과목을 이수하는 학생이 한 명밖에 없는데 이 학생의 투플을 삭제하면 그 과목을 가르치는 강사에 관한 정보도 함께 삭제됨
3-5. 갱신 이상이 생기는 이유
- 키가 아닌 애트리뷰트가 다른 애트리뷰트를 결정하기 때문
- 후보 키는 (학번, 과목)과 (학번, 강사)
4. BCNF
- 한 릴레이션 R이 BCNF를 만족할 필요충분조건: R이 제3정규형 만족, 모든 결정자가 후보 키여야 함
* 수강 릴레이션에서 강사 애트리뷰트는 후보 키가 아님에도 불구하고 과목 애트리뷰트를 결정하기 때문에 BCNF가 아님
- 제3정규형을 만족하는 대부분의 릴레이션들은 BCNF도 만족
* 하나의 후보 키만을 가진 릴레이션이 제3정규형을 만족하면 동시에 BCNF도 만족함
- 제3정규형을 만족하는 릴레이션을 BCNF로 정규화하려면 키가 아니면서 결정자 역할을 하는 애트리뷰트와 그 결정자에 함수적으로 종속하는 애트리뷰트를 하나의 테이블에 넣음. 이 릴레이션에서 결정자는 기본 키가 됨.
* 그 다음 기존 릴레이션에 결정자를 남겨서 기본 키의 구성요소가 되도록 함. 또한 이 결정자는 새로운 릴레이션에 대한 외래키 역할도 함
역정규화
1. 역정규화
- 정규화 단계가 진행될수록 중복이 감소하고 갱신 이상도 감소됨
- 정규화가 진전될수록 무결성 제약조건을 시행하기 위해 필요한 코드의 양도 감소됨
- 정규화가 데이터베이스 설계의 중요한 요소이지만, 성능상의 관점에서만 보면 높은 정규형을 만족하는 릴레이션 스키마가 최적인 것은 아님
- 분해된 릴레이션을 대상으로 질의할 때는 분해 전보다 많은 릴레이션에 접근해야 하므로 조인의 필요성이 증가
- 일부분을 역정규화함으로써 데이터 중복 및 갱신 이상의 대가를 치르며 성능상의 요구를 만족시키기도 함
- "검색 질의의 비율 >>갱신 질의의 비율"이므로, 역정규화는 주어진 응용에서 빈번하게 수행되는 검색 질의들의 수행 속도를 높이기 위해서 이미 분해된 두 개 이상의 릴레이션들을 합쳐서 하나의 릴레이션으로 만드는 작업
정리
'컴퓨터공학 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] CH 9 트랜잭션 (2) (1) | 2023.05.30 |
---|---|
[데이터베이스] CH 9 트랜잭션 (1) (0) | 2023.05.30 |
[데이터베이스] CH 7 릴레이션 정규화 (1) (1) | 2023.05.17 |
[데이터베이스] CH 6 물리적 데이터베이스 설계 (2) (0) | 2023.05.16 |
[데이터베이스] CH 6 물리적 데이터베이스 설계 (1) (0) | 2023.05.16 |