- 정규화란 데이터베이스의 데이터를 구성하는 프로세스입니다.
- 중복과 일관성 없는 종속성을 제거하여 데이터베이스를 보다 유연하게 만듭니다.
=> 중복된 데이터를 없애는 과정을 통해 무결성(Integrity)을 유지할 수 있으며,
데이터베이스의 저장 용량 또한 줄일 수 있습니다.
정규화 진행 단계로는 다음과 같이 있습니다.
제1 정규화
제1 정규화란 테이블의 컬럼이 원자값 (Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것입니다.
예시)
=> 여기서 조승연은 게임, 축구 2개의 취미를 가지고 있기 때문에 제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
https://superohinsung.tistory.com/111
https://mangkyu.tistory.com/110
'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 |