데이터의 중복성으로 인해 릴레이션을 조작할 때 발생하는 비합리적인 현상
릴레이션 : 행(Row)과 열(Column)로 구성된 테이블
데이터베이스 이상현상
이상현상 | 설명 |
---|---|
삽입 이상 | 정보 저장시 해당 정보의 불필요한 세부정보를 입력해야 하는 경우 |
삭제 이상 | 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우 |
갱신 이상 | 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우 |
단계 | 조건 |
---|---|
1정규형(1NF) | 원자값으로 구성 |
2정규형(2NF) | 부분 함수 종속 제거 (완전 함수적 종속 관계) |
3정규형(3NF) | 이행함수 종속 제거 |
보이스-코드 정규형(BCNF) | 결정자 후보키가 아닌 함수 종속 제거 |
4정규형(4NF) | 다치(다중 값) 종속 제거 |
5정규형(5NF) | 조인 종속 제거 |
1차 정규화(1NF)
2차 정규화(2NF)
기본키가 복합 키(2개 이상의 컬럼으로 하나의 행을 식별)로 구성된 경우, 모든 속성은 이 복합 키에만 의존적이어야 한다.
복합 키에 의존적이지 않고, 복합 키를 구성하는 하나의 컬럼에만 의존적인 컬럼이 있으면, 이 속성은 별도의 테이블로 분리하거나, 복합키에 의존적이도록 변경해야 합니다.
이렇게 복합키에 의존적이지 않은 속성이 있으면 이 테이블은 2차 정규화 대상이 됩니다.
주문 정보를 저장하는 주문 테이블에 주문 코드로 식별하는 여러 개의 주문이 있고, 한 주문자가 여러 개의 상품을 주문했다면, 하나의 주문 코드로 여러 행의 주문 목록이 등록됩니다.
따라서 각각의 주문 행은 주문 코드 + 상품코드로 구성되는 복합키로만 식별할 수 있게 됩니다.
이때 주문행에 상품명이 저장된 컬럼이 있을 경우, 이 상품명 컬럼은 복합 키에 의존적인 것이 아니라 상품코드에만 의존적이 됩니다. 주문 코드 없이 상품 코드만으로 상품명이 식별되기 때문에 해당 정보는 중복 정보가 되고, 상품정보 테이블(또는 주문 상품의 상품명을 저장하는 테이블)을 추가해 상품코드로 식별되는 상품명을 가지도록 분리해야 합니다.
3차 정규화(3NF)
제3 정규화는 기본키 이외의 일반 컬럼들끼리 의존성이 있는지를 확인해서 분리를 하는 것입니다.
테이블의 속성(컬럼)들이 기본키에 의존적이지 않고, 일반 컬럼들끼리만 의존적인 관계가 생성될 경우, 3차 정규화 대상이 됩니다.
판매 대리점의 발주 정보를 담는 주문 정보 테이블은 기본 키, 또는 복합 키에 의해서 주문행이 식별됩니다.
그리고 관리되는 지점 주소록 목록에서 배송 주소를 선택하는 방식으로 주문 시스템 기능이 구현되어 있지만, 주문 정보 테이블에 지점 코드와 배송 주소 정보를 모두 저장했다면, 이 주문 테이블은 제3 정규화의 대상이 됩니다.
지점 코드에 의해서 이미 배송 주소 정보를 확인할 수 있지만, 실제 배송 주소를 저장한 주문 정보의 배송 주소 컬럼은 배송지 식별 코드 컬럼에 의존적인 중복 정보가 됩니다.
따라서, 주문 정보 테이블의 기본키, 또는 복합 키가 아니면서 배송지 식별 코드 컬럼에 의존적인 배송 주소 컬럼을 별도의 테이블로 분리하거나 삭제해서 이행 함수 종속성을 해소해야 합니다.