정규화의 개념과 이상 현상
정규화의 개념
- 정규화는 데이터베이스를 설계한 후 설계 결과물을 검증하기 위해 사용한다.
- 정규화는 이상현상을 제거하면서 데이터베이스를 올바르게 설계해 나간다.
이상현상의 종류
- 삽입 이상
- 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
- 갱신 이상
- 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
- 삭제 이상
- 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
정규화의 필요성
- 이러한 이상현상이 발생하는 이유는 관련이 없는 속성들을 하나의 릴레이션에 모아두고 있기 때문이다.
- 따라서 관련 있는 속성들로만 릴레이션을 구성해야 하는데 이때 정규화를 사용한다.
- 정규화는 이상현상이 발생하지 않도록 릴레이션을 분해하는 과정이다.
- 정규화를 수행하기 전에 릴레이션을 구성하는 속성들 간의 관련성인 함수적 종속성을 판단해야 한다.
- 일반적으로 릴레이션에 함수적 종속성이 하나 존재하도록 한다.
함수 종속
- 하나의 릴레이션을 구성하는 속성들의 부분 집합을 X와 Y라 할 때, 어느 시점에서든 릴레이션 내의 모든 투플에서 X값에 대한 Y 값이 항상 하나면 "X가 Y를 함수적으로 결정한다." 또는 "Y가 X에 함수적으로 종속되어 있다."라고 한다.
- 아래 예제는 고객 아이디가 고객이름과 등급을 결정한다.
- 따라서 고객이름과 등급 속성은 고객아이디 속성에 함수적으로 종속되어 있고 고객아이디는 결정자가 되고 고객이름과 등급은 종속자가 된다.
- 함수 종속 관계를 판단할 때 유의할 점은 현재 시점에 릴레이션에 포함된 속성 값만으로 판단하면 안 된다는 것이다.
- 릴레이션의 속성 값은 계속 변할 수 있기 때문에 속성 자체가 가지고 있는 특성과 의미를 기반으로 판단해야 한다.
- 일반적으로 기본키와 후보키는 릴레이션을 구성하는 다른 모든 속성의 결정자가 된다.
- 그러나 기본키나 후보키가 아니더라도 하나의 속성이 다른 속성을 유일하게 결정한다면 결정자가 될 수 있다.
- 함수 종속 다이어그램은 복잡한 함수 종속 관계를 더 직관적으로 이해하는데 도움이 된다.
- 완전 함수 종속과 부분 함수 종속
- 완전 함수 종속은 릴레이션에서 속성 집합 Y가 속성 집합 X에 함 수적으로 종속되어 있지만, 속성 집합 X 전체에 종속된 것이지 일부분에 종속된 것이 아님을 의미한다.
- 부분 함수 종속은 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미하므로, 부분 함수 종속 관계가 성립하려면 결정자가 여러 개의 속성들로 구성되어 있어야 한다.
- 일반적으로 함수 종속이라고 하면 완전 함수 종속을 의미한다.
- 이벤트참여 릴레이션에서 고객이름은 고객아이디에 완전 함수 종속되어 있지만 {고객아이디, 이벤트번호}에는 부분 함수 종속되어 있다. 그리고 당첨여부는 {고객아이디, 이벤트번호}에 완전 함수 종속되어 있다.
기본 정규형과 정규화 과정
- 정규형의 종류
- 릴레이션의 정규화된 정도는 정규형으로 표현한다. 정규형은 두 형식으로 나뉘는데 제 1,2,3정규형,BCNF는 기본 정규형에 속하고, 제 4,5정규형은 고급 정규형에 속한다.
- 각 정규형에는 만족시켜야 하는 제약조건이 존재한다.
- 릴레이션이 특정 정규형의 제약조건을 만족하면 릴레이션이 해당 정규형에 속한다고 표현한다.
- 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해진다.
- 높은 차수의 정규형이 이상현상이 발생하지 않는 바람직한 릴레이션이지만, 모든 릴레이션이 5정규형에 속해야 하는 것은 아니므로 릴레이션의 특성을 고려하여 적합한 정규형을 선택해야 한다.
제1 정규형 (1NF)
릴레이션이 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있으면 제 1정규형에 속한다.
- 릴레이션이 제1 정규형에 속하려면 릴레이션에 속한 모든 속성이 도는 분해되지 않는 원자 값만 가져야 한다.
- 하나의 속성에 여러 값이 들어가 있는 다중 값 속성은 제 1 정규형을 만족하지 못한다.
- 이벤트 참여 릴레이션에 1정규형을 만족하도록 정규화를 수행하면 하나의 속성에 하나의 값만 들어가게 된다.
그 결과 1 정규형에는 속하지만 이상현상이 발생할 가능성이 있다.
따라서 이벤트 참여 릴레이션의 함수 종속 관계를 따져봐야 한다.
![]() |
![]() |
- 함수 종속 관계를 보면 3가지 이상현상이 발생할 수 있다.
- 삽입 이상 : 이벤트에 참여하지 않은 새로운 고객을 등록하려 할 때 개체 무결성 제약조건에 위배되어 삽입할 수 없다.
- 갱신 이상 : 일부 투플의 값만 변경하면 데이터 일관성을 유지할 수 없다.
- 삭제 이상 : 이벤트 참여 기록을 삭제하면 고객 정보도 함께 삭제된다.
- 이러한 이상현상이 발생하는 것은 이 릴레이션이 부분 함수 종속을 포함하고 있기 때문이다.
- 따라서 2 정규화를 통해 부분 함수 종속을 제거해야 한다.
제2 정규형 (2NF)
릴레이션이 제 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2정규형에 속한다.
- 제2 정규형을 만족하려면 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 릴레이션을 분해하는 정규화 과정을 거쳐야 한다.
- 이벤트 참여 릴레이션을 두 개의 릴레이션으로 나누면 등급과 할인율 속성에 대한 데이터 중복이 줄어든다.
- 정규화 과정에서 분해된 릴레이션들을 자연 조인하여 분해 전에 릴레이션으로 다시 복원할 수 있어야 하며 이를 무손실 분해라고 한다.
- 2 정규형에 속하더라도 함수 종속성을 가지고 있기 때문에 이상현상이 발생할 수 있다.
- 삽입 이상 : 고객 릴레이션에서 새로운 등급을 생성하고 그 등급에 속하는 고객이 없다면 개체 무결성 제약조건을 위배하여 삽입할 수 없다.
- 갱신 이상 : 고객 릴레이션에서 할인율 속성을 변경하면 모든 투플에 할인율이 동일하게 변경해야 한다. 만약 한 투플만 변경되면 데이터 불일치가 발생한다.
- 삭제 이상 : 고객 릴레이션에서 고객 탈퇴로 인해 한 투플이 삭제되면 등급과 할인율에 대한 정보까지 삭제된다.
- 이러한 갱신 이상은 여러 함수 종속 관계를 포함하고 있어 이행적 함수 종속이 생기기 때문이다.
- 따라서 제3 정규화를 통해 이행적 함수 종속을 제거해야 한다.
제3 정규형 (3NF)
릴레이션이 제 2정규형에 속하고,
기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3정규형에 속한다.
- 릴레이션을 구성하는 3개의 속성 집합 X, Y, Z에 대해 함수 종 속 관계 X — Y와 Y — Z가 존재하면 논리적으로 X -> Z가 성립한다.
- 이때 속성 집합 Z가 속성 집합 X에 이행적으로 함수 종속되었다고 한다.
- 일반적으로 3개의 X, Y, Z 속성 집합으로 구성된 릴레이션에 X — Y와 Y — Z라는 함수 종속 관계와 이로 인한 X — Z라는 이행적 함수 종속 관계가 존재한다면, 이 같은 함수 종속 관 계의 의미가 유지되도록 분해해야 한다.
- 즉, X와 Y 속성 집합의 릴레이션과 Y와 Z 속성 집합 의 릴레이션으로 분해한다.
- 릴레이션을 분해하면 하나의 릴레이션에 하나의 관계만 존재하게 되어 이행적 함수 종속으로 인한 이상 현상이 발생하지 않게 된다.
- 고객 릴레이션은 기본키인 고객아이디가 등급을 직접 결정하므로 제3 정규형에 속한다.
- 마찬가지로 고객등급 릴레이션도 기본키인 등급이 할인율을 직접 결정하므로 제3정규형 에 속한다.
보이스 / 코드(BCNF) 정규형
릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스 / 코드 정규형에 속한다.
- 하나의 릴레이션에 여러 개의 후보키가 존재한다면 제3 정규형을 만족하더라도 이상 현상이 발생할 수 있다.
- 이러한 이상 현상을 해결하기 위해 더 엄격한 제약조건을 제시한 것이 BCNF이다.
- 강좌신청 릴레이션은 모든 속성이 원자 값으로만 구성되어 있으므로 제1정규형에 속한다.
- 그리고 기본키가 아닌 속성인 담당강사번호가 기본키에 완전 함수 종속되며 이행적 함수 종속을 포함하고 있지 않으므로 제2 정규형과 제3 정규형에도 속한다.
- 하지만 담당강사번호 속성이 후보키가 아님에도 인터넷강좌 속성을 결정하므로 강좌신청 릴레 이션은 BCNF 정규형에는 속하지 않는다.
- BCNF 정규형에 속하지 않은 릴레이션은 이상현상이 발생할 수 있다.
- 삽입 이상 : 강사가 강좌를 담당하게 되었지만 강좌를 신청한 고객이 없다면 새 투플을 삽입할 수 없다.
- 갱신 이상 : 인터넷 강좌가 수정되면 강사 한 명이 인터넷 강좌를 하나만 담당해야 한다는 조건에 모순이 발생한다.
- 삭제 이상 : 고객이 인터넷 강좌를 수강 취소하여 투플을 삭제하면 데이터 손실이 발생한다.
- 따라서 이러한 이상 현상을 해결하기 위해서는 후보키가 아닌 결정자를 기준으로 분해해야 한다.
제4 정규형과 제5 정규형 (4NF, 5NF)
제 4정규형은 릴레이션이 BCNF을 만족하면서, 함수 종속이 아닌 다치 종속을 제거해야 만족할 수 있다.
제 5정규형은 릴레이션이 제 4정규형을 만족하면서 후보키를 통하지 않는 조인 종속을 제거해야 만족할 수 있다.
- 일반적으로는 제3 정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상이 발생하는 문제를 해결한다.
정규화 과정 정리
Q & A
본 도서의 내용을 정리한 것이 아닌 학습 스터디를 위해 제가 작성한 질답입니다.
사실과 다른 내용이 있다면 지적 부탁드립니다 :)
Q1 : 이행적 함수 종속에 대해 설명해 주세요.
이행적 함수 종속은 데이터베이스에서 발생하는 함수 종속의 한 유형으로, 다음과 같은 세 개의 속성 집합 A, B, C가 있다고 가정할 때 나타나는 종속성을 나타냅니다:
A는 B에 종속적입니다 (A -> B), B는 C에 종속적입니다 (B -> C)
이 경우, A는 C에 이행적으로 종속되는 것으로 간주됩니다 (A -> C)
이행적 함수 종속성은 데이터베이스 설계에서 중요한 개념으로, 이를 잘 처리하지 않으면 이상현상이 발생할 수 있습니다.
Q2 : 데이터 중복이나, 안전성보다 성능이 중요하다면 정규화를 포기해도 되나요?
데이터베이스 설계에서 정규화는 중요한 과정이지만, 모든 상황에서 필수적인 것은 아닙니다. 성능에 관한 요구 사항이 중요한 경우, 일부 정규화를 포기하는 것을 선택할 수 있습니다. 특히 분석 및 보고 처럼 읽기 전용의 데이터베이스에서는 성능을 높이는것이 더 중요할 수 있습니다.
출처 : 김연희, 데이터베이스 개론 3판, 한빛아카데미(2022)
'Database' 카테고리의 다른 글
[데이터베이스 개론] Chapter11 - 보안과 권한 관리 (0) | 2023.06.02 |
---|---|
[데이터베이스 개론] Chapter10 - 회복과 병행 제어 (0) | 2023.05.27 |
[데이터베이스 개론] Chapter8 - 데이터베이스 설계 (1) | 2023.05.13 |
[데이터베이스 개론] Chapter7 - 데이터베이스 언어 SQL (1) | 2023.05.12 |
[데이터베이스 개론] Chapter6 - 관계 데이터 연산 (0) | 2023.04.26 |