데이터베이스의 정규화

shockwave·2024년 10월 6일

TIL

목록 보기
34/49

미리 알아두면 좋은 개념
키 : 데이터를 기준에 따라 분류(구별)시키는 단위 또는 속성 (column의 개념)
후보키 : 유일성과 최소성을 갖는 키
기본키 : 후보키 중 Main이 될만한 것 (unique, not null, 값이 잘 변하지 않는 속성을 갖는다.)


정규화에는 몇가지 단계가 있다.
제 1 정규형 - 제 2 정규형 - 제 3 정규형 - BC 정규형
=> 정규형은 줄여서 NF로 사용한다 (Normal Form 이라는 뜻)


각각의 정규형에 대한 선요약

1NF : 원자값이 아닌 도메인을 분해 (중복 속성을 원자화 될 때까지 분해)
2NF : 부분함수 종속성 제거
3NF : 이행함수 종속성 제거
BCNF : 결정자가 후보키가 아닌 함수 종속성 제거


  • 정규화를 하는 이유?
    데이터를 직관적으로 분류해 데이터의 CRUD를 용이하게 한다.

  • 정규화를 하게 되면?
    결정자를 중심으로 종속되는 record가 구분이 된다.

  • 결정자는 무엇?
    종속되는 컬럼을 종속자라고 한다.
    해당 종속자들이 직접적으로 의존하고 있는 컬럼을 "결정자"라고 한다.


1NF

처음 정규화를 하는 단계에서 데이터베이스를 아래의 속성으로 분류한다.

  • 원자성
    모든 row는 하나의 값(data)만 담는다.
  • 고유성
    모든 row는 값이 서로 중복되지 않는 고유한 값만 담는다.

※ 컬럼의 속성이 중복되는 것들도 합친 후 row값을 원자화 한다. (ex> 장비1, 장비2, 장비3 => 장비)


2NF

본래의 테이블에 결정자를 남기고 결정자와 종속자로 이루어진 테이블을 분리한다.
이 때 본래의 테이블에 결정자가 남아있으므로 서로 연결되어 있다.
JOIN으로 결정자를 통해 데이터에 연결할 수 있다.

[테이블1] A | B | C | D 
A, B가 {A, B}로 이루어진 복합키라고 할 때,
// 복합키 : 기본키 속성을 해당 집합에 포함된 모든 키가 가지만 해당 키들은 복합키이다.
C는 A에, D는 B에 종속되는 종속자이다.

[테이블1] A | B -> 복합키는 놔두고
[테이블2] A | C -> 부분적인 종속자들을 서로 분리시켜준다.
[테이블3] B | D 

이렇게 부분적으로 종속성을 분리시켜주는 것이 2NF이다.

※복합키 뿐만이 아니라 기본키가 유일한 테이블에서도 똑같은 개념이다. 혼동해서는 안 된다.


3NF

이행함수 종속성이라는 것은 본래 테이블의 기본키 속성이 없는 키가 종속자를 가짐으로서 결정자의 역할을 하는 것을 말한다.
제 3 정규형에서는 이행함수 종속성을 제거하는 것을 목적으로 하는데
이는 기본키에 종속되어 있는 테이블 간에서 이루어진다.

[테이블1] A | B | C | D 

A는 기본키 결정자이며 B, C, D는 이에 종속되는 종속자이다.
그리고 D는 A와 C에 종속되는 종속자이다.
이 경우 C는 기본키를 갖지 않지만 결정자의 역할을 하는 이행함수라고 할 수 있다.

[테이블1] A | B | C 
[테이블2] C | D 

이렇게 이행함수 종속성을 분리시켜주는 것이 3NF이다.


BCNF

이 개념을 만든 사람이 Boyce와 Codd라고 BCNF이다.

모든 결정자가 후보키가 되도록 분리한다.

제 3정규형과 비슷하지만 좀 더 강력한 분리 개념이다.

BCNF는 후보키가 아닌 속성이 기본키(또는 후보키)나 기본키의 부분집합(복합키 중 하나)를 종속시키는 결정자일 때
해당 속성을 후보키로 만들어 메인 테이블에 분류하고
해당 후보키의 종속되는 기본키(또는 후보키)를 따로 분류한다.

A | B | C 

A, B는 복합키 집합 {A, B}에 포함된 속성이며, C는 B를 결정하는 결정자이다.

A | C -> C가 후보키가 된다.
C | B

이렇게 키가 되는 속성들로 분류하여 종속되는 속성들을 각각 분리시켜주는 개념이 BCNF이다.

profile
생각을 많이. 입은 무겁게. 심장은 항상 열심히 뛰는 사람이 되자.

0개의 댓글