Database/MS-SQL

정규화 (Normalization) 란?

ㅈㅣ니 2024. 8. 1.
  • 정규화란 데이터베이스의 데이터를 구성하는 프로세스입니다.
  • 중복과 일관성 없는 종속성을 제거하여 데이터베이스를 보다 유연하게 만듭니다.

=> 중복된 데이터를 없애는 과정을 통해 무결성(Integrity)을 유지할 수 있으며,

데이터베이스의 저장 용량 또한 줄일 수 있습니다.

 

정규화 진행 단계로는 다음과 같이 있습니다.

 

 

제1 정규화

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

 

예시)

예시 테이블

 

=> 여기서 조승연은 게임, 축구 2개의 취미를 가지고 있기 때문에 제1 정규형을 만족하지 못합니다.

 

위의 테이블에서 제 1 정규화를 진행하면

제1 정규화 진행

 

위와 같이 조승연의 게임, 축구가 2개의 필드로 분리되는 것을 확인할 수 있습니다.

 

 

제2 정규화

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

  • 여기서 완전 함수 종속이란 기본키의 부분집합이 결정자가 되어서는 안된다는 것을 의미합니다.

예시)

 

나이 테이블

 

취미 테이블

 

=> 위와 같이 이름PK 를 기준으로 [ 나이 테이블 ][ 취미 테이블 ]로 나누는 것을 의미합니다.

 

 

제3 정규화

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

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

수업 테이블

위와 같이 테이블이 존재하는 경우

[ 학생 번호, 강좌 이름 ] 과  [ 강좌 이름, 수강료 ] 테이블로 분해 해야 합니다.

수강 학생 테이블
수강료 테이블

 

 

BCNF ( Boyce-codd Normal Form ) 정규화

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

예를 들어 다음과 같은 강좌 수강 테이블이 존재합니다.

강좌 테이블

여기서 PK는 [ 학생 번호 ] , [ 강좌 이름 ] 입니다.

그리고 이 PK는 [교수]를 결정하고 있으며, [교수][강좌 이름]을 결정하고 있습니다.

 

위의 문제점은 [교수][강좌 이름]을 결정하지만, 후보키가 아니라는 점입니다.

 

그래서 위의 테이블을 [ 강좌 신청 ] 테이블과 [ 강좌 교수 ] 테이블로 분해하여 BNCF 정규화를 진행할 수 있습니다.

 

 

 

 

이번시간에는 데이터베이스의 정규화에 대해서 알아보는 시간을 가졌습니다.

 

부족한 점이 있다면 댓글 달아 주시면 감사하겠습니다.

 

 

 

[참고 자료]

https://learn.microsoft.com/ko-kr/office/troubleshoot/access/database-normalization-description

 

데이터베이스 정규화 설명 - Microsoft 365 Apps

데이터베이스를 정규화하는 방법과, 형식을 정규화하는 대신 사용할 수 있는 여러 가지 방법을 설명합니다. 데이터베이스 원칙을 이해하려면 데이터베이스 원칙을 마스터하거나 문서에 나와

learn.microsoft.com

 

https://superohinsung.tistory.com/111

 

[DataBase] 정규화(1NF, 2NF, 3NF, BCNF)

정규화(Normalization) 정규화란 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 구분하

superohinsung.tistory.com

https://mangkyu.tistory.com/110

 

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

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

mangkyu.tistory.com

 

반응형

'Database > MS-SQL' 카테고리의 다른 글

[MS-SQL] 인덱스 (INDEX)란?  (4) 2024.08.12
[SQL] WHERE 절의 IN 연산자  (0) 2024.08.01
JOIN  (0) 2024.07.11
SQL 개념 정리 (DDL, DML, DCL, TCL)  (0) 2024.07.04
와일드 카드를 이용한 SELECT  (0) 2024.06.20