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