관리 메뉴

피터의 개발이야기

[Database] 정규화(Normalizatio)란? 본문

Database

[Database] 정규화(Normalizatio)란?

기록하는 백앤드개발자 2024. 2. 24. 20:42
반응형

ㅁ 들어가며 

 정규화에 대해서 이론적 설명과 더불어 현실적인 이해를 돕기 위해 정리를 해 보았다. 

  정리하지 않으면,

  - 빠르게 찾을 수가 없다. 

  - 수량을 확인하기 어렵다.

  - 비슷하거나 같은 옷을 또 살 수 있다.

 빨래가 섞여있으면 자신의 옷을 쉽게 찾을 수 없기 마련이다. 빠르게 찾기 위해서는 자신의 옷은 자신의 서랍에 정리해야한다.

 

ㅁ 비 정규화 데이터

이름 학생번호 강좌 동호회
안유진 101 데이터베이스, 자료구조 합창단, 방송댄스
강호동 102 데이터베이스, 씨름 먹방동호회
유재석 103 사회학, 인문학 토크동호회

 

ㅇ 아직 정리 되지 않은 옷이 있다고 가정해 보자.

ㅇ 한 개인의 여러 정보들을 하나의 이름에  정리하면 비정규화된 데이터가 된다.

ㅇ 이런 경우 정리가 되지 않아 데이터의 검색, 삽입, 수정, 삭제시에 이상이 발생하기 마련이다.

ㅇ 쉽게 이야기해 옷정리를 하려고 해도 정리가 되어 있지 않아 그냥 쑤셔넣게 되고, 찾으려고 해도 찾을 수가 없다.

 

ㅁ 제1 정규화 - 모든 속성 값이 원자값을 갖는 경우

제1 정규화테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것이다.

쉽게 설명하면, 옷을 갤 때에 두 개를 한번에 묶어서 개지 않는다.

학생번호 강좌
101 데이터베이스
101 자료구조
102 데이터베이스
102 씨름
103 사회학
103 인문학

 

ㅁ 제2 정규화 - 부분적 함수 종속 제거

제2 정규화란 부분적 함수 종속 제거하여 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다.

ㅇ 완전 함수 종속:  수강정보 = 학생 + 강좌

 ㄴ 수강 정보는 학생과 강좌가 키이다.

부분 함수 종속:  수장정보 = 학생 + (강좌 + 강의실)

ㅇ 강좌와 강의실를 분리하여 완전 함수로 만든다.

[수강 정보]

학생번호 강좌 강의실
101 데이터베이스 소공학과101
101 자료구조 소공학과102
102 데이터베이스 소공학과101
102 씨름 씨름장1
103 사회학 인문과101
103 인문학 인문과102

 

[강의실 정보]

강좌 강의실
데이터베이스 소공학과101
자료구조 소공학과102
씨름 씨름장1
사회학 인문과101
인문학 인문과102

 

SELECT 학생번호, 수강정보.강좌,강의실정보.강의실
FROM 수강정보 
  JOIN ON 수강정보.강좌 = 강의실정보.강좌

 

ㅁ 제3 정규화 - 이행 종속 제거

ㅇ 기본키를 제외한 속성들 간의 이행 종속성 (Transitive Dependency)이 없어야 한다.

ㅇ 여기서 이행적 종속이란,
    ㄴ A→B,  B→C가 성립할 때 A→C가 성립되는 함수 종속성을 의미

 

학생번호 강좌 수강료
101 데이터베이스 50000
101 자료구조 30000
102 데이터베이스 50000
102 씨름 25000
103 사회학 10000
103 인문학 15000

ㅇ 이 표에서 학생번호  → 강좌 → 수강료

 

ㅇ 이행 종속을 분리하여 학생 번호와 강좌를 참조하여 수강료를 조인할 수 있도록 변경한다.

 

ㅁ BCNF 정규화

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

[특강정보]

학생번호 강좌 교수
101 데이터베이스 데이터교수1
101 자료구조 자료교수
102 데이터베이스 데이터교수2
102 씨름 씨름교수

 ㅇ 모든 결정자가 후보키 집합에 속해야 한다는 것은 후보키 집합에 컬럼이 없는 칼럼이 결정자가 되어서는 안된다는 뜻이다.

 ㅇ 위 테이블에서 기본키는 학생번호와 강좌이다. 하지만 데이터베이스는 교수가 둘이다. 

     ㄴ 이렇게 되면 강좌를 알면 교수를 기본키로 검색이 가능하지만, 교수를 통해 강좌를 검색할 수 없다. 

     ㄴ 이런 경우 후보키 집합이 아닌 칼럼이 결정자가 되어 BCNF를 만족하지 않는다.

 

 ㅇ 교수가 기본키로 구성하기 위해 분해를 하였다.

 

 

ㅁ 마무리

 ㅇ 데이터의 컬럼에 원자값을 보장하고, 테이블에 부분적으로 살발된 공통 정보를 제1정규화를 통해 데이터를 공통으로 통합하여 저장 데이터를 줄일 수 있었다. 막상 정규화를 공부하면서 데이터를 빠르게 검색하고 관리하기 쉽게 테이블을 쪼개는 과정이 다 담겨져 있었다. 이번 이해를 바탕으로 데이터 설계에 정규화 방식을 잘 적용하여 빠르고 경제적인 데이터설계를 이룰 수 있을 것 같다.

 

ㅁ 함께 보면 좋은 사이트

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

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

 

반응형
Comments