티스토리 뷰

데이터베이스

[데이터베이스] #9. 정규화

ccc124213131 2021. 12. 26. 14:10
728x90

정규화와 이상 현상

- 잘못된 스키마 정의는 원하지 않는 여러 이상 현상을 발생

- 잘못된 스카 정의를 바로 잡는 데이터베이스 설계 방법이 정규화

 

정규화의 필요성

- 잘못된 데이터베이스 설계는 여러 부작용

- 데이터 관리가 어려워지고, 일관성/무결성 훼손

- 부작용은 대부분 불필요한 데이터 중복 때문에 발생

- 좋은 설계는 데이터 중복을 최소화하는 형태로 릴레이션 스키마를 정의하는 것

 

 

이상 현상

- 릴레이션 처리 과정에서 불필요한 데이터 중복으로 인해 발생하는 부작용

- 이는 잘못된 릴레이션 스키마 설계 때문

 

종류

1) 삽입 이상

- 불필요한 데이터를 함께 입력하지 않고서는 원하는 데이터만 입력하는 것이 불가능한 상황

 

2) 갱신 이상

- 중복된 속성 값 중 일부가 수정되지 않을 경우 데이터 불일치가 발생하는 상황

 

3) 삭제 이상

- 삭제할 때 원하지 않는 유용한 데이터까지 함께 삭제되어 데이터 손실이 발생할 수 있는 상황

 

모두 릴레이션 내 불필요한 데이터 중복 때문에 발생

릴레이션 내 데이터 중복은? 한 릴레이션에 너무 많은 속성을 표현하려다보니 연관성이 낮은 속성까지 포함되어 생김

 

정규화의 개념

- 속성 사이의 연관 관계, 즉 종속성을 분석하여 하나의 릴레이션에는 하나의 종속성만 표현되도록 릴레이션을 분해

- 중복을 감소 시키는 구조로 단계적 규칙에 따라 릴레이션을 분해하는 과정을 정규화

- 즉, 잘못된 설계를 바로 잡는 과정

- 어떻게 속성 간 연관성을 판단/평가할까? 함수 종속성.

 

 

함수 종속성

- 속성 간 특정 속성 값이 함수적으로 다른 속성 값을 결정하는 종속 관계

- 다음과 같은 릴레이션이 있을 때, 학번이 결정되면 이름, 주소, 학년, 성별 값도 자동으로 결정됨

- 즉, 어떤 속성 값은 다른 속성 값을 고유하게 결정할 수 있고, 이 경우 '속성1 -> 속성2'로 표기

- 속성1은 결정자, 속성2는 종속자

- 각 속성은 복합 속성일 수 있음

- 이름, 주소, 학년, 성별 속성은 학번 속성에 함수 종속

- 보통 기본키/후보키 속성에 대해 나머지 속성들이 모두 함수 종속

- 기본키나 후보키가 아닌 속성도 결정자가 될 수 있음

* 속성 값이 아닌 속성 그 자체 만으로 종속성 여부를 판단해야함

 

 

함수 종속 다이어그램

- 하나의 릴레이션을 구성하는 속성들 간의 복잡한 함수 종속 관계를 이해하기 쉽게 표현한 그림

 

완전 함수 종속

- 결정자가 둘 이상의 속성 조합인 경우, 특정 속성이 결정자인 둘 이상의 전체 속성 조합에는 함수 종속이면서 결정자의 어떤 일부 속성에도 함수 종속이 아닐 때

- 보통 함수 종속은 완전 함수 종속을 의미

 

 

부분 함수 종속

- 기본 키에 속한 일부 속성 값만으로도 결정되는 경우

 

 

기본 정규형

- 정규형은 함수 종속성이 없는 비 연관 속성 그룹들을 분해하여 별개의 릴레이션으로 만드는 과정

 

정규형의 종류

정규형

- 여러단계를 거쳐 점진적으로 진행되며 각 단계별 정규화 수준을 정규형으로 표현

- 정규화 과정에서 릴레이션이 만족해야 하는 특정한 함수 종속성의 충족 조건

 

실제로는 제 3정규형 이상의 정규형을 충족하면 충분한 정규화가 이루어졌다고 본다.

 

제 1 정규형

- 어떤 릴레이션에 속한 모든 속성의 도메인이 원자 값만을 가져야 함(속성 하나가 여러 속성 값을 가지면 안 됨)

- 관계형 데이터 모델에서 릴레이션의 모든 속성 값은 원자 값을 가지므로, 기본 원칙만 따른다면 제 1 정규형 만족

- 삽입, 수정, 삭제 이상 발생 가능

- 해결 위해, 함수 종속성 파악 필요, 이를 위해서는 기본키부터 찾아 시작

 

무손실 분해

- 정규화 과정에서 릴레이션 분해는 어떤 정보도 손실되지 않게 동등한 릴레이션으로 분해되어야

- 즉, 자연 조인 연산에 의해 다시 이전의 릴레이션으로 복원 가능해야

- 결정자는 양 쪽 릴레이션에 공통 속성으로 남겨두어야 이후 외래키로서 분해된 릴레이션 사이의 연관성 유지 가능

 

제 2 정규형

- 어떤 릴레이션이 제 1정규형이고 기본키에 속하지 않는 모든 속성이 기본키에 완전 함수 종속

- 즉, 제 1정규형을 만족하는 릴레이션의 기본키가 복합 속성일 때, 기본키의 일부 속성이 결정자인지 검사

- 기본키가 단일 속성이면, 모든 속성이 완전 함수 종속이므로 제 2정규형 만족

- 여전히 삽입/수정/삭제 이상 발생 가능

 

이행적 함수 종속성

- 기본키에 속하지 않은 일반 속성 값이 또 다른 기본키에 속하지 않은 일반 속성 값을 결정하는 경우(종속자 A가 종속자B를 결정하는 경우)

 

제 3 정규형

- 어떤 릴레이션이 제 2정규형이고 기본키에 속하지 않는 모든 속성이 기본키에 이행적 함수 종속이 아닐 때

- 기본키가 이닌 일반 속성이 결정자인지 검사

- 여전히 삽입/수정/삭제 이상 발생 가능

 

보이스코드 정규형

- 어떤 릴레이션의 모든 결정자가 후보키

- 복잡한 식별자 관계에 의한 문제를 해결하기 위해 제 3정규형을 보완한 것

- 강한 제 3정규형이라고도 함

- 만약 릴레이션에 여러 후보키가 존재한다면 제 3정규형도 이상 현상이 발생할 수 있음

- 제 3정규형이더라도 기본키 속성이 일반 속성에 종속적일 때 보이스코드 정규형에 위배

- 보이스코드 정규형으로 만드려면, 모든 결정자를 후보키로 만들면 됨

 

 

정규화의 적용

- 릴레이션을 정보 표현 측면에서 동등하면서도 중복을 감소시키는 더욱 작은 릴레이션들로 무손실 분해함으로써 이상 현상을 제거하는 데이터베이스 설계의 방법

 

 

반정규화

- 정규화의 반대 개념으로 역정규화라고도 불림

- 성능 저하가 문제될 경우 분해된 릴레이션을 역으로 통함하여 성능을 향상시키는 설계 방법

- 높은 정규형을 만족하는 릴레이션 스키마가 반드시 최적이라고 할 수 없음. 데이터의 정합성과 무결성이 강화되는 장점. 하지만 릴레이션이 과다하게 많아지면 SQL 문장이 복잡해지고 조인 연산 등으로 실행 시간이 오래 걸릴 수도 있기 때문

- 자주 조회되는 데이터에 대해서는 역으로 데이터 중복을 허용하는 반정규화를 수행하여 성능을 높일 수 있음

 

댓글