● 정규화
- 삽입/수정/삭제의 이상현상을 제거
- 데이터의 중복 최소화
- 대부분 3차 정규화까지만 진행
● 1차 정규화(1NF)
- 하나의 컬럼에 값이 1개씩만 있어야 한다.
- 반복적인 컬럼 값이 나타나는 경우
(ex)
1. 반복적인 컬럼 값(검색이 힘들다)
2. 정규화 진행
● 2차 정규화(2NF)
- 테이블의 모든 컬럼이 서로 관계가 있어야 한다.
- 모든 컬럼이 서로 관계가 없는 경우
(ex)
1. 서로 관계가 없는 컬럼
2. 정규화 진행
● 3차 정규화(3NF)
(ex)
1. 중복 데이터 발생 가능
- 우편번호로 시, 구, 동을 알 수 있다.
- 중복된 데이터가 생길 가능성이 있다.
2. 정규화 진행
※ 데이터베이스에서 정규화가 필요한 이유
- 데이터베이스를 잘못 설계하면 불필요한 데이터 중복으로 인해 공간이 낭비된다.
이러한 현상을 "이상(Anomaly)"이라고 한다.
이상현상
● 이상 현상의 종류
1. 삽입 이상
- 새 데이터를 삽입하기 위해 불필요한 데이터도 삽입해야 하는 문제
2. 갱신 이상
- 중복되는 행 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
3. 삭제 이상
- 행을 삭제하면 필요한 데이터까지 함께 삭제되는 문제
● 이상 현상 발생 이유
- 테이블이 정규화가 되어 있지 않기 때문이다.
- 정규화를 진행하기 위해서는 각 컬럼간의 관련성을 파악해야 하고,
이 관련성을 "함수적 종속성(Functional Dependency)" 이라고 한다.
- 하나의 테이블에서는 하나의 함수적 종속성만 존재하도록 정규화한다.
(ex)
※ 이상 현상 예제
1. 삽입 이상
- 담당 프로젝트가 정해지지 않은 사원이 있다면,
프로젝트코드에 NULL을 작성할 수 없으므로 이 사원은 테이블에 추가될 수 없다.
따라서 '미정' 이라는 프로젝트 코드를 따로 만들어서 삽입해야 한다.
2. 갱신 이상
- 한 명의 사원은 반드시 하나의 부서에만 속할 수 있다.
만약 "홍길동"이 보안팀으로 부서를 옮길 시 3개 모두 갱신해주지 않는다면
개발팀인지 보안팀인지 알 수 없다.
3. 삭제 이상
- "이순신"이 담당한 프로젝트가 드랍된다면 이순신 행을 모두 삭제하게 된다.
따라서 프로젝트에서 드랍되면 정보를 모두 드랍하게 된다.