데이터베이스 정규화

이성혁·2024년 9월 12일

Database

목록 보기
22/24
post-thumbnail

1. 정규화란 무엇인가?

정규화(Normalization)는 데이터 중복을 최소화하고 데이터베이스의 일관성을 유지하기 위해 테이블을 정교화하는 과정입니다. 이 과정은 데이터베이스에서 발생할 수 있는 삽입, 갱신, 삭제 이상(Insertion, Update, Deletion Anomalies)을 방지하는 데 중요한 역할을 합니다.

정규화 과정은 여러 단계로 나뉘며, 각 단계는 특정 규칙을 준수해야 합니다. 이러한 규칙을 정규형(Normal Form)이라고 부릅니다. 첫 번째 정규형부터 시작하여 차례대로 각 단계를 만족시키며 데이터베이스를 정규화합니다. 3NF(Third Normal Form)까지 정규화되면 해당 테이블은 자동으로 1NF, 2NF도 만족하게 됩니다.

실무에서는 일반적으로 3NF 또는 BCNF(Boyce-Codd Normal Form)까지 정규화를 진행하며, 필요에 따라 4NF까지 적용하기도 합니다.

2. 정규화의 시작: 1NF에서 시작하기

정규화의 첫 번째 단계는 1NF(First Normal Form)입니다. 1NF는 모든 열의 값이 원자적(atomic)이어야 한다는 규칙을 요구합니다. 다음과 같은 예시 테이블을 살펴봅시다:

예시 테이블: 임직원의 월급 계좌 정보

어카운트 ID은행 이름계좌 번호등급월급 비율임직원 ID임직원 이름카드 ID
1국민은행123-456스타0.7101소니001, 002
2우리은행987-654실버0.3101소니003
3국민은행654-321로얄1.0102메쉬004, 005

위 테이블에서 카드 ID 열은 두 개의 값이 하나의 셀에 저장되어 있어 1NF를 위반합니다. 이를 해결하기 위해 카드 ID 값을 각각의 행으로 나눠 저장합니다. 이 작업을 통해 테이블은 1NF를 만족하게 됩니다.

1NF를 만족하도록 테이블 수정

어카운트 ID은행 이름계좌 번호등급월급 비율임직원 ID임직원 이름카드 ID
1국민은행123-456스타0.7101소니001
1국민은행123-456스타0.7101소니002
2우리은행987-654실버0.3101소니003
3국민은행654-321로얄1.0102메쉬004
3국민은행654-321로얄1.0102메쉬005

위와 같이 카드 ID를 개별 행으로 분리하면 1NF를 만족할 수 있습니다.

3. 2NF로 정규화하기

  • 2NF(Second Normal Form)는 1NF를 만족하면서 모든 비주요 속성(Non-Prime Attribute)완전 함수 종속(Fully Functionally Dependent)이어야 한다는 규칙을 요구합니다.

2NF에서 주의할 점은 부분 함수 종속(Partial Functional Dependency)을 제거하는 것입니다. 테이블에서 하나의 속성이 기본 키의 일부에만 종속되는 경우, 부분 함수 종속이 발생할 수 있습니다. 이를 제거하기 위해 테이블을 분리합니다.

예를 들어, 위의 테이블에서 임직원 ID어카운트 ID에 따라 결정되며, 카드 ID어카운트 ID와 별도로 추가 테이블로 분리합니다.

2NF를 만족하도록 테이블 분리

임직원 테이블

어카운트 ID은행 이름계좌 번호등급월급 비율임직원 ID임직원 이름
1국민은행123-456스타0.7101소니
2우리은행987-654실버0.3101소니
3국민은행654-321로얄1.0102메쉬

카드 테이블

어카운트 ID카드 ID
1001
1002
3004
3005

이와 같이 테이블을 분리하여 2NF를 만족할 수 있습니다.

4. 3NF로 정규화하기

  • 3NF(Third Normal Form)는 2NF를 만족하면서 모든 비주요 속성(Non-Prime Attribute)기본 키(Primary Key)에 대해 이행적 종속(Transitive Dependency)을 가지지 않도록 하는 규칙을 요구합니다.

이행적 종속은 A → B, B → C일 때 A → C인 관계를 의미합니다. 이 경우, B와 C 사이의 이행적 종속을 제거해야 합니다.

예를 들어, 등급은행 이름 사이의 이행적 종속이 존재하는 경우, 이들을 별도의 테이블로 분리합니다.

3NF를 만족하도록 테이블 분리

임직원 테이블

어카운트 ID계좌 번호월급 비율임직원 ID임직원 이름
1123-4560.7101소니
2987-6540.3101소니
3654-3211.0102메쉬

등급 테이블

등급은행 이름
스타국민은행
실버우리은행
로얄국민은행

이와 같이 등급은행 이름 사이의 이행적 종속을 제거하여 3NF를 만족할 수 있습니다.

결론

정규화는 데이터베이스 설계에서 매우 중요한 과정입니다. 이를 통해 데이터의 중복을 최소화하고 데이터베이스의 일관성을 유지할 수 있습니다. 1NF에서 시작하여 3NF 또는 BCNF까지 정규화를 진행하면, 대부분의 경우 데이터베이스가 효율적이고 안정적인 구조를 가지게 됩니다.


출처

https://www.youtube.com/watch?v=aL0XXc1yGPs&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe

profile
항상 배우는 자세로 🪴

0개의 댓글