정규화

 

정규화란?

 

- 데이터 처리에 있어 입력, 수정, 삭제의 이상 현상을 제거하여 안정적 처리(Consistency)를 보장하기 위한 방법
- 기본 원칙은 테이블에 중복된 데이터가 없도록 하는 것
- 다양한 유형의 검사를 통해 데이터 모델을 더욱 구조화하고 개선시켜 나가는 절차에 관련된 이론 

 

함수 종속성

 

결정자(Determinant, X, Primary Key) → 종속자(Dependent, Y, 나머지 속성들)

종속자는 근본적으로 결정자에 함수적으로 종속관게를 가지고 있음

ex) 주민등록번호 -> (이름, 출생지, 주소)

—> 이름, 출생지, 주소는 주민등록번호에 함수 종속성을 가지고 있음

 

정규화 단계
  • 제 1 정규화
    • 한 칼럼엔 한 개의 데이터만 (함수의 속성값을 갖는 속성을 분리)
    • PK(Primary Key)에 대한 Atomic Value 확보
    • 반복되어 발생하는 속성을 분리하여 별도의 엔터티로 구성함

💡 1차 정규화 하지 않으면?

- 입력 이상
: 하나의 주문에 주문한 제품이 늘어나면 계속 칼럼이 추가되어야 함(?)

- 수정 이상
: 마우스의 재고수량을 9702개에서 15000개로 변경하고자 한다면 데이터를 세 번 수정해야하며, 하나라도 수정되지 않으면 정확한 재고를 알 수가 없음

- 삭제 이상
: 제품번호 1201인 스피커를 주문한 CB231 주문을 삭제하려고 한다면 제품에 대한 정보까지 삭제됨(많은 정보가 담겨 있는 한 열이 통째로 사라지니까)

 

 

  • 제 2 정규화
    • Primary Key 중 일부에만 종속되는 칼럼 없이 (주 식별자 전체에 종속적이지 않은 속성을 별도의 엔터티로 분리)
    • 현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업
    • 부분 종속 속성 (partial dependency)를 제거한 테이블

여기서 2차 정규화 대상은 프로그램에만 종속적인 속성들

합치면 primary key 역할 가능할 듯 → composite primary key

종속된 것(비슷한것들)만 모아두었으니 열이 적어서 중복 데이터를 삭제할 수 있음 (관련 없는건 다른 테이블에 있으니 문제 없음)

💡 2 정규화 하지 않으면?

- 입력 이상
: 새로운 제품을 추가할 때 주문이 같이 되지 않으면 제품을 추가하는 것이 불가능(주문번호가 있어야 주문목록 테이블에 들어갈 수 있으니까)

- 수정 이상
: 하나의 제품에 대해서 재고수량을 변경하기 위해서는 주문 목록에서 해당 제품의 모든 재고수량을 수정해야 함

- 삭제 이상
: 주문 목록을 삭제할 경우 한번만 주문되었던 제품인 경우 해당 주문 목록도 같이 삭제됨

 

 

  • 제 3 정규화
    • composite primary key들 없을 때, 
    • 프라이머리 키가 아닌 칼럼에 종속되는 칼럼 없이 (속성에 종속적인 속성의 분리)
    • 일반 컬럼에만 종속된 컬럼은 다른 테이블로 빼기 (이전 종속 속성(Transitive Dependency)의 분리)

💡 3 정규화 하지 않으면?

- 입력 이상
: 새로운 고객을 등록하려고 해도 주문을 하지 않으면 등록할 수 없음 (주문 테이블에 추가되려면 주문번호가 필요하니까)

- 수정 이상
: 여러 번 주문한 고객의 사업자번호를 변경하려고 할 경우 여러 번 수정해야 함

- 삭제 이상
: 고객이 주문을 취소한 경우 주문정보만 삭제되는 것이 아니고 고객의 정보까지 같이 삭제됨