-
정규화란?프로그래밍 기초 공부 2023. 1. 3. 23:38
이상현상
- 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용
- 삽입이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야하는 문제
- 갱신이상 : 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
- 삭제이상 : 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
정규화
함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해,
이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어 가는 과정주의사항
- 정규화를 통해 릴레이션은 무손실 분해 되어야 함
- 릴레이션이 의미상 동등한 릴레이션으로 분해되고, 정보 손실이 발생하지 않아야 함
- 분해된 릴레이션들을 자연 조인하면 분해 전의 릴레이션으로 복원 가능해야 함
기본 목표 : 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현
규칙 : 분해한 한 릴레이션은 다른 릴레이션을 외래키로 참조해야 함
함수적 종속성(FD)
속성들 간의 관련성
- “X가 Y를 함수적으로 결정한다” = “Y가 X에 함수적으로 종속되어 있다”
- 릴레이션 내의 모든 투플에서 하나의 X값에 대한 Y값이 항상 하나
- X,Y는 하난의 릴레이션을 구성하는 속성들의 부분 집합
- X -> Y (X : 결정자, Y : 종속자)
함수 종속 관계 판단 시 유의 사항
- 속성 자체의 특성과 의미를 기반으로 함수적 종속성 판단해야 함
- 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정
- 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 결정자가 될 수 있음
완전 함수 종속
- 릴레이션에서 속성 집합 Y가 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음
- 일반적으로 함수 종속은 완전 함수 종속을 의미
부분 함수 종속
- 릴레이션에서 속성 집합 Y가 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨
- 결정자와 종속자가 같거나,
- 결정자가 종속자를 포함하는 것처럼 당연한 관계는 고려X
정규형
- 릴레이션이 정규화된 정도
- 각 정규형마다 제약조건 존재
- 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐
- 릴레이션의 특성을 고려해서 적합한 정규형을 선택
제1정규형
릴레이션의 모든 속성이 더는 분해되지 않는 원자 값만 가지면 제1정규형 만족
제 1정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있음제2정규형
릴레이션이 제1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속
제1정규형에 속하는 릴레이션이 제2정규형을 만족하게 하려면?
-> 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 분해제3정규형
릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않을 때
제2정규형에 속하는 릴레이션이 제3정규형을 만족하게 하려면?
-> 모든 속성이 기본키에 이행적 함수 종속이 되지 않도록 분해보이스/코드 정규형
필요성
- 제3정규형까지 모두 만족해도 이상 형상이 발생할 수 있음
의미
- 강한 제3정규형, 모든 결정자가 후보키여야함
이상 현상을 해결하기 위해 제3정규형보다 좀 더 엄격한 제약조건
보이스/코드 정규형에 속하는 모든 릴레이션은 제3정규형에 속함
제3정규형에 속하는 모든 릴레이션이 보이스/코드 정규형은 아님제4정규형
릴레이션이 보이스/코드 정규형을 만족하면서, 함수 종속이 아닌 다치종속을 제거함
제5정규형
릴레이션이 제4정규형을 만족하면서, 후보키를 통하지 않는 조인 종속성을 제거
정규화 시 주의 사항
모든 릴레이션이 제5정규형에 속해야만 바람직한 것은 아님
일반적으로 제3정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해,
데이터 중복을 줄이고 이상 현상을 해결하는 경우가 대다수 - 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용