본문 바로가기
CS

ep 07-1. 정규화

by L_SU 2023. 1. 1.

정규화란?

- 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정

- 이상현상이 존재하는 릴레이션을 분해하여 여러개의 릴레이션을 생성하게 됨

👉 이를 단계별로 구분, 정규형이 높아질수록 이상현상은 줄어듦

 

장점과 단점

- 장점

  • 데이터베이스 변경 시 이상 현상 제거할 수 있음
  • 정규화된 데이터베이스 구조에서 새로운 데이터 형의 추가로 인한 확장 시,
    그 구조를 변경하지 않아도 되거나 일부만 변경해도 됨
  • 데이터베이스와 연동된 응용 프로그램에서 최소한의 영향만을 미치게 돼 응용 프로그램의 생명을 연장시킴

- 단점

  • 릴레이션의 분해로 인해 릴레이션 간의 JOIN 연산이 많아짐
  • 질의에 대한 응답 시간이 느려질 수도 있음
    -데이터 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약됨
    👉 한 테이블의 데이터 용량이 최소화되는 효과가 있음
  • 데이터를 처리할 때의 속도가 빨라질 수도 있고 느려질 수도 있음
  • 조인이 많이 발생하여 성능 저하가 나타나면 반정규화를 적용할 수도 있음

제 1 정규형(1NF)

  • 각 컬럼이 하나의 속성만을 가져야함
  • 하나의 컬럼은 같은 종류나 타입의 값을 가져야함
  • 각 컬럼이 유일한 이름을 가져야함
  • 컬럼의 순서가 상관없어야 함

 

예시)

번호 이름 음식
01 이선욱 감자탕, 계란찜
02 삼선욱 소곱창, 등갈비

각 칼럼이 하나의 값만을 가져야함 - X 

이유) 음식에 두가지 값을 갖고 있음

 

수정)

번호 이름 음식
01 이선욱 감자탕
01 이선욱 계란찜
02 삼선욱 소곱창
02 삼선욱 등갈비

 

제 2 정규형(2NF)

  • 1정규형을 만족해야 한다.
  • 모든 컬럼이 부분적 종속이 없어야함 즉, 모든 칼럼이 완전 함수 종속을 만족해야함

부분적 종속

- 기본키 중 특정 컬럼에만 종속되는 것

완전 함수 종속

- 기본키의 부분집합이 결정자가 되면 안 되는 것 (비슷한 의미임)

 

예시)

번호 주문자 음식 가격
01 이선욱 감자탕 10,000
02 삼선욱 등갈비 16,000

기본키(번호, 음식) - 가격

음식 - 주문자

 

주문자는 기본키에 종속되지 않고 음식에만 종속되는 부분 종속

👉 제 2정규화 만족 X

 

수정)

번호 음식 가격
01 감자탕 10,000
02 등갈비 16,000

 

음식 주문자
감자탕 이선욱
등갈비 삼선욱

위와 같이 분해하면 제 2정규형을 만족함

제 3정규형(3NF)

  • 2정규형을 만족해야 함
  • 기본키를 제외한 속성들 간의 이행 종속성이 없어야 함

이행 종속성

-  A👉B, B👉C 일때 A👉C가 성립하면 이행 종속이라 함

 

예시)

음식 번호 음식 가격
01 감자탕 10,000
02 등갈비 16,000

음식 번호를 알면 음식을 알 수 있음

음식을 알면 가격을 알 수 있음

👉 음식번호를 알면 가격을 알 수 있음

때문에 제 3정규형 만족 X

 

수정)

 

음식 번호 음식
01 감자탕
02 등갈비
음식 가격
감자탕 10,000
등갈비 16,000

 

BCNF(Boyce-Codd Normal Form)

BCNF는 제 3정규형을 좀 더 강화한 버전

  • 3정규형을 만족해야 됨
  • 모든 결정자가 후보키 집합에 속해야 함
    👉 후보키 집합에 없는 칼럼이 결정자가 돼선 안 됨
주문 번호 이름 음식
01 이선욱 감자탕
02 삼선욱 등갈비

주문번호, 음식이 기본키로 이름을 알 수 있음

but) 같은 음식을 시킨 다른 사람이 있을 수 있음

👉 음식이 주문자에 종속 성립되지 않음

but) 어떤 주문자가 어떤 음식을 시켰는지 알 수 있음

👉 주문자-음식 종속이 성립됨

 

이와 같은 상황때매 BCNF를 만족하지 않음

 

수정)

주문 번호 이름
01 이선욱
02 삼선욱
이름 음식
이선욱 감자탕
삼선욱 등갈비

'CS' 카테고리의 다른 글

ep 08-1.교착상태  (0) 2023.01.08
ep 07-2. 트랜잭션  (0) 2023.01.01
ep 06-1.Hash  (0) 2022.12.18
ep 05-2. Primary index vs Secondary index /Composite  (0) 2022.12.03
ep 05-1. index  (0) 2022.12.02