정규화 (Normalization)
- 논리 데이터 모델을 일관성이 있고 안정성 있는 자료구조로 만드는 단계입니다.
- 정규화 의미
# 엔터티에 데이터를 삽입, 수정, 삭제할 때 오류가 발생할 개연성을 가지고 있으며, 이를 변경 이상이라 하며 구체적으로 삽입 이상, 수정 이상, 삭제 이상 등이 있습니다.
# 변경 이상이 발생하는 데이터가 신뢰할 수 없는 값들로 채워지고 데이터의 일관성, 무결성을 해칩니다.
# 정규화 과정을 통해서 변경 이상의 엔터티를 정규화된 엔터티로 변환하게 됩니다.
입력 이상
- 릴레이션에 새 데이터를 삽입하기 위해 원치 않는 불필요한 데이터도 함께 삽입해야 하는 문제입니다.
아아디 | 이벤트 번호 | 당첨 여부 | 고객 이름 | 등급 |
apple | 01 | Y | 홍길동 | GOLD |
apple2 | 02 | N | 홍동길 | VIP |
melon | NULL | NULL | 임꺽정 | GOLD |
마지막 줄을 보면 원치 않는 데이터도 함께 삽입해야 하는 문제가 발생할 수 있습니다.
삭제 이상
- 릴레이션에서 데이터를 삭제하면 꼭 필요한 데이터까지 함께 삭제하여 데이터가 손실되는 연쇄 삭제 현상입니다.
아아디 | 이벤트 번호 | 당첨 여부 | 고객 이름 | 등급 |
apple | 01 | Y | 홍길동 | GOLD |
apple2 | 02 | N | 홍동길 | VIP |
마지막 줄에 삭제를 원하지 않는 데이터도 삭제되어 데이터 손실이 발생하게 됩니다.
갱신 이상
- 릴레이션의 중복된 데이터들 중 일부만 수정하여 데이터가 불일치하게 되는 모순이 발생하는 것 입니다.
아아디 | 이벤트 번호 | 당첨 여부 | 고객 이름 | 등급 |
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차정규화는 부분 함수적 종속적을 완전 함수적 종속적으로 바꿔주는 것 입니다.
- 새로운 실습은 해 봤습니다.
'Data Base > Data Modeling (DA#)' 카테고리의 다른 글
[Data Modeling] : 이력 관리 정의 (0) | 2021.11.12 |
---|---|
[Data Modeling] : M : M 관계 해소, BCNF (0) | 2021.11.12 |
[Data Modelling] : 3차 정규화 (0) | 2021.11.05 |
[Data Modelling] : 속성 정의 및 엔터티 상세화 (0) | 2021.10.29 |
01 . DA# Modeler5 테이블 만들고 PK 설정과 서브 타입 설정하기. (0) | 2021.09.03 |
댓글