https://bitnine.net/relational-database/data-modeling-rdb/
정규화 Normalization
의 목표는 테이블 간에 중복된 데이터(redundancy)를 허용하지 않게 구조화하는 데 있다.
정규화의 목적은 하나의 테이블에서 데이터의 삽입, 삭제, 변경이 정의된 관계들로 인하여 데이터베이스의 나머지 부분들로 전파되게 하는 것이다.
정규화된 데이터는 논리적으로 저장되어, 어떠한 relation 관계
라도 데이터베이스 내에서 표현 가능하다.
1970년 에드거 F.커드에 의해 정의된 제1 정규화(1NF)
부터 2002년 크리스토퍼 J.데이트, 허그 다위, 니코스 로렌츠에 의해 소개된 제6 정규화(6NF)
까지 발전된 정규화 모델이 있다.
이 중 1NF, 2NF, 3NF 그리고 3NF를 발전시킨 BCNF(boyce and codd normal form)까지가 standard로 여겨지고 있다.
지금부터 1NF부터 2NF, 3NF, 그리고 BCNF를 이야기해보자.
제1 정규화
란 테이블의 컬럼이 원자값(Atomic Value)을 가지도록 테이블을 분해하는 것이다.
조금 더 쉽게 설명하자면, 테이블 데이터의 row에서 하나의 column에 있어서 한 가지 값만 저장되어야 한다는 것이다.
데이터가 다음과 같이 저장되어 있다.
Employee를 기본 키로 하여 나머지 column 값들은 이에 종속됨을 볼 수 있다.
Employee를 Melvin으로 가지는 row의 Department column 값을 보면 Marketing, Sales 두 개의 값이 저장된 것을 볼 수 있다.
이는 1NF를 만족하지 못하는 데이터 모델링이며, 두 개의 row로 쪼개어 1NF를 만족시킬 수 있다.
제2 정규화
부터가 본격적인 데이터베이스 정규화라고 할 수 있다.
제2 정규화
란 제1 정규형을 만족한 테이블에 대해서 완전 함수 종속을 만족하도록 테이블을 분리하는 것이다.
더 쉽게 설명하자면, 기본 키 중 일부 키에만 종속되는 값이 없어야 한다는 것이다. 부분종속이 없어야 한다.
다음과 같이 학번, 이름, 소속학과, 학과장으로 컬럼이 구성된 테이블이 있다.
학번을 기본 키로 하여 이름, 소속학과, 학과장이 학번에 종속된다.
그러나 학과장은 소속학과 컬럼만으로도 종속되므로, 부분적인 종속관계가 존재한다.
2NF를 만족시키기 위해 다음과 같이 구조를 변경할 수 있다.
제3 정규화
란 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다.
여기서 이행적 종속이란 A->B, B->C가 성립할 때 A->C가 성립되는 것을 의미한다.
더 쉽게 설명하면 기본 키를 제외하고 다른 column에 의해 결정되는 데이터를 없애는 것이다.
다음은 2NF를 만족한 테이블이다.
course를 기본 키로하여 department와 lecturer이 course에 종속된다.
이 때, department를 lecturer이 결정하여, 종속관계가 있는 것을 확인할 수 있다.
3NF를 만족하기 위해 테이블을 다음과 같이 분리할 수 있다.
BCNF 정규화란
제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분리하는 것이다.
다음과 같이 3NF를 만족하는 테이블이 있다.
다음과 같은 제약사항이 있다고 생각해보자.
이를 분석하면,
이 상황에서 다음과 같이 BCNF를 만족하는 구조로 변경할 수 있다.
https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94
https://www.w3schools.in/dbms/database-normalization
https://vertabelo.com/blog/normalize-2nf-3nf/
https://itwiki.kr/w/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94
https://mangkyu.tistory.com/110#:~:text=%5B%20%EC%A0%95%EA%B7%9C%ED%99%94(Normalization)%EC%9D%B4%EB%9E%80%3F,%EC%9A%A9%EB%9F%89%20%EC%97%AD%EC%8B%9C%20%EC%A4%84%EC%9D%BC%20%EC%88%98%20%EC%9E%88%EB%8B%A4.