데이터를 중복 저장하지않기 위해 분리하는 것입니다.
어떻게 하면 효율적으로 분리할 것인가 생각해 봐야합니다.

정규형의 종류에는 여러가지가 있지만, 실무에서는 제 3 정규형까지만 사용한다.
단계적으로 진행되야한다는 특징이 있다.
| 주문번호 | 날짜 | 이름 | 나이 | 주문 상품 | 
|---|---|---|---|---|
| P001 | 10/23 | 철수 | 13 | A001 레고 1개, A002 미니카 2개 | 
| P002 | 08/13 | 영희 | 15 | A003 인형 1개, A001 레고 2개 | 
| P003 | 09/07 | 훈이 | 12 | A003 인형 2개, A002 미니카 1개 | 
데이터를 수정하고 삭제할 때 문제가 생길 수 있습니다.
데이터를 찾아갈 때 불필요한 단계를 너무 많이 거치게 됩니다(비효율적)
엑셀 하나의 칸에는 하나의 값만 들어가도록 분리해 줍니다.
비정규화였던 표를 제 1 정규화의 룰대로 바꾸면
| 주문번호 | 날짜 | 이름 | 나이 | 상품번호 | 상품명 | 상품수량 | 
|---|---|---|---|---|---|---|
| P001 | 10/23 | 철수 | 13 | A001 | 레고 | 1개 | 
| P001 | 10/23 | 철수 | 13 | A002 | 미니카 | 2개 | 
| P002 | 08/13 | 영희 | 15 | A003 | 인형 | 1개 | 
| P002 | 08/13 | 영희 | 15 | A001 | 레고 | 2개 | 
| P003 | 09/07 | 훈이 | 12 | A003 | 인형 | 2개 | 
| P003 | 09/07 | 훈이 | 12 | A002 | 미니카 | 1개 | 
이런 상황에서는 만약 철수의 이름이 변경되었다고 하면, 2줄 모두 수정해 줘야 합니다.
한 줄 한 줄 모두 수정해야 하는 일이 발생하게 됨으로 비효율적입니다.
아래와 같이 테이블을 두개로 나누면 이를 개선할 수 있습니다.
[ 주문 ] 테이블
| 주문번호 | 날짜 | 이름 | 나이 | 
|---|---|---|---|
| P001 | 10/23 | 철수 | 13 | 
| P002 | 08/13 | 영희 | 15 | 
| P003 | 09/07 | 훈이 | 12 | 
[ 주문_상품 ] 테이블
| 주문번호 | 상품번호 | 상품명 | 상품수량 | 
|---|---|---|---|
| P001 | A001 | 레고 | 1개 | 
| P001 | A002 | 미니카 | 2개 | 
| P002 | A003 | 인형 | 1개 | 
| P002 | A001 | 레고 | 2개 | 
| P003 | A003 | 인형 | 2개 | 
| P003 | A002 | 미니카 | 1개 | 
Primary Key : 한 줄의 데이터를 구분할 수 있는 유일한 키
Composite Key : 데이터를 대표하는 키가 여러 개의 컬럼으로 구성된 것

주문 테이블은 날짜를 안다고 주문 번호를 알거나 이름을 알 수는 없습니다.
주문_상품 테이블 은 주문번호나 상품번호 한가지만 알아서는 어떤 상품을 주문했는지 알 수 없습니다.
주문번호와 상품번호 둘 다 알아야 합니다. 이를 복합키라고 합니다.
주문_상품 테이블 의 경우처럼 복합키로 구성되어 있을 때, 나머지 칼럼은 이 두 가지 모두에 종속되어야 합니다.
상품명은 복합키 중 일부에만 종속적입니다. 이런 컬럼을 분리시키는 것이 제 2 정규화 입니다.
[ 상품 ] 테이블
| 상품번호 | 상품명 | 
|---|---|
| A001 | 레고 | 
| A002 | 미니카 | 
| A003 | 인형 | 
[ 주문 ] 테이블
| 주문번호 | 날짜 | 고객번호 | 
|---|---|---|
| P001 | 10/23 | U001 | 
| P002 | 08/13 | U002 | 
| P003 | 09/07 | U003 | 
[ 고객 ] 테이블
| 고객번호 | 이름 | 나이 | 
|---|---|---|
| U001 | 철수 | 13 | 
| U002 | 영희 | 15 | 
| U003 | 훈이 | 12 | 
| 상품ID | 상품명 | 상품내용 | 상품가격 | 상품판매여부 | 카테고리 | 상품태그 | 상품판매자이름 | 상품판매자이메일 | 상품거래주소 | 상품거래상세주소 | 상품거래위도 | 상품거래경도 | 상품거래 | 
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| P001 | 마우스 | 좋은 마우스 | 1000 | FALSE | 가전 | 전자제품, 영등포마우스 | 철수 | chulsoo@naver.com | 영등포 | 영등포역 | 10.24 | 30.1 | 10시 | 
| P002 | 키보드 | 잘쳐지는 키보드 | 1500 | FALSE | 가전 | 굿키보드, 전자제품 | 영희 | hee@gmail.com | 잠실 | 잠실역 | 10.44 | 30.21 | 5시 | 
| P003 | 데이터베이스 | 데이터베이스책 | 2000 | FALSE | 도서 | 책 | 훈이 | hun@naver.com | 신도림 | 신도림역 | 10.33 | 30.66 | 7시 | 
| P004 | 운영체제 | 핵심운영체제 | 3000 | FALSE | 도서 | 책사랑 | 맹구 | mang@naver.com | 구로 | 구로역 | 10.37 | 30.99 | 3시 | 
위의 표를 제 3 정규화까지 거치면 아래의 표와 같습니다.
[ 상품 ] 테이블
| 상품ID | 상품명 | 상품내용 | 상품가격 | 상품판매여부 | 상품카테고리ID | 상품판매자ID | 상품거래위치ID | 
|---|---|---|---|---|---|---|---|
| P001 | 마우스 | 좋은 마우스 | 1000 | FALSE | C001 | U001 | L001 | 
| P002 | 키보드 | 잘쳐지는 키보드 | 1500 | FALSE | C001 | U002 | L002 | 
| P003 | 데이터베이스 | 데이터베이스책 | 2000 | FALSE | C002 | U003 | L003 | 
| P004 | 운영체제 | 핵심운영체제 | 3000 | FALSE | C002 | U004 | L004 | 
[상품 거래 위치] 테이블
| 상품거래위치ID | 상품거래주소 | 상품거래상세주소 | 상품거래위도 | 상품거래경도 | 상품거래예정시각 | 
|---|---|---|---|---|---|
| L001 | 영등포 | 영등포역 | 10.24 | 30.1 | 10시 | 
| L002 | 잠실 | 잠실역 | 10.44 | 30.21 | 5시 | 
| L003 | 신도림 | 신도림역 | 10.33 | 30.66 | 7시 | 
| L004 | 구로 | 구로역 | 10.37 | 30.99 | 3시 | 
[ 카테고리 ] 테이블
| 상품카테고리ID | 카테고리 | 
|---|---|
| C001 | 가전 | 
| C002 | 도서 | 
[상품 판매자] 테이블
| 상품판매자ID | 상품판매자이름 | 상품판매자이메일 | 
|---|---|---|
| U001 | 철수 | chulsoo@naver.com | 
| U002 | 영희 | hee@gmail.com | 
| U003 | 훈이 | hun@naver.com | 
| U004 | 맹구 | mang@naver.com | 
[상품 태그] 테이블
| 상품 태그ID | 상품 태그 | 
|---|---|
| T001 | 전자제품 | 
| T002 | 영등포마우스 | 
| T003 | 굿키보드 | 
| T004 | 책 | 
| T005 | 책사랑 | 
[ 상품_상품태그 ] 테이블
| 상품ID | 상품 태그ID | 
|---|---|
| P001 | T001 | 
| P001 | T002 | 
| P002 | T003 | 
| P002 | T001 | 
| P003 | T004 | 
| P004 | T005 | 
[상품 거래 위치] 테이블
| 상품거래위치ID | 상품거래주소 | 상품거래상세주소 | 상품거래위도 | 상품거래경도 | 상품거래예정시각 | 
|---|---|---|---|---|---|
| L001 | 영등포 | 영등포역 | 10.24 | 30.1 | 10시 | 
| L002 | 잠실 | 잠실역 | 10.44 | 30.21 | 5시 | 
| L003 | 신도림 | 신도림역 | 10.33 | 30.66 | 7시 | 
| L004 | 구로 | 구로역 | 10.37 | 30.99 | 3시 | 
[ 카테고리 ] 테이블
| 상품카테고리ID | 카테고리 | 
|---|---|
| C001 | 가전 | 
| C002 | 도서 | 
[상품 판매자] 테이블
| 상품판매자ID | 상품판매자이름 | 상품판매자이메일 | 
|---|---|---|
| U001 | 철수 | chulsoo@naver.com | 
| U002 | 영희 | hee@gmail.com | 
| U003 | 훈이 | hun@naver.com | 
| U004 | 맹구 | mang@naver.com | 
[상품 태그] 테이블
| 상품 태그ID | 상품 태그 | 
|---|---|
| T001 | 전자제품 | 
| T002 | 영등포마우스 | 
| T003 | 굿키보드 | 
| T004 | 책 | 
| T005 | 책사랑 | 
[ 상품_상품태그 ] 테이블
| 상품ID | 상품 태그ID | 
|---|---|
| P001 | T001 | 
| P001 | T002 | 
| P002 | T003 | 
| P002 | T001 | 
| P003 | T004 | 
| P004 | T005 | 

N : N 관계는 1 : N, N : 1 관계로 풀려야한다.
PK(주키), FK(외례키)
CHAR() - 문자
VARCHAR() - ()자 안에서 유동적으로 바뀜
출처 : 코드캠프