본문 바로가기
DB/DataBase

[DB] 데이터 정규화

by 키튼햄 2023. 12. 12.

 

제 1정규화  :  "한 칸엔 하나의 데이터만"  => 제 1 정규형 테이블

수강등록현황 테이블

 

 

 

 

제 2정규화  :  "현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업"

 

위의 테이블에서 "가격 컬럼"은 현재 테이블 주제와 별 상관이 없다.

따라서, 프로그램 테이블이라고 따로 빼서 테이블을 만들 수 있다. (아래 확인)

 

수강등록현황 테이블, 프로그램 테이블  =>  제 2정규형을 만족하는 테이블

 

장점)

프로그램의 댄스 가격을 수정한다고 한다면, 수강등록 현황 테이블에서 수강회원들의 댄스 프로그램의 가격을 모두 수정하는 번거로움 없이, 프로그램 테이블에서 댄스 프로그램의 가격만 변경해주면 된다.

=> 수정의 간편화

 

단점)

회원 한명이 얼마를 내야하는지 궁금할때, 수강등록 현황 테이블만 봐서는 모른다. 프로그램 테이블의 정보를 같이 끌고와야 조회가 가능하다는 불편함이 있다.

따라서, 비관계형 DB들은 정규화를 안하는 경우가 많다.

 

 

=> 제 2정규형의 정확한 정의  :  "partial dependency를 제거한 테이블"

 

# partial dependency 란?  

composite primary key

primary key가 없는 테이블에는 대신 composite primary key가 있다. 컬럼 여러개를 합치면(2개이상) 유니크한 속성이 생겨 primary key 역할이 가능해지게 되는데, 이때 이 컬럼들을 composite primary key라고 한다.

한마디로 composite primary key는 합하면 primary key가 되는 컬럼들을 말한다.

 

그렇다면 partial dependency 는 무엇이냐하면,

composite primary key에 종속되는 컬럼이 있는데 이때, 이 컬럼은 composite primary key에 partial dependency가 있다고 표현한다. 그래서 이 partial dependency가 있는 컬럼을 다른 테이블로 빼면 제 2정규화가 완성되는것이다.

 

 

 

 

제 3정규형  :  "일반컬럼에만 종속된 컬럼을 다른 테이블로 빼는 작업"

 

제 2정규형를 만족하는 테이블

 

여기서 프로그램 테이블은 제 2정규형 테이블이다. composite primary key가 없기 때문에 partial dependency도 없다. 그냥 primary key 인 프로그램명 하나만 있다.

 

여기서 "출신대학" 컬럼을 주목하면 primary key인 프로그램명과 전혀 상관이 없다. 이 컬럼은 "강사"라는 일반컬럼에 종속이 된 컬럼이다.

이렇게 일반 컬럼에만 종속된 컬럼을 다른 테이블로 빼버리면 그것을 제 3정규화라고 한다.

그리고 이렇게 작업이 완료된 테이블을 제 3정규형이라고 한다.

 

제 3정규형을 만족하는 테이블

 

위의 프로그램 테이블, 강사테이블은 제 3정규형을 만족하는 테이블이다.

 

장점)

수정이 편리하다.

예를들면 위의 테이블에서 전정국이라는 강사의 출신대학이 변경되었을때 제 2정규형에서는 만약 해당 강사가 맡은 프로그램이 엄청 많을때 하나하나 고치기에는 귀찮고 불편하다. 하지만 제 3정규형을 만족하는 테이블에서는 해당 강사의 출신대학 한 곳만 바꿔주면 되기 때문에 수정이 편리하다.

 

단점)

제 2정규화와 마찬가지로 프로그램 테이블만으로는 해당 강사의 출신대학을 출력할 수 없고, 강사테이블의 내용까지 가져와야 한다는 귀찮음이 있다.

 

 

 

관계형 데이터베이스들은 보통 제 3정규화까지 해 놓는 경우가 많다.

 

 

 


참고