정규화? - 1

Date:     Updated:

Categories:

Tags: , ,

❓ Normalization

  • 데이터베이스의 설계를 재구성하는 방법
  • 불필요한 데이터를 없앨 수 있으며, insert/update/delete 시 발생할 수 있는 이상현상을 방지할 수 있음.

❗ 정규화의 목적

  • 불필요한 데이터를 제거한다
  • 데이터 저장을 논리적으로 한다.
    • 테이블의 구성이 논리적이고 직관적이어야 한다는 뜻.

예를 들면 다음과 같은 테이블이 있을 때를 보자
|id|name|phonenum|favorate_food| |-|-|-|-| |1|원량|01012341234|카레| |2|투량|01023423423|보쌈| |3|삼량|01034534534|족발| |4|원량|01053524342|치킨|

이 테이블은 정규화가 되어있지 않다. 원량이라는 사람이 두 번 들어가있기 때문에 데이터 핸들링 시 이상현상이 발생함.

  1. Update 시 여러줄의 데이터를 갱신해야 한다. 이로인해 데이터의 불일치가 발생함.
  2. insert 시 좋아하는 음식이 없다면 NULL이 들어가게 됨.
  3. 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