데이터 정규화

자이로 체펠리·2022년 1월 22일
0

데이터 정규화(database nomalization)?

데이터 정규화란 데이터 중복을 줄이고 데이터 무결성을 높이기 위한 데이터 베이스 설계과정을 말합니다.
데이터 정규화는 다양하지만 해당 글에서는 bcnf까지 다루게 됩니다.

제 1 정규형

제 1 정규형의 조건은
1. 열에는 위-아래의 순서가 없다.
2. 행에는 좌-우의 순서가 없다.
3. 중복되는 열이 없다.
4. 모든 열과 행의 중복지점에는 (열과 행의)해당되는 분야에서 한 개의 값을 가진다.
5. 모든 행은 규칙적이다.
로 이뤄져 있으나 대게 rdbms에서는 1, 2, 3, 5번 조건을 충족하기에 4번을 중점적으로 이야기합니다.

쉽게 말하자만 한 컬럼에는 하나의 값이 있어야 한다는 뜻으로

이름전화번호
010-1234-1234;02-1234-1234

위의 예시와 같이 하나의 컬럼에 두개의 값을 넣기 보다는

이름전화번호
010-1234-1234
02-1234-1234

다음과 같이 수정한다면 제 1정규형 조건을 만족하게 됩니다.

제 2 정규형

제 2 정규형는 테이블이 제 1정규형이고 기본키가 아닌 속성이 기본키에 완전 함수 종속성일 때 제 2 정규화의 조건을 만족한 것이라고 할 수 있습니다.
여기서 함수 종속성은 속성들간 종속 관계를 말하는 것이며
한 테이블 R에 존재하는 필드의 부분 집합을 x와 y할 때 x의 한 값이 y에 속한 하나의 값에만 매핑 될 겅유 y는 x에 함수 종속적이라고 하며 x->y라고 표기합니다.

완전 함수 종속성 : x->y종속성이 성립할 때 y가 x의 속성 전체에 함수 종속하고 부분 집합 속성에 함수 종속하지 않을 경우 완전함수 종속이라고 한다.

완정 함수 종속성을 충족하기 위해서 기본키를 이루는 부분집합이 결정자인 경우 테이블을 분리하여 종속성을 제거 하면 됩니다.

id, 강의, 강의실, 성적으로 이뤄진 수강강좌 테이블이 있습니다.
|id|강의 | 강의실 | 성적|
|-|-|-|
|1|db|101호|a|
|2|db|101호|b|
|3|cs|102호|a|
|...|...|...|...|
해당 테이블에서 id와 강의는 기본키로 성적을 결정하고 있습니다. 하지만 기본키의 부분집합인 강의가 강의실을 결정하고 있기 때문에 완전 함수 종속을 충족하고 있지 않습니다.
이를 해결하기 위해 강의 정보라는 테이블을 만들어 완전함수 종속을 충족하면 제 2정규형을 만족할 수 있습니다.

<수강강좌>

id강의성적
1dba
2dbb
3csa
.........

<강의 정보>

강의강의실
db101호
cs102호
......

제 3정규형

제 3정규형은 제 2정규형을 만족하는 상태에서 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3정규형을 만족할 수 있습니다.
이행적 함수 종속이란 컬럼 a, b, c가 주어졌을 때 c가 이행적으로 a에 종속한다는 의미로 a -> b, b->c와 같은 관계를 갖기 때문에 발생합니다.
<계절학기>

id강좌수강료
adb1000
bdb1000
ccs}2000
.........

위의 예시에서 테이블에서 id는 강좌를 결정하고, 강좌는 수강료를 결정하는 이행적 함수 종속을 만족합니다. 위 테이블을 계절 수강 테이블과 수강료 테이블로 나눈다면 제 3정규형을 만족할 수 있습니다.

<계절수강>

id강좌
adb
bdb
ccs
......

<수강료>

강좌수강료
db1000
db1000
cs2000
......

BCNF

제 3 정규형의 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것을 의미합니다.

<강좌>

id강좌교수
adb김교수
ddb김교수
ccs박교수
.........

예시와 같은 테이블이 있을 때 id는 강좌의 결정자지만 교수 역시 강좌에 대한 결정자이기 때문에
해당 테이블은 BCNF를 만족하지 못한다.
다음과 같이 수강 내역과 강좌 정보 테이블로 분리한다면 bcnf를 만족할 수 있다.

<수강내역>

id강좌
adb
ddb
ccs
......

<강좌>

교수강좌
김교수db
박교수cs
이교수h/w
......

참고 링크
https://yaboong.github.io/database/2018/03/10/database-normalization-2/
https://mangkyu.tistory.com/110
https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94

profile
"경의를 표해라. 경의를 갖고 회전의 다음 단계로 나아가는 거다…… [LESSON 4] 다."

0개의 댓글