
MySQL의 정규형(Normal Forms)은 데이터베이스 설계를 최적화하고 데이터의 무결성을 유지하기 위한 규칙입니다. 정규형을 따르면 데이터 중복을 최소화하고, 일관성과 안정성을 높일 수 있습니다. 예비 개발자를 위해 정규형의 개념과 종류를 설명하겠습니다.
정규형은 데이터베이스의 테이블을 구조화하는 규칙으로, 데이터를 중복 없이 저장하고, 데이터 무결성을 유지하며, 쿼리 성능을 최적화하기 위한 원칙입니다. 정규화 과정을 통해 데이터를 분해하여 이상(Anomalies)을 제거합니다.
| 학생ID | 이름 | 좋아하는 과목 |
|--------|----------|------------------|
| 1 | 철수 | 수학, 영어 |
| 2 | 영희 | 과학, 역사 || 학생ID | 이름 | 좋아하는 과목 |
|--------|----------|--------------|
| 1 | 철수 | 수학 |
| 1 | 철수 | 영어 |
| 2 | 영희 | 과학 |
| 2 | 영희 | 역사 |설명: 제1정규형을 만족하고, 부분적 종속성(Partial Dependency)이 없어야 합니다. 기본 키의 일부가 아닌 전체에 대해 종속성을 가져야 합니다.
엔티티의 모든 일반 속성은 반드시 모든 주식별자에 종속되어야 한다.
규칙:
예시:
| 학생ID | 과목 | 성적 | 학생이름 |
|--------|----------|------|---------|
| 1 | 수학 | A | 철수 |
| 1 | 영어 | B | 철수 |
| 2 | 과학 | A | 영희 |
| 2 | 역사 | B | 영희 | ```
| 학생ID | 학생이름 |
|--------|----------|
| 1 | 철수 |
| 2 | 영희 |
```
- 성적 테이블:
```
| 학생ID | 과목 | 성적 |
|--------|----------|------|
| 1 | 수학 | A |
| 1 | 영어 | B |
| 2 | 과학 | A |
| 2 | 역사 | B |
```분리했다고 해서 손실되는 정보가 있어서는 안된다.주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.
- 규칙:
- 제2정규형을 만족해야 합니다.
- 기본 키가 아닌 다른 열에 대해 종속성을 가져서는 안 됩니다.
- 예시:
- 제2정규형 테이블:
| 학생ID | 과목 | 성적 | 선생님ID | 선생님이름 | |--------|----------|------|----------|------------| | 1 | 수학 | A | 101 | 김선생님 | | 1 | 영어 | B | 102 | 이선생님 | | 2 | 과학 | A | 103 | 박선생님 | | 2 | 역사 | B | 104 | 최선생님 |- 제3정규형 테이블:
- 학생 테이블:
| 학생ID | 학생이름 | |--------|----------| | 1 | 철수 | | 2 | 영희 |- 성적 테이블:
| 학생ID | 과목 | 성적 | |--------|----------|------| | 1 | 수학 | A | | 1 | 영어 | B | | 2 | 과학 | A | | 2 | 역사 | B |- 선생님 테이블:
| 선생님ID | 선생님이름 | |----------|------------| | 101 | 김선생님 | | 102 | 이선생님 | | 103 | 박선생님 | | 104 | 최선생님 |
이처럼 정규형을 따르는 데이터베이스 설계는 데이터의 일관성, 무결성, 그리고 성능을 보장하여 안정적이고 효율적인 데이터 관리를 가능하게 합니다.