일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- vscode
- Database
- VIM
- 다이나믹 프로그래밍
- 그레이들
- 안드로이드
- 알고리즘
- BFS
- react
- Python
- 백준
- LeetCode
- db
- Algorithm
- git
- network
- 동적 계획법
- Javascript
- 프로그래머스
- Redux
- Data Structure
- Graph
- java
- frontend
- CS
- DP
- 자바
- TypeScript
- DFS
- 리트코드
- Today
- Total
늘 겸손하게
CS - Database - 정규화 (Normalization) 본문
정규화 (Normalization)
릴레이션 간 잘못된 종속 관계를 없애 이상 현상을 해결하고 데이터 중복을 줄여 메모리를 효율적으로 사용하기 위해 릴레이션을 분리하는 과정을 정규화라고 한다.
데이터의 중복을 줄이고, 무결성을 향상시키는 방법
가장 큰 목표는 테이블 간 중복된 데이터를 허용하지 않는 것이다.
중복된 데이터를 만들지 않으면, 무결성을 유지할 수 있고, DB 저장 용량 또한 효율적으로 관리할 수 있다.
정규화에는 여러가지 단계가 있지만, 대체적으로 1~3단계 정규화까지의 과정을 거친다.
정규형 원칙
같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조로 만들어야 하고, 자료의 중복성은 감소해야 하고, 독립적인 관계는 별개의 릴레이션으로 표현해야 하며, 각각의 릴레이션은 독립적인 표현이 가능해야 하는 것.
제 1정규화 (1NF)
테이블 칼럼이 원자값(하나의 값)을 갖도록 테이블을 분리시키는 것을 말한다.
릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되도록 정규화.
예로 아래와 같은 테이블이 존재한다고 하자.
이름 | 취미 |
박지성 | 축구, 게임 |
추신수 | 야구, 피구 |
이강호 | 독서, 산책 |
박지성, 추신수, 이강호 모두 여러 개의 취미를 가지고 있기 때문에 제 1정규형을 만족하지 못하고 있다.
이를 제1 정규화하여 분해하면 아래와 같이 분해 가능하다.
이름 | 취미 |
박지성 | 축구 |
박지성 | 게임 |
추신수 | 야구 |
추신수 | 피구 |
이강호 | 독서 |
이강호 | 산책 |
제 2정규화 (2NF)
제1 정규화를 진행한 테이블의 모든 컬럼이 완전 함수적 종속을 만족하도록 테이블을 분해.
조금 쉽게 말하면, 테이블에서 기본키가 복합키(키1, 키2)로 묶여있을 때, 그 키 중 하나의 키만으로 다른 컬럼을 결정지을 수 있으면 안된다.
: 기본키의 부분집합 키가 결정자가 되어선 안된다는 것
제 3정규화 (3NF)
2NF가 진행된 테이블에서 이행적 종속을 없애기 위해 테이블을 분리하는 것이다.
: 이행적 종속 : A -> B, B -> C면 A -> C가 성립된다
아래 두 가지 조건을 만족시켜야 한다.
- 릴레이션이 2NF에 만족한다
- 기본키가 아닌 속성들은 기본키에 의존한다.
'Computer Science > Database' 카테고리의 다른 글
CS - Database - Index(인덱스) (0) | 2022.10.10 |
---|---|
CS - Database - Anomaly (0) | 2022.10.10 |
CS - Database - SQL과 NOSQL의 차이 (0) | 2022.10.08 |
CS - Database - SQL Injection (0) | 2022.10.07 |
CS - Database - SQL JOIN (0) | 2022.10.07 |