늘 겸손하게

CS - Database - 정규화 (Normalization) 본문

Computer Science/Database

CS - Database - 정규화 (Normalization)

besforyou999 2022. 10. 10. 22:57

정규화 (Normalization)

 

릴레이션 간 잘못된 종속 관계를 없애 이상 현상을 해결하고 데이터 중복을 줄여 메모리를 효율적으로 사용하기 위해 릴레이션을 분리하는 과정을 정규화라고 한다.

 

데이터의 중복을 줄이고, 무결성을 향상시키는 방법

 

가장 큰 목표는 테이블 간 중복된 데이터를 허용하지 않는 것이다.

 

중복된 데이터를 만들지 않으면, 무결성을 유지할 수 있고, DB 저장 용량 또한 효율적으로 관리할 수 있다.

 

정규화에는 여러가지 단계가 있지만, 대체적으로 1~3단계 정규화까지의 과정을 거친다.

 

 

정규형 원칙

 

같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조로 만들어야 하고, 자료의 중복성은 감소해야 하고, 독립적인 관계는 별개의 릴레이션으로 표현해야 하며, 각각의 릴레이션은 독립적인 표현이 가능해야 하는 것.

 

 

제 1정규화 (1NF)

 

테이블 칼럼이 원자값(하나의 값)을 갖도록 테이블을 분리시키는 것을 말한다.

 

릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되도록 정규화.

 

예로 아래와 같은 테이블이 존재한다고 하자.

 

이름 취미
박지성 축구, 게임
추신수 야구, 피구
이강호 독서, 산책

 

박지성, 추신수, 이강호 모두 여러 개의 취미를 가지고 있기 때문에 제 1정규형을 만족하지 못하고 있다.

 

이를 제1 정규화하여 분해하면 아래와 같이 분해 가능하다.

 

이름 취미
박지성 축구
박지성 게임
추신수 야구
추신수 피구
이강호 독서
이강호 산책

 

 

제 2정규화 (2NF)

 

제1 정규화를 진행한 테이블의 모든 컬럼이 완전 함수적 종속을 만족하도록 테이블을 분해.

 

조금 쉽게 말하면, 테이블에서 기본키가 복합키(키1, 키2)로 묶여있을 때, 그 키 중 하나의 키만으로 다른 컬럼을 결정지을 수 있으면 안된다.

 

: 기본키의 부분집합 키가 결정자가 되어선 안된다는 것

 

 

제 3정규화 (3NF)

 

2NF가 진행된 테이블에서 이행적 종속을 없애기 위해 테이블을 분리하는 것이다.

 

: 이행적 종속 : A -> B, B -> C면 A -> C가 성립된다

 

아래 두 가지 조건을 만족시켜야 한다.

  • 릴레이션이 2NF에 만족한다
  • 기본키가 아닌 속성들은 기본키에 의존한다.

 

 

'Computer Science > Database' 카테고리의 다른 글

CS - Database - Index(인덱스)  (0) 2022.10.10
CS - Database - Anomaly  (0) 2022.10.10
CS - Database - SQL과 NOSQL의 차이  (0) 2022.10.08
CS - Database - SQL Injection  (0) 2022.10.07
CS - Database - SQL JOIN  (0) 2022.10.07