Posts [SQLD] 정규화, 비정규화, 정규형(1~5)
Post
Cancel

[SQLD] 정규화, 비정규화, 정규형(1~5)

정규화

개념

  • 데이터의 중복을 줄이고 무결성을 지키기 위해 사용하는 데이터베이스 구성 방법.
    • 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미.
    • 무결성의 종류는 4가지가 있는데, 여기서는 자세히 다루지 않음.

장점

  • 데이터를 작고 관리하기 쉽게 나누어 데이터 중복을 제거.

단점

  • 여러 테이블과 참조 관계를 설정하기 때문에 join 연산이 발생하고, 조회 연산 속도가 느려질 수 있음.

비정규화

개념

  • 정규화로 인해 join 연산이 많아질 경우 성능 개선을 위해 사용하는 데이터베이스 구성 방법.
  • 정규화는 데이터 중복을 제거, 비정규화는 데이터 중복을 허용하는 것.

장점

  • join 연산 감소로 조회 연산 속도 증가.

단점

  • 중복된 데이터 증가.

정규형

1.png

출처: [DB] 정규형 (1NF, 2NF, 3NF, BCNF) [티스토리]

제1 정규형

  • 릴레이션의 모든 도메인이 원자 값으로 구성.
  • 원자 값: 단 하나의 값만 가지는 것을 의미

| ID | 이름 | 전화번호 | | — | — | — | | 1 | 김철수 | 123-1234, 123-1235 | | 2 | 고영희 | 123-1236 |

  • 전화번호를 {123-1234, 123-1234} 와 같이 여러 값을 가질 수 없다.
  • 아래와 같이 분리 가능

[회원]

ID이름
1김철수
2고영희

[전화번호]

ID회원ID (FK)전화번호
11123-1234
21123-1235
32123-1236
  • 아래와 같이 반복 그룹을 가지는 속성이 있어도 제1 정규형 위반.

| ID | 이름 | 전화번호1 | 전화번호2 | | — | — | — | — | | 1 | 고영희 | 123-1234 | 123-1235 |

  • 아래와 같이 분리할 수 있음.

[회원]

ID이름
1고영희

[전화번호]

ID회원ID (FK)전화번호
11123-1234
21123-1235

제2 정규형

  • 부분적 함수 종속성 제거.
  • 모든 속성은 반드시 모든 기본키에 종속되어야 함.
  • 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속된 상태

| 회원 ID(PK, FK) | 상품 ID (PK, FK) | 주문일자 | 상품명 | 주문수량 | | — | — | — | — | — | | 1 | 3 | 2024-08-04 | 제품3 | 1 | | 2 | 1 | 2024-08-05 | 제품1 | 2 |

  • 회원 ID, 상품 ID 두 개의 키(복합키)로 기본키를 사용.
  • 주문일자, 주문수량은 기본키에 종속적임.
    • 회원 ID 가 바뀌면 주문일자, 주문수량이 바뀜.
    • 상품 ID 가 바뀌면 주문일자, 주문수량이 바뀜.
  • 하지만 상품명은 기본키에 종속적이지 않음.
    • 상품명이 바뀌는 건 상품 ID 가 바뀌기 때문이지, 회원 ID 가 상품명을 바꾸는 것이 아님.
  • 즉, 상품 ID 만 알아도 상품명을 알 수 있기 때문에 부분적 함수 종속성이 존재.
  • 부분적 함수 종속성을 제거하기 위해 아래와 같이 테이블을 나눌 수 있다.

[주문내역]

회원 ID(PK, FK)상품 ID (PK, FK)주문일자주문수량
132024-08-041
212024-08-052

[상품]

상품 ID (PK)상품명
1제품1
2제품2
3제품3

제3 정규형

  • 이행적 함수 종속 제거.
  • 기본키를 제외하고 나머지 속성들이 서로 종속될 수 없음.

| 상품 ID (PK) | 상품명 | 구매처 | 구매처별 최소구매수량 | | — | — | — | — | | 1 | 제품1 | A | 20 | | 2 | 제품2 | B | 30 | | 3 | 제품3 | C | 40 | | 4 | 제품4 | A | 20 |

  • 상품명을 알면 구매처를 알 수 있고, 구매처를 알면 구매처별 최소구매수량을 알 수 있다.
  • 즉, 구매처별 최소구매수량은 구매처에 종속된다.
  • 아래와 같이 테이블을 분리할 수 있다.

[상품]

상품 ID (PK)상품명구매처
1제품1A
2제품2B
3제품3C
4제품4A

[구매처]

구매처 (PK)최소구매수량
A20
B30
C40

BCNF

  • 제3 정규형 만족 + 모든 결정자가 후보키 집합에 속해야 함.
    • 후보키는 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합.

| 학생번호(PK) | 과목(PK) | 교수 | | — | — | — | | 1 | 경영학원론 | A | | 2 | 마케팅원론 | B | | 3 | 회계원리 | C | | 4 | 경영학원론 | A |

  • (학생번호, 과목)를 기본키로 교수를 알 수 있다. (결정자: 학생번호, 과목)
  • 마찬가지로 교수를 알면 과목을 알 수 있다. (결정자: 교수)
  • 하지만 교수에 의해 특정 행이 유일하게 식별되지 않는다.
    • A 교수을 통해 1번 학생과 4번 학생을 찾을 수 있는데, 이는 유일한 식별 대상이 아니라는 뜻이다.
  • 즉, 교수는 결정자로서 후보키가 될 수 없기 때문에 분리해야 한다.
학생번호(PK)교수
1A
2B
3C
4A
교수(PK)과목
A경영학원론
B마케팅원론
C회계원리

제4 정규형

  • 다중값 종속(다치 종속)이 없어야 한다.
    • 하나의 속성이 다른 두 개 이상의 속성에 독립적으로 종속되는 관계를 의미한다.

| 학생번호 | 과목 | 취미 | | — | — | — | | 1 | 경영학원론 | 수영 | | 1 | 회계원리 | 테니스 | | 2 | 경영학원론 | 수영 | | 2 | 마케팅원론 | 테니스 |

  • 위의 테이블에서는 학생 번호 하나에 여러 과목과 여러 취미가 종속된다.
  • 과목과 취미는 관계가 없는 독립적인 관계이지만, 학생 번호에 다치 종속이 되어 중복이 발생한다.
  • 이러한 문제를 해결하기 위해 아래와 같이 테이블을 분리할 수 있다.
학생번호과목
1경영학원론
1회계원리
2경영학원론
2마케팅원론
학생번호취미
1수영
1테니스
2수영
2테니스

제5 정규형

  • 중복을 제거하기 위해 분해할 수 있는 만큼 전부 분해하는 것이다.
  • 조인 종속이 없어야 하고, 조인 연산을 했을 때 손실이 없어야 한다.
  • 조인 종속은 다치 종속의 좀 더 일반화된 형태이다.
    • 조인 종속은 하나의 릴레이션을 여러 릴레이션으로 분해했다가 다시 결합할 수 있는 것을 의미한다.

    2.png

    출처: [DB] 제 4정규형과 제 5정규형, 4NF와 5NF [티스토리]

참고자료

This post is licensed under CC BY 4.0 by the author.