DataBase

[sqld] 정규화

 

정규화란?

반복적인 데이터를 분리하고 각 데이터가 종속된 테이블에 적절하게 배치되도록 하는 것

 

반 정규화란?

정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발, 운영의 단순화를 위해

중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법

 

일반적으로 정규화시 입력/수정/삭제 성능이 향상되며, 반정규화시 조인 성능이 향상된다.

 

1차 정규화란? (1NF)

모든 도메인이 원자값만으로 구성되도록 하는 정규형

 

판매 내역 테이블

판매 물건 판매 금액 거래처
사과 5000 제일상회
10000 배민상회, 요기요상회
3000 제주상회

 

판매 물건 판매 금액 거래처
사과 5000 제일상회
10000 배민상회
10000 요기요상회
3000 제주상회

2차 정규화란? (2NF)

2차 정규형은 부분적 함수 종속을 제거, 테이블의 모든 컬럼이 완전 함수 종속이게 하는 것이다. 무슨소리냐 이게

이게 무슨 말이냐면 기본키중에 특정 컬럼에만 종속된 컬럼(부분적 종속)이 없어야 한다는 것입니다.

위 테이블의 경우 기본키는 (판매물건, 판매처) 두 개로 볼 수 있습니다.

이 두 개가 합쳐져야 한 로우를 구분할 수가 있습니다.

근데 판매 금액의 경우 이 기본키중에 판매물건에만 종속되어 있습니다.

즉, 판매물건의 값을 알면 판매 금액값을 알 수 있습니다.

따라서 판매금액이 두 번 들어가는 것은 불필요한 것으로 볼 수 있습니다.

판매 물건 테이블

판매 물건 판매 금액
사과 5000
10000
3000

거래처 테이블

판매 물건 거래처
사과 제일상회
배민상회
요기요상회
제주상회

이를 해결하기 위한 방법은 위처럼 테이블을 쪼개는 것입니다.

그러면 두 테이블 모두 2차 정규형을 만족하게 됩니다. 위 테이블의 경우 삽입/갱신/삭제 이상을 겪지 않게됩니다.

하지만 조금 더 복잡한 테이블의 경우, 갱신 이상을 겪기도하는데 이를 해결하는 것이 바로 3차 정규화입니다.


3차 정규화란 (3NF)

이행적 함수(X->Y, Y->Z, X->Z)의 종속을 제거 하는것. 이건 또 뭔소리냐

기본키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 수 없는 것

 

 

이와 같은 데이터 구성을 생각해봅시다. Student_id가 기본키이고, 기본키가 하나이므로 2차 정규형은 만족하는 것으로 볼 수 있습니다. 하지만 이 데이터의 Zip컬럼을 알면 Street, City, State를 결정할 수 있습니다. 또한 여러명의 학생들이 같은 Zip코드를 갖는 경우에 Zip코드만 알면 Street, City, State가 결정되기 때문이 이 컬럼들에는 중복된 데이터가 생길 가능성이 있습니다. 정리하면 3차 정규형은 기본키를 제외한 속성들 간의 이행적 함수 종속이 없는 것 입니다. 풀어서 말하자면, 기본키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 수 없는 것입니다.

 

3차 정규화는 2차정규화와 마찬가지로 테이블을 분리함으로써 해결할 수 있는데, 이렇게 두 개의 테이블로 나눔으로써 3차 정규형을 만족할 수 있습니다. 이를 통해 데이터가 논리적인 단위(학생, 주소)로 분리될 수 있고, 데이터의 중복(Redundancy)도 줄었음을 알 수 있습니다.

 




참고 사이트

www.studytonight.com/dbms/database-normalization.php

 

1NF, 2NF, 3NF and BCNF in Database Normalization | Studytonight

Normalization of Database Database Normalization is a technique of organizing the data in the database. Normalization is a systematic approach of decomposing tables to eliminate data redundancy(repetition) and undesirable characteristics like Insertion, Up

www.studytonight.com

 https://3months.tistory.com/193

 

데이터베이스 정규화 1NF, 2NF, 3NF, BCNF

데이터베이스 정규화 1NF, 2NF, 3NF, BCNF 데이터베이스 정규화란 데이터베이스의 설계를 재구성하는 테크닉입니다. 정규화를 통해 불필요한 데이터(redundancy)를 없앨 수 있고, 삽입/갱신/삭제 시 발

3months.tistory.com