728x90
반응형
정규화(Normalization)는 데이터베이스 설계에서 데이터 중복을 최소화하고 데이터 무결성을 보장하기 위한 과정입니다. 이 과정은 여러 단계의 정규형(Normal Forms)으로 나뉘며, 각 단계는 특정한 데이터 종속성 문제를 해결합니다. 정규화는 주로 함수적 종속성(Functional Dependency)을 기반으로 하여 테이블을 재구조화하는 방식으로 이루어집니다.
정규화는 데이터베이스에서 데이터를 깔끔하게 정리하는 방법이다. 이렇게 깔끔하게 정리하면, 중복된 데이터를 줄이고, 잘못된 정보가 들어가는 것을 막을 수 있다.
1. 제1정규형 (1NF: First Normal Form)
- 특징: 테이블이 제1정규형을 만족하려면, 모든 속성 값이 원자값(Atomic Value)이어야 하며, 반복 그룹(Repeating Group)이 존재해서는 안 됩니다. 즉, 각 필드는 하나의 단일 값을 가져야 하며, 다중 값을 허용하지 않습니다.
- 목표: 테이블에서 다중값 속성이나 배열 같은 구조를 제거하여, 모든 데이터가 원자 단위로 분리되도록 합니다.
- 예시: 학생 테이블에서 한 학생이 여러 과목을 듣는 경우, 각 과목을 별도의 행으로 나누어 저장합니다.
1정규형은 테이블 안의 각 칸에 하나의 값만 있어야된다. 여러 개의 값이 한 칸에 들어가면 안돼! 1필드 = 1값
2. 제2정규형 (2NF: Second Normal Form)
- 특징: 제2정규형은 제1정규형을 만족하면서, 부분 함수 종속성(Partial Dependency)이 제거된 상태입니다. 부분 함수 종속성이란, 복합 기본 키를 사용하는 경우 비기본 키 속성이 기본 키의 일부에만 의존하는 상황을 말합니다.
- 목표: 복합 기본 키의 일부에만 의존하는 속성을 분리하여, 모든 비기본 키 속성이 전체 기본 키에 완전히 의존하도록 만듭니다.
- 예시: "학생-과목" 테이블에서 학생 이름이 학번에만 의존하고 과목에는 의존하지 않는다면, 이를 별도의 "학생" 테이블로 분리합니다.
부분적으로 의존하는 정보를 없애는 정규형, 연결된 엔티티(객체)가 서로 의존하지 않는 속성이 있다면 따로 만들면 됨
부분 함수적 종속이란 기본키가 전체가 아니라, 기본키(PK) 일부에 대해 종속될 때를 말함
ex) 수강기록 테이블에서 학생번호와 과목이 PK라고 가정할 때, 과모겡 의해서도 교수가 결정되면 부분 함수적 종속 관계

위와 같이 수강기록 엔티티(객체)가 있다고 할때, 학생번호, 과목 속성이 PK라고 설정되어있다. 강사의 속성은 과목에 의해 결정됨, 학생번호와는 상관이 없음. 강사 속성은 학생번호와는 상관없이 없고 과목과 관계만 있다. 강사는 PK 중 에 일부에 의해 결정된다. 이때 과목과 강사를 따로 테이블로 구성하여 부분 함수 종속을 제거한다! 라고 나는 이해함
유튜브 "홍쌤의 데이터랩"을 참고함 (https://www.youtube.com/watch?v=rdfHFnqVoRw&list=PLbflMVhwy2jOoDIm7kVgt1_sYDJm_oBaD&index=4) 26:47초
3. 제3정규형 (3NF: Third Normal Form)
- 특징: 제3정규형은 제2정규형을 만족하면서, 이행적 종속성(Transitive Dependency)이 제거된 상태입니다. 이행적 종속성이란 비기본 키 속성이 다른 비기본 키 속성에 의존하는 상황을 말합니다.
- 목표: 비기본 키 간의 종속성을 제거하여, 모든 비기본 키 속성이 오직 기본 키에만 직접적으로 의존하도록 합니다.
- 예시: "학생-수업-교사" 테이블에서 교사가 수업에 의존하고 수업이 학생에 의존한다면, 이를 각각 "학생", "수업", "교사" 테이블로 분리합니다.
다른 정보에 의존하는 정보가 없어야 한다. 만약 객체들이 있고 그 중 "교사 이름" 속성은 "수업" 객체와 관련이 없고 "교사"와 관련이 있다는 사실을 알 수 있다. (현실적 문제 반영), 그렇다면 "교사" 테이블을 따로 만들어서 교사 정보를 관리하는 것이다.
이행적 종속성이란 A->B이고 B->C 관계가 성립할때, A->C가 성립되는 것을 말함, 이 때, (A,B)와 (B,C)로 분리하는 것이 제3 정규화
4. 보이스-코드 정규형 (BCNF: Boyce-Codd Normal Form)
- 특징: BCNF는 제3정규형의 확장으로, 모든 결정자(Determinant)가 후보 키(Candidate Key)여야 합니다. 즉, 후보 키가 아닌 속성이 다른 속성을 결정하는 일이 없어야 합니다.
- 목표: 후보 키가 아닌 속성이 다른 속성을 결정하는 문제를 해결하여 더 강력한 형태의 정규화를 달성합니다.
- 예시: "교실-강사-수업" 테이블에서 강사가 교실을 결정한다면, 이를 별도의 테이블로 분리하여 BCNF를 만족시킵니다.
제3정규형을 만족(종속 FREE)하면서 모든 중요한 정보(결정자)가 제대로 사용되고 있는지 확인하는 과정
5. 제4정규형 (4NF: Fourth Normal Form)
- 특징: BCNF를 만족하면서도 다치 종속성(Multivalued Dependency)이 없어야 합니다. 다치 종속성이란 한 속성이 여러 값을 가질 때 이 값들이 서로 독립적이지 않은 상황을 말합니다.
- 목표: 다치 종속성을 제거하여 데이터를 더 세밀하게 분리하고 중복을 최소화합니다.
- 예시: 한 학생이 여러 과목을 듣고 여러 동아리에 가입할 수 있다면, 이를 각각 "학생-과목", "학생-동아리" 테이블로 분리합니다.
하나의 정보가 여러 값을 가질 때, 그 값들이 서로 독립적이어야 한다.
6. 제5정규형 (5NF: Fifth Normal Form)
- 특징: 제5정규형은 4NF를 만족하면서 조인 종속성(Join Dependency)이 없어야 합니다. 즉, 테이블을 다시 조인했을 때 원래의 데이터를 잃지 않아야 합니다.
- 목표: 조인 종속성을 제거하여 데이터가 완전히 독립적으로 관리되도록 합니다.
- 예시: 여러 엔터티 간의 관계를 나타내는 복잡한 테이블에서 불필요한 중복을 제거하여 각각의 관계를 독립적으로 관리합니다.
모든 정보를 완적히 독립적으로 관리할 수 있도록 하는 최종 완성
---
요약
원(자성)-부(분 함수 제거)-이(행 종속 제거)-후(보 키 all)-다(치 종속 제거)-조(인 종속 제거)
| 1NF = 모든 필드가 원자값이어야 함 : 중복된 데이터와 여러 값을 가진 필드 제거
| 2NF = 부분 함수 종속성 제거 : 기본 키의 일부에만 의존하는 속성 제거
| 3NF = 이행적 종속성 제거 : 비기본 키 간의 종속성 제거
| BCNF = 모든 결정자가 후보 키여야 함 : 후보 키가 아닌 속성들이 결정자가 되지 않도록
| 4NF = 다치 종속성 제거 : 다치 종속성을 가진 데이터를 분리
| 5NF = 조인 종속성 제거 : 조인으로 인해 발생하는 중복 데이터 제거
1단계: 각 칸에는 하나의 값
2단계: 일부만 관련된 정보는 따로 떼어내서 관리
3단계: 다른 정보에 의존하는 것도 따로 떼어내서 관리
BCNS: 모든 중요한 정보가 제대로 쓰기고 있는지 확인
4단계: 여러 값을 가질 때도 깔끔하게 나누어서 저장
5단계: 모든 정보를 완전히 독립적으로 관리
Citations:
[1] https://www.geeksforgeeks.org/normalization-process-in-dbms/
[2] https://www.knack.com/blog/what-is-data-normalization/
[3] https://www.simplilearn.com/tutorials/sql-tutorial/what-is-normalization-in-sql
[4] https://www.pingcap.com/article/introduction-of-database-normalization-with-detailed-examples/
[5] https://datasciencehorizons.com/database-normalization-a-practical-guide/
반응형
'IT > SQLD' 카테고리의 다른 글
SQLD 노랭이 [SQL 구조] 핵심정리 (0) | 2024.11.11 |
---|---|
SQLD 노랭이 [관계형 데이터베이스 개념] 핵심정리 (0) | 2024.11.11 |
SQLD 노랭이 [식별자의 종류/특징/분류] (2) | 2024.11.08 |
SQLD 노랭이 [관계의 표기법] (0) | 2024.11.08 |
SQLD 노랭이 [도메인] (1) | 2024.11.08 |