정규화란?
데이터베이스에서 정규화는 데이터를 조직화하고 중복을 최소화하기 위해 데이터베이스 테이블의 설계를 시스템적으로 개선하는 과정입니다.
정규화를 통해 데이터의 무결성과 일관성을 유지하면서 효율적인 데이터 관리가 가능해집니다.
정규화(Normalization)의 기본 목표
테이블 내에서 발생할 수 있는 데이터의 중복을 최소화하여 이상 현상을 방지하고, 데이터 무결성을 유지하는 것입니다.
제 1정규화
테이블(Relation)이 제 1정규형을 만족했다는 것은 아래 세 가지 조건를 만족했다는 것을 의미합니다.
- 어떤 Relation에 속한 모든 Domain이 원자값(atomic value)만으로 되어 있다.
- 모든 attribute에 반복되는 그룹(repeating group)이 나타나지 않는다.
- 기본 키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다.
1. 원자값이 아닌 데이터
제 1정규형의 첫 번째 조건은 모든 도메인이 원자값으로 구성되어야 한다는 것
- 원자값이 아닌 예 (수강 과목)
| 학생ID | 이름 | 수강 과목 |
| 1 | 홍길동 | 수학, 과학 |
| 2 | 이순신 | 역사, 미술, 음악 |
위 표에서 '수강 과목' 필드에 여러 과목이 쉼표로 구분되어 들어가 있어, 이 필드가 원자값이 아님.
2. 반복 그룹이 있는 데이터
제 1정규형의 두 번째 조건은 속성에 반복되는 그룹이 나타나지 않아야 한다는 것.
|
학생
|
이름
|
전화번호1
|
전화번호2
|
|
1
|
홍길동
|
010-1234-5678
|
010-8765-4321
|
|
2
|
이순신
|
010-1111-2222
|
|
위 표에서 '전화번호1', '전화번호2' 등 전화번호 관련 정보가 반복적으로 나타나므로 반복 그룹이 발생.
3. 기본 키 없는 데이터
제 1정규형의 세 번째 조건은 각 데이터 집합을 고유하게 식별할 수 있는 기본 키가 있어야 한다는 것입니다.
| ID | NAME | TEL |
| 1 | 홍길동 | 010-1111-1111, 010-2222-2222 |
| 2 | 이순신 | 010-3333-3333, 010-4444-4444 |
| 3 | 강감찬 | 010-5555-5555 |
위 표에서 동일한 이름과 주소, 전화번호를 가진 중복 레코드가 존재하므로 이 데이터 세트에는 유일하게 각 행을 식별할 수 있는 기본 키가 없음.
시나리오
원자성을 위한하고 있는 테이블 형태
| ID | NAME | TEL |
| 1 | 홍길동 | 010-1111-1111, 010-2222-2222 |
| 2 | 이순신 | 010-3333-3333, 010-4444-4444 |
| 3 | 강감찬 | 010-5555-5555 |
반복된 그룹 (전화번호) 이 생성된 형태
|
ID
|
NAME
|
TEL1
|
TEL2
|
|
1
|
홍길동
|
010-1111-1111
|
010-2222-2222
|
|
2
|
이순신
|
010-3333-3333
|
010-4444-4444
|
|
3
|
강감찬
|
010-5555-5555
|
|
ID가 더 이상 고유하게 식별할 수 있는 키(PK)가 아니란 것을 확인(고유하게 식별)
|
ID
|
NAME
|
TEL
|
|
1
|
홍길동
|
010-1111-1111
|
|
2
|
이순신
|
010-3333-3333
|
|
3
|
강감찬
|
010-5555-5555
|
|
1
|
홍길동
|
010-2222-2222
|
|
2
|
이순신
|
010-4444-4444
|
| ID | NAME |
| 1 | 홍길동 |
| 2 | 이순신 |
| 3 | 강감찬 |
| ID | USER_ID | TEL |
| 100 | 1 | 010-1111-1111 |
| 101 | 2 | 010-3333-3333 |
| 102 | 3 | 010-5555-5555 |
| 103 | 4 | 010-2222-2222 |
| 104 | 5 | 010-4444-4444 |
'MySQL' 카테고리의 다른 글
| 2024.07.08 MySQL 활용 제 3정규형(Third Normal Form, 3NF) - 12 (0) | 2024.07.08 |
|---|---|
| 2024.06.13 MySQL 활용 제 2정규화(Second Normal Form, 2NF) (0) | 2024.06.13 |
| 2024.06.13 MySQL활동 서브 쿼리란 (0) | 2024.06.13 |
| 2024.06.12 MySQL 활용 쇼핑몰과 카테고리 2단계 (0) | 2024.06.12 |
| 2024.06.12 MySQL 활용 쇼핑몰과 카테고리 1단계 (0) | 2024.06.12 |