Chapter 07 정규화
이상현상
잘못 설계된 테이블로 삽입, 삭제, 수정 같은 데이터 조작을 하면 이상현상이 일어난다.
이상현상의 개념
이상현상(anomaly): 테이블에 투플을 삽입할 때 부득이하게 NULL 값이 입력되거나, 삭제 시 연쇄삭제 현상이 발생하거나, 수정 시 데이터의 일관성이 훼손되는 현상을 말한다.
삭제이상
삭제이상이란 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상이다.
-> 연쇄삭제(triggered deletion) 문제 발생
삽입이상
삽입이상이란 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL 값을 입력해야 하는 현상이다.
-> NULL 값 문제 발생
수정이상
수정이상이란 튜플 수정 시 중복된 데이터의 일부만 수정되어 데이터의 불일치 문제가 일어나는 현상이다
-> 불일치(inconsistency) 문제 발생
함수 종속성
정의
- 릴레이션 R과 R에 속하는 속성의 집합 X,Y가 있을 때, X 각각의 값이 Y의 값 한 개와 대응이 될 때 'X는 Y를 함수적으로 결정한다.'라고 하고 X->Y로 표기한다.
- 이때 X를 결정자(determinant)라고 하고, Y를 종속 속성(dependent attribute)이라고 한다.
- 함수 종속성은 보통 릴레이션 설계 때 속성의 의미로부터 정해진다.
정규화를 위해서는 기본키와 함수 종속성에 대해 알아야 할 필요가 있다.
- 어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존 관계를
- ‘속성 B는 속성 A에 종속한다’
- ‘속성 A는 속성 B를 결정한다’ 라고한다
- 이런 관계를 ‘A → B’로 표기하며 A는 B의 결정자라고 한다.
예시
학생번호 -> 학생이름
학생번호 -> 주소
강좌이름 -> 강의실
학과 -> 학과사무실
- 위 예시들은 종속관계에 있는 예시이다.
- 학번을 알면 학생이름을 바로 알 수 있고, 학번를 알면 주소를 바로 알 수 있다.
반대로 종속하지 않는 예는 다음과 같다
학생이름 -> 강좌이름
학과 -> 학생번호
- 한 학생이 여러개의 강좌를 들을 수 있고, 한 학과는 여러명의 학생을 가지고 있기에 종속하지 않는다.
다음 예시는 종속하는 것처럼 보이지만 종속하지 않는다
학생이름 -> 학과
- 동명이인이 존재할 수 있기에 함수 종속성 존재하지 않는다
- '학생번호 - 주소'와 같이 왼쪽 속성의 모든 값에 대하여 오른쪽 속성의 값이 유일하게 결정될 때 '함수적으로 종속한다'라고 한다.
- 릴레이션의 속성 간에 함수적으로 종속하는 성질을 '함수 종속성(FD, functional dependency)' 또는 '함수적 종속성'이라고 한다.
함수 종속성 다이어그램(functional dependency diagram)
함수 종속성을 나타내는 표기법으로 함수 종속성 다이어그램(functional dependency diagram)이 있다.
- 릴레이션의 속성: 직사각형
- 속성 간의 함수 종속성: 화살표
- 복합 속성: 직사각형으로 묶어서 그림
함수 종속성 규칙
- 부분집합 규칙 :
If Y ⊆ X, then X -> Y
- 증가 규칙 :
If X -> Y then XZ -> YZ
- 이행 규칙 :
If X -> Y and Y -> Z then, X -> Z
- 결합 규칙 :
If X -> Y and X -> Z then, X -> YZ
- 분해 규칙 :
If X -> YZ, then X -> Y and X -> Z
- 유사이행 규칙 :
If X -> Y and WY -> Z, then WX -> Z
함수 종속성과 기본키
- 릴레이션의 함수 종속성을 파악하기 위해서는 우선 기본키를 찾아야 한다.
릴레이션 R(K, A1, A2, A3, ... , AN)에서 K가 기본키이면, K->R이 성립
즉, 기본키는 릴레이션의 모든 속성에 대해 결정자이다.
이상현상과 결정자
- 이상현상은 한 개의 릴레이션에 두 개 이상의 속성이 포함되어 있고 기본키가 아닌 속성이 결정자일 때 발생
- 아래의 학생수강성적 릴레이션의 경우 기본키를 지닌 학생 정보(학생번호, 학생이름, 주소, 학과)와 기본키가 아니지만 결정자적 성질을 지닌 강좌 정보(강좌이름, 강의실)가 한 릴레이션에 포함되어 이상현상이 나타난다.
- 그 외에도 학과, 학생 번호, 강좌 이름은 기본키가 아니면서 결정자이기 때문에 이상현상을 해결하기 위해 총 4개의 릴레이션으로 학생수강성적 릴레이션을 분해하면 된다.
정규화
정규화(Normalization)란
- 이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정
- 이상현상이 있는 릴레이션은 이상현상을 일으키는 함수 종속성의 유형에 따라 등급 구분 가능
- 릴레이션은 정규형 개념으로 구분하며, 정규형이 높을수록 이상현상은 줄어듬
- 따라서 정규화 과정은 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하는 과정을 의미
- 릴레이션은 분해되는 정도에 따라 정규형 단계로 나누어지며 정규형이 높아질수록 이상현상은 줄어듬
- 정규화의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는다는 것
- 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, 데이터베이스의 저장 용량 역시 줄일 수 있음
제 1정규형
- 릴레이션의 모든 컬럼이 원자값(Atomic Value, 하나의 값)을 갖는 경우
- A relation in which the intersection of each row and column contains one and only one value.
- 예: 고객 취미들(이름, 취미들)이라는 릴레이션에 (추신호, (영화, 음악))이라는 열이 있다고 가정하면
- 이 속성들이 각각 다른 열로 분해된 릴레이션을 제1 정규형이라 함
제 2정규형
- 릴레이션의 기본키가 복합키일 때, 복합키의 일부분이 다른 속성의 결정자인지 여부 판단.
- 릴레이션이 제1 정규형을 만족하고, 기본키가 아닌 속성이 기본키에 완전 함수 종속일 때를 의미 (=완전 함수 종속을 만족하도록 테이블을 분해하는 것)
완전 함수 종속
- A와 B가 릴레이션 R의 속성이고 A->B 종속성이 성립할 때, B가 A의 속성 전체에 함수 종속하고, 부분 집합 속성에 함수 종속하지 않을 경우
이상현상
- 이 테이블에서 기본키는 (학생번호, 강좌이름)으로 복합키이다.
- 삭제이상: 402번 학생이 수강을 취소하면 스포츠경영학 과목의 강의실에 대한 정보가 사라진다.
- 삽입이상: 컴퓨터입문 과목이 개설되어 공학과 112호를 사용하게 되었는데, 아직 신청한 학생이 없기 때문에 학생번호와 성적을 NULL 값으로 삽입해야한다.
- 수정이상: 데이터베이스 강의실을 공학관 113호로 변경할 경우 데이터 불일치가 발생할 가능성이 있다.
이상현상의 원인
- 기본키(학생번호, 강좌이름)의 부분집합인 강좌이름에 성적과 강의실이 종속된다.
- 기본키가 아닌 속성이 기본키에 완전 함수 종속이 아닌 불완전 함수 종속이 되어있기 때문에 이상현상이 발생했다.
- 불완전 함수 종속(=부분 함수 종속): A->B 종속성에서 A의 속성 일부를 제거해도 종속성이 여전히 성립하는 경우
제2정규형으로 변환
제 3정규형
- 속성들이 이행적(transitive)으로 종속되어 있는지 여부를 판단하는 것
- 릴레이션 R이 제 2정규형이고 기본키가 아닌 속성이 기본키에 비이행적으로 종속할 때(직접 종속) 제 3정규형이라고 한다.
- 이행적 종속: A->B, B->C가 성립할 때 A->C가 성립되는 함수 종속성을 말한다.
이상현상
- 삭제이상: 402번 학생이 수강 취소하면 스포츠경영학 과목의 수강료에 대한 정보가 사라진다.
- 삽입이상: 컴퓨터입문 과목이 개설되어 수강료 15,000원을 삽입해야 하는데, 아직 신청한 학생이 없어 학생번호를 NULL값으로 삽입해야 하는 문제가 발생한다.
- 수정이상: 데이터베이스 수강료를 15,000원으로 변경할 경우 데이터 불일치가 발생할 가능성이 있다.
이상현상의 원인
- (학생번호 -> 강좌이름), (강좌이름 -> 수강료)로 수강료는 기본키에 이행적으로 종속되어 있기 때문에 이상현상 발생.
제 3정규형으로 변환
- 학생번호를 통해 강좌이름을 참조하고, 강좌이름으로 수강료를 참조하도록 테이블을 분해
BCNF
- 릴레이션에 존재하는 함수 종속성에서 모든 결정자가 후보키이면 BCNF 정규형이다.
- 릴레이션 R에서 함수 종속성 X->Y가 성립할 때 모든 결정자가 후보키면 BCNF 정규형이라고도 한다.
- 위 특강수강 테이블에서 한 학생은 한 개 이상의 특강을 신청할 수 있고, 교수는 한 특강만 담당한다고 가정한다.
이상현상
- 릴레이션의 기본키가 아닌 교수가 특강이름을 결정하는 종속관계에서 발생한다.
- 삭제이상: 402번 학생이 수강을 취소하면 인간과 동물 특강을 담당하는 교수 정보가 사라진다.
- 삽입이상: 최교수가 취업특강을 새로 맡았는데, 아직 신청한 학생이 없어 학생번호를 NULL 값으로 삽입해야 하는 문젝가 발생
- 수정이상: 김교수의 특강 제목을 소셜네트워크에서 소셜네트워크 분석으로 변경할 경우 데이터 불일치가 발생할 가능성이 있다.
이상현상의 원인
- 교수는 한 개의 특강만 개설하기 때문에 '교수 -> 특강이름' 관계 성립
- 특강수강 테이블의 결정자 중 (학생번호, 특강이름)은 후보키이지만 교수는 후보키가 아니다.
- 이처럼 결정자이면서 후보키각 아닌 속성이 존재하면 이상현상이 발생한다.
BCNF 정규형으로 변환
- (교수, 특강이름)을 분해하면 된다.
대부분의 릴레이션에서는 BCNF까지 정규화하면 실제적인 이상현상이 없어지기 때문에 BCNF까지 정규화를 한다.
무손실 분해
- 릴레이션을 분해할 때 지켜야 할 규칙
- 분해된 릴레이션 간의 관계를 유지하기 위해 분해된 릴레이션에 공통 속성을 한 개 이상 두어야 한다는 것이다.
- 공통 속성은 분해된 릴레이션으로 조인할 때 사용한다.
- 분해된 공통 속성은 분해된 릴레이션의 키여야한다.
'Develop > Database' 카테고리의 다른 글
DB | Join (0) | 2023.09.20 |
---|---|
DB | 트랜잭션, 동시성 제어, 회복 (1) | 2023.08.28 |
DB | 데이터 모델링 (1) | 2023.08.28 |
DB | 데이터베이스 프로그래밍 (1) | 2023.08.27 |
DB | SQL 고급 (2) | 2023.08.27 |