1. DB 정규화(Normalization)란?
- 테이블 간에 중복된 데이터를 허용하지 않는다는 의미
- 데이터의 무결성(Integrity)을 유지
- 무결성이란 데이터의 일관성, 정확성을 유지하고 보증하는 것을 의미
- 데이터의 중복배제와 확장성을 위해 테이블을 잘게 나누는 것을 의미한다.**
2. 정규화 단계
- 테이블을 어떻게 재조정할지에 따라 정규화 단계가 나누어짐.
- 각 단계는 이 전 단계의 내용을 포함한다.
- 예를 들어, 제 2정규화 단계라면, 제 1정규화가 진행된 테이블을 가지고 제 2정규화를 진행한다.
3. 제 1정규화(1NF)
- 원자성
- 모든 속성은 반드시 하나의 값만 가져야 한다.
1) 제 1정규화 위배되는 경우
(1) 하나의 레코드가 다중 값을 가지는 경우
이름 | sns |
덱스터 | 인스타그램, 트위터 |
- sns 칼럼에 인스타그램, 트위터 등 여러 속성이 저장되어 있는 경우
(2) 특정 속성이 반복 그룹을 가지는 경우
이름 | sns1 | sns2 | sns3 |
덱스터 | 인스타그램 | 트위터 | 페이스북 |
- sns1, sns2 등 같은 속성이 반복되는 경우
2) 제 1정규화 작업 후
- 한 번에 하나의 속성만 가져야 한다.
account
id | 이름 | sns |
1 | 덱스터 | 인스타그램 |
2 | 덱스터 | 트위터 |
3 | 덱스터 | 페이스북 |
4. 제 2정규화(2NF)
- 부분 종속 제거
- 모든 속성은 반드시 모든 기본키에 종속되어야 한다.
- PK 일부에만 종속되어선 안된다.
1) 제 2정규화 위배되는 경우
order
id | 주문번호 | 음료명 | 주문수량 |
1 | 20200102 | 아메리카노 | 2 |
2 | 20200103 | 아메리카노 | 3 |
3 | 20200104 | 콜드브루 | 2 |
(1) 이 테이블의 문제점
[1] 입력 이상
- 주문이 발생하지 않다면 음료명 입력 불가능
[2] 수정 이상
- 음료명이 변경될 경우 해당 레코드 update
[3] 삭제 이상
- 음료 삭제 시 주문까지 삭제
2) 제 2정규화 작업 후
- FK를 사용해 1대다 연관관계를 만들어 해결할 수 있다.
- 즉, 음료는 pk에 종속되어야만 한다.**
order
id | 주문번호 | drink_id | 주문수량 |
1 | 20200102 | 1 | 2 |
2 | 20200103 | 1 | 3 |
3 | 20200104 | 2 | 2 |
drink
id | 음료 |
1 | 아메리카노 |
2 | 콜드브루 |
- 이렇게 작업하면 주문과 관계없이 음료 CRUD를 진행할 수 있다.
5. 제 3정규화(3NF)
- 이행 종속 제거
- 이행 종속이란, A -> B, B -> C 일 때, A -> C가 성립되는 것을 의미.
- 기본키가 아닌 모든 속성 간에는 서로 종속될 수 없다.
- 즉, PK에만 종속되어야 한다.
1) 제 3정규화 위배되는 경우
shop
id | 상점 | 과일 | 가격 |
1 | 참마트 | 바나나 | 3000 |
2 | 참마트 | 사과 | 4000 |
3 | 대마트 | 파인애플 | 5000 |
4 | 대마트 | 바나나 | 3000 |
- 이행 종속 제거의 의미는 참마트 -> 바나나, 바나나 -> 3000라고 참마트 -> 3000이 성립된다는 의미는 아니라는 것이다.
- 여기서 나타나는 문제점은 2정규화때 나타나는 문제점과 동일하다.
2) 제 3정규화 작업 후
- FK를 사용해 1대다 연관관계를 만들어 해결할 수 있다.
- 즉, 과일은 pk에 종속되어야만 한다.**
shop
id | 상점 | fruit_id |
1 | 참마트 | 1 |
2 | 참마트 | 2 |
3 | 대마트 | 3 |
4 | 대마트 | 1 |
fruit
id | 과일 | 가격 |
1 | 바나나 | 3000 |
2 | 사과 | 4000 |
3 | 파인애플 | 5000 |
reference
https://www.youtube.com/watch?v=pMcv0Zhh3J0
'Database > MySQL' 카테고리의 다른 글
Host 'host_name' is blocked because of many connection errors.Unblock with 'mysqladmin flush-hosts' (0) | 2022.11.17 |
---|---|
데이터베이스 반정규화(Denormalization) (0) | 2022.05.23 |
트랜잭션 특징 (0) | 2022.05.07 |
PK, FK 특징 (0) | 2022.05.07 |
mysql settings (0) | 2022.01.30 |