MySQL - 정규화

yeeun lee·2020년 5월 24일
3

정규화 : 테이블을 올바른 형태로 만들고 분리하는 것.

보통 모델링을 할 때, 뭔가 원칙을 가지고 하게 되기 보다는 굵직한 부분을 잡은 뒤(user, product와 같이) 그 줄기를 바탕으로 테이블을 만들게 된다.

정규화 원칙을 알고 그 기준으로 쪼개면 더 좋을 것 같아서 책 내용을 기반으로 조금 더 정리해보았다. 보통 제5 정규형까지 있지만, 대부분의 시스템에서는 제3 정규형까지를 채택한다고 한다.

제1 정규형

반복되는 데이터를 가로(열방향)가 아닌 세로(행 방향)으로 늘리는 것.

  1. 하나의 셀에 하나의 데이터만 들어가도록 한다.
  2. 테이블 분할: 중복이 없도록 나눠준다.
  3. 기본키 지정: 테이블 분리 후 연결할 key 값을 지정한다.

예를 들어 하나의 테이블에 사람에 대한 정보, 사람이 주문한 정보가 같이 있다고 하자. 우선 주문 상품 부분을 정보 한개, 셀 한개로 넣을 수 있도록 쪼개준다.

이 때 한 사람이 주문을 여러개 하게 되면 같은 내용이 중복되게 된다. 주문 상품 열을 여러 개로 쪼개준다.

제2 정규형

기본 키에서 중복되는 부분을 찾아내 테이블로 분할해 나가는 것이다.

행으로 중복되는 부분을 찾아내(부분 함수 종속성을 찾아내) 테이블을 분할하는 것
*함수 종속성: 키 값을 이용해 데이터를 특정지을 수 있는 것

위에서 상품 코드에 따른 상품명이 중복되고 있으므로, 주문 테이블에서는 코드만 남겨두고 상품명이 포함된 테이블을 따로 생성한다.

제3 정규형

기본 키외에 중복되는 부분을 찾아내는 것이다. 위에서 주문 번호에 따른 고객 정보가 중복되고 있기 때문에, 고객 번호를 따로 만들어줌으로써 중복을 방지한다.

profile
이사간 블로그: yenilee.github.io

1개의 댓글

comment-user-thumbnail
2020년 5월 24일

잘보고갑니다😁 고마워요

답글 달기