데이터베이스

정규화(Normalization)

dev-rootable 2023. 6. 14. 16:34

[해당 글은 공부 목적으로 아래 사이트 및 교재 등을 참고하여 작성되었습니다.]

[모든 다이어그램은 불친절한 SQL 프로그래밍 교재를 참고함]

 

📌 정규형/정규화 란

 

데이터 이상(anomaly) 현상을 제거하기 위한 관계형 모델의 설계 지침이다. 이에 따라 릴레이션을 만드는 과정정규화라 한다.

 

📌 정규화를 하는 목적

 

1. 중복 데이터를 최소화하여 테이블 불일치 위험을 최소화한다.

2. 수정, 삭제 이상 현상 등을 방지하여 데이터 구조의 일관성을 최대화한다.

3. 데이터 삽입 시 릴레이션 재구성에 대한 필요성을 줄인다.

4. 효과적인 검색 알고리즘을 생성할 수 있다.

 

🔎 제 1 정규형

 

속성의 원자성(atomicity)과 관련이 있다. 모든 속성은 단일 값을 가져야 한다. 아래의 릴레이션은 다중 값을 가지므로 1정규형을 위배했다. 관련부서목록은 목록이므로
다가 속성(다중 값을 가진 속성)을 가질 수 있다.

 

1정규형 위배 (다중 값)

 

반복 그룹을 가진 릴레이션도 제1정규형을 위배했다고 볼 수 있다. 단일 값을 저장할 수 있다고 해도 하나의 릴레이션에서 일부 동일한 튜플이 반복되는 경우다.
반복 그룹을 가진 속성을 반복 속성으로 부르기도 한다.

 

아래처럼 만약 관련부서번호1과 번호2가 상품 종류에 따라 결정된다면 조회한 상품 릴레이션마다 일부 동일한 튜플이 반복될 것이다.

이런 경우 부서와 관련된 릴레이션을 따로 만들어 분리하는 것이 바람직하다.

 

1정규형 위배 (반복 그룹)

 

상품 종류가 과일일 경우 부서1과 부서2는 동일한 값이 따라온다.

 

따라서 아래와 같이 2개의 릴레이션으로 정규화할 수 있다.

 

1정규화 결과

 

🔎 제 2정규형

 

2정규형은 부분 종속과 관련이 있다. 부분 종속은 일반 속성이 식별자의 일부 속성에만 종속되는 것이다.

 

아래의 경우, 상품명 속성은 상품코드 속성에만 종속되어 2정규형을 위배했다. 즉, 상품명은 주문번호와 관련이 없다.

 

3가지 데이터 이상(anomaly) 현상이 발생한다.

 

1. 주문이 발생하지 않으면 상품을 입력할 수 없다. (입력 이상)

2. 상품명이 변경되면 동일한 상품코드의 튜플을 모두 수정해야 한다. (수정 이상)

3. 상품이 삭제되면 주문도 함께 삭제된다. (삭제 이상)

 

2정규형 위배

 

2정규형 결과

 

✔ 이상(Anomaly)
정규화를 거치지 않은 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 발생하는 예기치 않은 현상을 말한다.
ex) 입력 이상, 수정 이상, 삭제 이상 등

 

🔎 제 3정규형

 

이행 종속과 관련이 있다. 이행 종속(transitive dependency)은 일반 속성이 다른 일반 속성에 종속되는 것이다.

 

아래의 사원 릴레이션의 소속부서명 속성은 일반 속성인 소속부서번호 속성에 종속된다. 3정규형을 위반한 릴레이션도 데이터 이상 현상이 발생할 수 있다.

 

3정규형 위배

 

3정규형을 위배한 릴레이션은 아래와 같이 2개의 릴레이션으로 정규화할 수 있다.

 

3정규형 결과

 

🔎 BCNF(Boyce-Codd Normal Form)

 

제3정규형을 만족하면서 모든 결정자가 후보키 집합에 속해야 한다. 즉, 후보키 집합에 없는 컬럼이 결정자가 되어서는 안된다는 뜻이다.

 

출처 : https://code-lab1.tistory.com/48

 

위 그림을 보면 학생 번호와 과목을 알면 지도 교수를 알 수 있다. 그런데 지도 교수를 알면 그 지도교수가 가르치는 과목을 알 수 있어 지도교수라는 일반 속성이
결정자가 되는 상황이다. 따라서, 아래처럼 테이블을 나눠 모든 결정자가 후보키 집합에 속하도록 한다.

 

출처 :https://code-lab1.tistory.com/48

 

🔎 제 4정규형

 

BCNF를 만족하고, 다치 종속이 없어야 한다. 다치 종속두 개의 독립된 속성이 1:N 관계로 대응하는 관계로 '↠'  화살표로 종속성을 표시한다.

 

아래와 같은 회원 정보 릴레이션이 있다.

 

회원정보 릴레이션

 

위 그림을 보면 회원 번호 '14002'와 '16053'은 주문상품 속성 값이 여러 개이다. 이런 경우, '회원번호 ↠ 주문상품'으로 나타낼 수 있고
아래와 같이 다치 종속의 문제점이 나타난다.

 

 

위 그림을 보면 불필요하게 회원번호와 회원명 속성이 중복되어 만들어진다는 단점이 있다.

 

회원번호라는 결정자를 두 릴레이션에 나누는 방식으로 다치 종속을 제거할 수 있다.

 

4정규형 결과

 

🔎 제 5정규형

 

4정규형을 만족하고 조인 종속이 없어야 한다. 또한, 조인 연산을 했을 때 손실이 없어야 한다.

 

만약 하나의 릴레이션이 여러 개의 릴레이션으로 무손실 분해했다가 다시 결합할 수 있다면 조인 종속이라고 한다.

 

출처 : https://code-lab1.tistory.com/270

 

📌 장단점

 

🔎 장점

 

  1. 데이터베이스 변경 시 이상현상 방지
  2. 데이터베이스 구조 확장 시 변경 최소화
  3. 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화됨

 

🔎 단점

 

릴레이션 분해로 인해 릴레이션 간의 연산(JOIN 연산)이 많아진다. 이로 인해 쿼리 응답 시간이 느려질 수 있다.

 

그래서 역정규화를 통해 읽기 작업이 많이 필요한 DB의 전반적인 성능을 향상시키기도 한다.

 

References:

https://mr-dan.tistory.com/10

 

정규화 (제1 정규화 ~ 제3 정규화)

DB를 공부하다 보면 가장 이해하기 어려웠던 부분이 정규화 였습니다.- 도메인 원자값 (1NF)- 부분적 함수 종속 제거 (2NF)- 이행적 함수 종속 제거 (3NF)- 결정자이면서 후보키가 아닌 것 제거 (BCNF)-

mr-dan.tistory.com

https://zzozzomin08.tistory.com/12

 

[복습]데이터베이스 정규화 -4 (4NF, 5NF)

이번 포스팅은 데이터베이스 정규화의 남은 단계인 제4정규형과 제5정규형을 다룬다. 1.제4정규형(4NF) -종속성들의 집합에 의해 암시되는 모든 종속성들에 대해 모든 의미있는 다치 종속성 X↠Y

zzozzomin08.tistory.com

https://code-lab1.tistory.com/48

 

[DB] 정규화(Normalization)란? 정규화 예시, 1NF, 2NF, 3NF, BCNF

정규화(Normalization)란? 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계

code-lab1.tistory.com

https://code-lab1.tistory.com/270

 

[DB] 제 4정규형과 제 5정규형, 4NF와 5NF

정규화란? 정규화는 이상현상(Anomaly)이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계별로

code-lab1.tistory.com

 

https://dev-coco.tistory.com/158

 

신입 개발자 기술면접 질문 정리 - 데이터베이스

💡 데이터베이스의 특징에 대해 설명해주세요. 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 하며, 지속적인 변화(Continuous Evloution) :

dev-coco.tistory.com