정규화? - 1
Categories: Database
Tags: CS, interview, Normalization
❓ Normalization
- 데이터베이스의 설계를 재구성하는 방법
- 불필요한 데이터를 없앨 수 있으며, insert/update/delete 시 발생할 수 있는
이상현상
을 방지할 수 있음.
❗ 정규화의 목적
- 불필요한 데이터를 제거한다
- 데이터 저장을 논리적으로 한다.
- 테이블의 구성이 논리적이고 직관적이어야 한다는 뜻.
예를 들면 다음과 같은 테이블이 있을 때를 보자
|id|name|phonenum|favorate_food|
|-|-|-|-|
|1|원량|01012341234|카레|
|2|투량|01023423423|보쌈|
|3|삼량|01034534534|족발|
|4|원량|01053524342|치킨|
이 테이블은 정규화가 되어있지 않다. 원량이라는 사람이 두 번 들어가있기 때문에 데이터 핸들링 시 이상현상이 발생함.
- Update 시 여러줄의 데이터를 갱신해야 한다. 이로인해 데이터의 불일치가 발생함.
- insert 시 좋아하는 음식이 없다면 NULL이 들어가게 됨.
- delete 시 좋아하는 음식이 없어지면 레코드가 지워지게 됨.
정규화는 1차 2차 3차 BCNF, 4차, 5차로 나누어 져 있는데, 실무적으로는 4,5차는 하지 않는다고 한다.
❗ 1차 정규화
1차 정규형에서는 각 행마다 컬럼의 값이 1개씩만 있어야 함. 이를 컬럼이 원자값
을 갖는다고 한다.
id | name | phonenum | favorate_food |
---|---|---|---|
1 | 원량 | 01012341234 | 카레,치킨 |
2 | 투량 | 01023423423 | 보쌈 |
3 | 삼량 | 01034534534 | 족발 |
위 테이블의 경우 원량이는 카레와 치킨 둘 다 좋아한다. 따라서 1차 정규형을 만족시키지 못한다.
위 정보를 표현하기 위해선 아래와 같이 행을 하나 더 만들어야 합니다.
1차 정규화를 함으로서 데이터의 redundacy가 더 증가하지만, 논리적 구성을 위해 희생합니다.
id | name | phonenum | favorate_food |
---|---|---|---|
1 | 원량 | 01012341234 | 카레 |
2 | 투량 | 01023423423 | 보쌈 |
3 | 삼량 | 01034534534 | 족발 |
4 | 원량 | 01053524342 | 치킨 |
❗ 2차 정규화
2차 정규형은 테이블의 모든 컬럼이 완전 함수적 종속을 만족하는 것이다.
기본키중 특정 컬럼에만 종속된 컬럼이 없어야 한다는 것이다.
작성중!
Leave a comment