반응형
들어가며
정규화?
- 데이터의 불필요한 중복(redundancy)을 제거하기 위해 테이블을 나누는 과정
- 삽입, 삭제, 수정시 발생할 수 있는 이상 현상(anamolies)을 방지할 수 있다.
- 제1 정규화, 제2 정규화, 제3 정규화가 있다
정규화를 하는 이유?
- 저장 공간 최소화
- 효과적인 검색 및 관리
- 데이터 무결성 유지
- 데이터 구조의 일관성 유지
제1 정규화(1NF)
설명
- 테이블에 있는 모든 속성의 도메인이 원자값(Atomic Value)만으로 되어있도록 정규화하는 것을 말한다
원자값으로 구성되지 않은 케이스1
- 한 컬럼에 같은 타입의 데이터를 여러개 가지는 경우
seq name email
1 john john@naver.com, john@gmail.com
2 tom tom@naver.com
원자값으로 구성되지 않은 케이스2
- 한 테이블에 같은 타입의 컬럼을 여러개 가지는 경우
seq name email1 email2
1 john john@naver.com john@gmail.com
2 tom tom@naver.com -
원자값으로 구성한 케이스
seq name
1 john
2 tom
seq email
1 john@naver.com
1 john@gmail.com
2 tom@naver.com
제2 정규화(2NF)
설명
- 부분적 함수 종속을 제거하는 정규화 과정을 말한다
- 기본키가 복합키인 경우 한 컬럼이 복합키 컬럼 중 하나에 종속하는 경우를 부분적 함수 종속이라 한다.
- 단일키를 기본키로 사용하여 제2 정규화를 할 수 있다
부분적 함수 종속 케이스
- 기본키는 model + comp인 복합키로 구성되어있다
- os는 복합키의 부분인 model에 종속적이다.
- os는 복합키의 부분인 comp에는 종속적이 아니다.
- 이와 같은 케이스를 부분적 함수 종속 케이스라고 한다.
model comp os
iPhone7 APPLE iOS
Galaxy7 SAMSUNG Android
부분적 함수 종속을 제거한 케이스
- 유일성을 만족하는 단일키를 기본키로 추가하여 부분적 함수 종속을 제거할 수 있다
- 의미 없는 키를 synthetic key라고 한다. (ex. auto_increment 시퀀스값)
- 의미 있는 키를 natural key라고 한다. (ex. 주민등록번호)
seq model comp os
1 iPhone7 APPLE iOS
2 Galaxy7 SAMSUNG Android
제3 정규화(3NF)
설명
- 이행적 함수 종속을 제거하는 정규화 과정이다.
- 이행적 함수 종속은 한 컬럼이 다른 컬럼에 종속적이고 해당 컬럼도 다른 컬럼에 종속되는 경우를 말한다.
이행적 함수 종속 케이스
- name, address, schoolName, schoolAddress 모두 id에 종속된다
- schoolAddress는 schoolName에 종속된다
id name address schoolName schoolAddress
1 john NewYork NewYork Univ NewYork Univ
이행적 함수 종속을 제거한 케이스
id name address schoolId
1 john NewYork 1
schoolId schoolName schoolAddress
1 NewYork Univ NewYork Univ
반응형
'Development > MySQL' 카테고리의 다른 글
[MySQL] Storage Engine (0) | 2020.12.29 |
---|---|
[MySQL] Transaction Isolation Level (0) | 2020.12.29 |
[MySQL] 쿼리 (0) | 2020.12.29 |
[MySQL] 설치하기 (0) | 2019.09.29 |
[Database] 옵티마이저 (0) | 2018.07.15 |