본문 바로가기
Data Base/Data Modeling (DA#)

[Data Modelling] : 정규화 정의 및 제1정규화, 제2정규화

by 오주현 2021. 10. 29.
반응형
정규화 (Normalization)

- 논리 데이터 모델을 일관성이 있고 안정성 있는 자료구조로 만드는 단계입니다.

 

- 정규화 의미

# 엔터티에 데이터를 삽입, 수정, 삭제할 때 오류가 발생할 개연성을 가지고 있으며, 이를 변경 이상이라 하며 구체적으로 삽입 이상, 수정 이상, 삭제 이상 등이 있습니다.

# 변경 이상이 발생하는 데이터가 신뢰할 수 없는 값들로 채워지고 데이터의 일관성, 무결성을 해칩니다.

# 정규화 과정을 통해서 변경 이상의 엔터티를 정규화된 엔터티로 변환하게 됩니다.

 

입력 이상

- 릴레이션에 새 데이터를 삽입하기 위해 원치 않는 불필요한 데이터도 함께 삽입해야 하는 문제입니다.

 

아아디 이벤트 번호 당첨 여부 고객 이름 등급
apple 01 Y 홍길동 GOLD
apple2 02 N 홍동길 VIP
melon NULL NULL 임꺽정 GOLD

마지막 줄을 보면 원치 않는 데이터도 함께 삽입해야 하는 문제가 발생할 수 있습니다.

 

삭제 이상

- 릴레이션에서 데이터를 삭제하면 꼭 필요한 데이터까지 함께 삭제하여 데이터가 손실되는 연쇄 삭제 현상입니다.

아아디 이벤트 번호 당첨 여부 고객 이름 등급
apple 01 Y 홍길동 GOLD
apple2 02 N 홍동길 VIP
melon NULL NULL 임꺽정 GOLD

마지막 줄에 삭제를 원하지 않는 데이터도 삭제되어 데이터 손실이 발생하게 됩니다.

 

갱신 이상

- 릴레이션의 중복된 데이터들 중 일부만 수정하여 데이터가 불일치하게 되는 모순이 발생하는 것 입니다.

아아디 이벤트 번호 당첨 여부 고객 이름 등급
apple 01 Y 홍길동 GOLD
apple2 02 N 홍동길 VIP
melon NULL NULL 임꺽정 GOLD

 

정규화의 장점

- 중복값이 줄어듭니다.

# 정규화의 최대 성과는 칼럼 간, 레코드 간, 테이블 간에 중복되는 데이터들을 최소화 하는 것 입니다.

 

-  NULL 값이 줄어듭니다.

# 전체적으로 NULL 값의 사용이 줄어들게 됩니다.

 

- 복잡한 코드로 데이터 모델을 보완할 필요가 없습니다.

# 중복된 값이 적고, 그 부모가 누구인지 명시가 되어 있다면, 데이터의 무결성을 지키기 위한 복잡한 변환 과정과 조인 질의, NULL 값 처리들이 필요가 없어집니다.

 

- 새로운 요구 사항의 발견 과정을 돕습니다.

# 업무 담당자와의 협의를 통해서 현재뿐만아니라 미래까지도 고려한 요구 사항의 발견 과정에서 많은 엔터티 혹은 속성들이 태어나게 됩니다.

 

- 업무 규칙의 정밀한 포착을 보증합니다.

 # 체계화되고, 규칙의 Value화에도 도움을 주게 됩니다.

 

- 데이터 구조의 안정성을 최대화합니다.

# 중복된 값이 최소화되고 모든 정보들이 자기가 있어야 할 자리에 존재하게 되기 때문에 향후 발생하게 될 모델 변화에도 유연하게 대처할 수 있습니다.

 

정규화 과정

- 정규화는 1차 정규화부터 BCNF(Boyce-Codd Normal Form, 약 3.5차)를 포함한 5차 정규화까지 구성됩니다.

- 일반적으로 중복이 최소로 발생하는 제 3 정규화까지 진행합니다.

 

- 1차 정규화

# 모든 속성은 반드시 하나의 값을 가져야 합니다. 즉, 반복되는 형태가 있으면 안 되고 동일한 형식이어야 합니다.

# 레코드들은 서로 식별 가능해야 합니다. ( 식별자가 있습니다. )

# 각 속성들은 유일한 이름을 가져야 합니다.

# 속성의 원자성 확보 및 다중값 속성을 분리합니다.

- 개념 데이터 모델링은 이렇게 만들면 됩니다.

- 카드번호, 카드명, 유효기간을 선택해서 옆에 공백으로 드래그해 줍니다.

- 자식 식별자를 선택하고 확인을 눌러주면 됩니다.

- 실질 식별자를 제거해서 UID BAR를 제거해 줍니다.

- 개념 데이터 모델로 제 1정규화를 만들어 줬습니다.

 

- 제 1정규형 사원1 엔터티를 제 1정규화 한 실습입니다.

 

- 제 1정규화 추가 실습 내용 입니다.

 

- 2차 정규화

# 식별자가 아닌 모든 속성들은 식별자 전체 속성에 완전 종속되어야 합니다.

# 기본키가 아닌 모든 컬럼들이 기본키에 종속적이어야 2차 정규형을 만족할 수 있습니다.

# 부분 함수적 종속적이다. 라고 합니다.

- 재고수량과 창고명, 창고주소는 창고번호에만 종속되고 제품번호에는 종속되지 않는다. 떄문에 2차 정규형을 위반하고 있는 것 입니다.

- 부분적으로 종속된 것은 상위 엔터티를 만들고 UID BAR를 둬서 종속을 받으면 됩니다.

- 컨트롤키를 사용하여 창고번호, 창고명, 창고주소를 떼어내고 종속 시켜서 제 2정규형에 만족하게 바꾸어 줬습니다.

- 제2차정규화는 부분 함수적 종속적을 완전 함수적 종속적으로 바꿔주는 것 입니다.

- 새로운 실습은 해 봤습니다.

 

 

반응형

댓글