소개
1. 정규화란?
정규화는 데이터베이스 관리 시스템을 개발할 때, 데이터의 중복을 최소화하고 데이터의 일관성을 높이는 과정을 말합니다. 정규화는 데이터베이스의 구조와 저장 방식에 대한 규칙을 따르는 것으로, 데이터베이스 설계자들이 적용하는 기법입니다.
2. 데이터베이스 설계에서 정규화의 중요성
정규화는 데이터베이스 설계에서 매우 중요한 요소입니다. 정규화를 통해 데이터베이스가 적은 양의 데이터로 구성되고, 데이터의 중복이 최소화되며, 데이터의 일관성이 높아집니다. 또한, 정규화를 통해 데이터베이스의 유지보수가 용이하게 되며, 데이터의 변경 사항이 발생할 경우 쉽게 대처할 수 있습니다.
정규화
1차 정규화(1NF)
- 정의: 1NF는 각 행(row)이 고유한 값을 가져야 하며, 각 열(column)은 유일한 값만 가지는 것을 의미합니다. 즉, 각 행은 구조화된 데이터의 집합으로 간주되며, 각 열은 행에 대한 특정 속성을 나타냅니다.
- 구현: 1NF를 구현하기 위해서는 각 행이 고유한 값을 가져야 하며, 각 열은 유일한 값만을 가져야 합니다. 또한, 각 열은 한 개의 데이터 타입만을 가져야 합니다.
<1NF를 따르지 않는 예시>
CustomerID | CustomerName | ContactNumber | Product |
1 | John Doe | 111-1111-1111 | apple, banana |
2 | Jane Doe | 666-6666-6666 | melon |
<1NF를 따르는 예시>
CustomerID | CustomerName | ContactNumber | Product |
1 | John Doe | 111-1111-1111 | apple |
1 | John Doe | 111-1111-1111 | banana |
2 | Jane Doe | 666-6666-6666 | melon |
위의 표는 각 행이 고유한 값을 가져야 하며, 각 열은 유일한 값만을 가져야 합니다. 또한, 각 열은 한 개의 데이터 타입만을 가져야 합니다.
2차 정규화(2NF)
- 정의: 2NF는 1NF의 기본 조건을 만족하면서, 각 행이 키 값에 대한 의존성이 없어야 하는 것을 의미합니다. 즉, 키 값에 대한 의존성을 제거하는 것이 2NF의 목적입니다.
- 구현: 2NF를 구현하기 위해서는 각 행이 키 값에 대한 의존성이 없어야 합니다. 이를 위해서 관계의 부분집합을 새로운 테이블로 분리할 수 있습니다.
<2NF를 따르지 않는 예시>
customer table + product table??
CustomerID | CustomerName | ContactNumber | Product | Prices |
1 | John Doe | 111-1111-1111 | apple | 1000 |
1 | John Doe | 222-2222-2222 | banana | 2000 |
2 | Jane Doe | 666-6666-6666 | melon | 3000 |
<2NF를 따르는 예시>
customer table
CustomerID | CustomerName | ContactNumber | Product |
1 | John Doe | 111-1111-1111 | apple |
1 | John Doe | 222-2222-2222 | banana |
2 | Jane Doe | 666-6666-6666 | melon |
product table
Product | Prices |
apple | 1000 |
banana | 2000 |
melon | 3000 |
3차 정규화(3NF)
- 정의: 3NF는 2NF의 기본 조건을 만족하면서, 키 값이 아닌 외래 키에 대한 의존성이 없어야 하는 것을 의미합니다. 즉, 외래 키에 대한 의존성을 제거하는 것이 3NF의 목적입니다.
- 구현: 3NF를 구현하기 위해서는 키 값이 아닌 외래 키에 대한 의존성이 없어야 합니다. 이를 위해서 관계의 부분집합을 새로운 테이블로 분리할 수 있습니다.
<3NF를 따르지 않는 예시>
ProductID | Product | Price | Category |
1 | apple | 1000 | fruit |
2 | jeans | 5000 | clothes |
3 | chair | 4000 | furiture |
<3NF를 따르는 예시>
ProductID | Product | Price |
1 | apple | 1000 |
2 | jeans | 5000 |
3 | chair | 4000 |
Product | Category |
apple | fruit |
jeans | clothes |
chair | furiture |
'Database' 카테고리의 다른 글
데이터베이스 트랜잭션(with ACID) (0) | 2023.02.09 |
---|---|
데이터베이스 vs 데이터 웨어하우스 : 주요 차이점 (0) | 2023.01.27 |
댓글