728x90
데이터의 중복을 최소화하고 데이터 무결성을 유지하기 위해 데이터베이스 테이블을 구조화하는 과정
1차 정규화 (1NF: First Normal Form)
- 목표: 각 열이 원자값(Atomic Value)만을 가지도록 테이블을 구성합니다.
- 조건:
- 모든 열은 원자적 값을 가져야 하며, 한 셀에 여러 개의 값이 들어가면 안 됩니다.
- 테이블에 반복되는 그룹이 없어야 합니다.
- 예시:
- 학생 테이블이 학생의 여러 과목 점수를 하나의 셀에 입력한 경우(예: 과목 점수 90, 85, 78 등)는 1NF에 위배됩니다. 과목 점수는 각각 분리하여 입력해야 합니다.
-- 비정규화된 테이블 (반복 그룹 포함)
학생ID | 이름 | 과목 | 점수
---------------------------------
1 | 홍길동 | 수학, 영어 | 90, 85
-- 1NF 적용 테이블
학생ID | 이름 | 과목 | 점수
---------------------------
1 | 홍길동 | 수학 | 90
1 | 홍길동 | 영어 | 85
2차 정규화 (2NF: Second Normal Form)
- 목표: 부분 함수 종속을 제거하여, 기본 키에 종속된 속성만 테이블에 포함합니다.
- 조건:
- 1NF를 만족해야 합니다.
- 기본 키의 모든 구성 요소에 종속적이지 않은 속성은 별도의 테이블로 분리합니다.
- 부분 함수 종속(기본 키 일부에만 종속된 속성)이 발생하지 않도록 합니다.
- 예시:
- 학생ID와 과목을 복합 키로 하는 성적 테이블에서 학생의 이름이 포함된 경우, 이는 학생ID에만 종속적이므로 별도의 학생 테이블로 분리합니다.
-- 비정규화된 테이블 (부분 함수 종속 포함)
학생ID | 과목 | 이름 | 점수
----------------------------
1 | 수학 | 홍길동 | 90
1 | 영어 | 홍길동 | 85
-- 2NF 적용 테이블
-- 학생 테이블
학생ID | 이름
----------------
1 | 홍길동
-- 성적 테이블
학생ID | 과목 | 점수
---------------------
1 | 수학 | 90
1 | 영어 | 85
3차 정규화 (3NF: Third Normal Form)
- 목표: 이행 함수 종속을 제거하여, 기본 키가 아닌 다른 열에 종속되는 열이 없도록 합니다.
- 조건:
- 2NF를 만족해야 합니다.
- 기본 키가 아닌 열이 다른 기본 키가 아닌 열에 이행적으로 종속되지 않도록 합니다.
- 예시:
- 학생 테이블에 학과ID와 학과 이름이 포함되어 있는 경우, 학과 이름은 학과ID에만 종속적이므로 별도의 학과 테이블로 분리합니다.
-- 비정규화된 테이블 (이행 종속 포함)
학생ID | 이름 | 학과ID | 학과명
-------------------------------
1 | 홍길동 | 101 | 컴퓨터공학
2 | 이순신 | 102 | 기계공학
-- 3NF 적용 테이블
-- 학생 테이블
학생ID | 이름 | 학과ID
----------------------
1 | 홍길동 | 101
2 | 이순신 | 102
-- 학과 테이블
학과ID | 학과명
-----------------
101 | 컴퓨터공학
102 | 기계공학
요약
정규화 단계주요 목표조건
1차 정규화 (1NF) | 원자값만 가지도록 테이블 구성 | 모든 속성이 원자값을 가져야 함 |
2차 정규화 (2NF) | 부분 함수 종속 제거 | 1NF 만족, 기본 키의 모든 구성 요소에 종속적임 |
3차 정규화 (3NF) | 이행 함수 종속 제거 | 2NF 만족, 기본 키가 아닌 열이 이행 종속 제거 |
정규화를 통해 데이터의 중복을 최소화하고 데이터의 무결성을 높여, 데이터베이스의 일관성과 성능을 최적화할 수 있습니다.
728x90
'CS > 데이터베이스' 카테고리의 다른 글
[데이터베이스]DBMS, RDBMS, SQL, NoSQL 용어 정리 (1) | 2024.11.01 |
---|---|
[데이터베이스] 인덱스(Index) (0) | 2024.10.31 |
[데이터베이스] Commit과 Rollback (0) | 2024.10.31 |
[데이터베이스] 제약조건 PK, FK, UK (Primary, Foreign, Unique Key) (0) | 2024.10.31 |
[데이터베이스] 데이터 무결성(Data Integrity) (1) | 2024.10.31 |