728x90
반응형
정규화(Normalization)는 관계형 데이터베이스에서 데이터를 구조화하는 과정으로, 데이터 중복을 최소화하고 데이터 무결성을 유지하는 데 목적이 있다. 정규화는 여러 단계로 나뉘며, 각 단계는 특정 규칙을 따른다. 주요 정규형(Normal Form)은 다음과 같다:
- 제1정규형(1NF): 모든 열이 원자값(Atomic Value)을 가져야 한다.
- 제2정규형(2NF): 제1정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속(Full Functional Dependency)이어야 한다.
- 제3정규형(3NF): 제2정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속(Transitive Dependency)이 없어야 한다.
- BCNF(Boyce-Codd Normal Form): 제3정규형을 만족하고, 모든 결정자가 후보키(Candidate Key)여야 한다.
- 원자값(Atomic Value): 더 이상 분해할 수 없는 단일 값이다. 예를 들어, "홍길동"은 원자값이지만, "홍길동, 이순신"은 원자값이 아니다.
- 기본키(Primary Key): 테이블에서 각 행을 고유하게 식별할 수 있는 하나 이상의 열이다. 예를 들어, 학생 테이블에서 "학생ID"는 각 학생을 고유하게 식별할 수 있는 기본키가 될 수 있다.
- 함수 종속(Functional Dependency): 한 열의 값이 다른 열의 값에 의해 결정되는 관계입니다. 예를 들어, "학생ID"가 "학생이름"을 결정한다면, "학생이름"은 "학생ID"에 함수 종속적이다.
- 후보키(Candidate Key): 테이블에서 각 행을 고유하게 식별할 수 있는 모든 가능한 키이다. 기본키는 후보키 중 하나를 선택한 것이고, 예를 들어, "학생ID"와 "주민등록번호"가 모두 후보키가 될 수 있다.
예제
다음은 학생과 강의 데이터를 정규화하는 예제이다.
비정규화된 테이블
학생ID | 학생이름 | 강의ID | 강의이름 | 교수이름 |
---|---|---|---|---|
1 | 홍길동 | 101 | 수학 | 김교수 |
2 | 이순신 | 102 | 영어 | 박교수 |
1 | 홍길동 | 103 | 과학 | 이교수 |
제1정규형(1NF)
학생ID | 학생이름 | 강의ID |
---|---|---|
1 | 홍길동 | 101 |
2 | 이순신 | 102 |
1 | 홍길동 | 103 |
강의ID | 강의이름 | 교수이름 |
---|---|---|
101 | 수학 | 김교수 |
102 | 영어 | 박교수 |
103 | 과학 | 이교수 |
제2정규형(2NF)
학생ID | 학생이름 |
---|---|
1 | 홍길동 |
2 | 이순신 |
강의ID | 강의이름 | 교수이름 |
---|---|---|
101 | 수학 | 김교수 |
102 | 영어 | 박교수 |
103 | 과학 | 이교수 |
학생ID | 강의ID |
---|---|
1 | 101 |
2 | 102 |
1 | 103 |
제3정규형(3NF)
이미 제2정규형에서 제3정규형을 만족하고 있다.
BCNF
이미 제3정규형에서 BCNF를 만족하고 있다.
- 끝 -
728x90
반응형
'DB > Postgresql' 카테고리의 다른 글
샤딩에서 데이터 동기화 메커니즘 및 장애조치 (0) | 2024.08.21 |
---|---|
샤딩에서 분산트랙잭션 관리 (0) | 2024.08.21 |
샤딩에서의 SAGA 패턴 (0) | 2024.08.21 |
샤딩을 구현할 때 고려해야할 사항 정리 (0) | 2024.08.21 |
샤딩에서 데이터 일관성 모델: 강한 일관성, 약한 일관성, CAP 이론 (0) | 2024.08.21 |