본문 바로가기
공부/DB

데이터 베이스 정규화(Normalization)

by son_i 2024. 7. 9.
728x90

정규화란 ? 

정규화의 최종 목표는 테이블 간 중복된 데이터를 없애기 위함이다.

중복된 데이터를 허용하지 않음으로써 무결성(Integrity)을 유지할 수 있고 DB 저장 공간을 확보할 수 있다.

 

정규화 단계

[제 1정규화]

테이블의 컬럼이 원자값(Atomic Value)을 갖도록 테이블을 분해하는 것이다.

 

[제2 정규화]

제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다.

 

완전 함수 종속 ? - 기본키의 부분집합이 결정자가 되면 안 된다.

 

예를 들어 내가 설계한 테이블에서

복합키인 기본키 (친구 정보 아이디, 회원 아이디)의 부분집합인 회원 아이디로 친구 아이디 컬럼을 찾을 수 있다.

 

즉 기본키의 부분집합이 결정자가 된 것이라 기존의 테이블에서 친구 아이디를 분리하여 별도의 테이블을 만들어 제2정규형을 만족시켜야 한다. 

 

수정 된 테이블

친구 테이블을 분리해주었다. 

이렇게되면 한 회원의 친구 요청함, 친구 목록을 조회할 때 아이디로 상태를 먼저 조회하고

친구 정보 테이블에서 그에 해당하는 친구 아이디를 찾아서 띄워주면 된다.

 

[제 3정규화]

제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것.

 

이행적 종속 ? - A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미.

 

 

[BCNF 정규화]

BCNF 정규화란 제 3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것

 

슈퍼키 ? - (유일성 O, 최소성 X) 유일성의 특성을 만족하는 속성들의 집합.

후보키 ? - (유일성 O, 최소성 O) 슈퍼키 중에서 최소성을 만족하는 키

[학생번호]는 슈퍼키가 될 수 있다. 
[학생번호, 나이, 성별] 은 슈퍼키가 될 수 있다.
                                       (학생번호 만으로 구분할 수 있으므로 최소성을 만족하지 않지만 ㄱㅊ)
[이름, 나이, 성별]은 슈퍼키가 될 수 없다. 유일성이 보장되지 않음. 
[학생번호, 나이, 성별] 슈퍼키 중 최소성을 만족하는 [학생번호]가 후보키가 될 수 있다. 

 

 

정보처리기사를 취득할 때 암기도 했고 이해도 했지만 실제 데이터베이스 테이블 설계에 이용해본 적은 없다.

이번 프로젝트에서 고려하며 설계를 해보려고 한다 !


참고

https://mangkyu.tistory.com/110

 

[Database] 정규화(Normalization) 쉽게 이해하기

지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz

mangkyu.tistory.com

 

https://velog.io/@kon6443/DB-%EA%B8%B0%EB%B3%B8%ED%82%A4-%EC%99%B8%EB%9E%98%ED%82%A4-%ED%9B%84%EB%B3%B4%ED%82%A4-%EB%B3%B5%ED%95%A9%ED%82%A4-%EA%B0%9C%EB%85%90-4x1bgz5w

 

728x90