데이터베이스 정규화 - Heeyoung-Ahn/MariaDB-with-Excel-VBA GitHub Wiki
- 데이터 중복 제거
- 데이터를 논리적, 직관적으로 조직화
- 데이터 무결성(정확성, 일관성, 유효성이 유지되는 것) 향상
- 각 로우마다 컬럼의 값이 1개만 있어야 함(컬럼이 원자값(Automic Value)을 갖아야 함).
예: 주문상품 컬럼에 두 개의 주문 내용을 적으면 안됨
- 동일한 컬럼이 중복되면 안됨
예: 주문상품1, 주문상품2
- 기본 키의 데이터가 중복되면 안됨
- 테이블의 기본키가 아닌 모든 컬럼(속성)은 기본키에 완전 함수 종속되어야 한다.
- 함수 종속?
- X의 값에 따라 Y 값이 결정될 때 X는 결정자, Y는 종속자라 표현하며(X → Y)
- Y는 X에 대해 함수 종속되었다고 함 예) 학번: X, 이름: Y
- 함수적 종속에서 X값이 여러 요소일 경우(기본키로 두 개 이상의 컬럼을 사용하는 경우), 즉 (X1, X2) → Y일 경우
- X1과 X2가 Y의 값을 결정할 때 이를 완전 함수 종속이라 하고,
- X1, X2 둘 중 하나만 Y값을 결정할 때 이를 부분 함수 종속이라 함
- 데이터베이스 테이블에 부분 함수 종속이 포함되어 있을 때 이를 별도의 테이블로 분리하는 것을 제 2정규화라고 함
- 예) (테이블 컬럼) 주문번호, 상품코드, 상품명, 개수
- (주문번호, 상품코드) → 개수| 완전 함수 종속 , 상품코드→ 상품명| 부분 함수 종속
- 부분 함수 종속을 다른 테이블로 분리하여 제 2정규화
(테이블1 컬럼) 상품코드, 상품명 (테이블2 컬럼) 주문번호, 상품코드, 개수
- 예) (테이블 컬럼) 주문번호, 상품코드, 상품명, 개수
- 기본키가 아닌 모든 컬럼(속성)이 기본키에 이행적 함수 종속이 되지 않아야 한다.
즉, 모든 컬럼은 기본키에만 의존해야 한다. - 제 3정규화에 위배되는 테이블 구조 예
- 주문번호, 날짜, 고객번호, 성명, 연락처
주문번호 → 날짜, 주문번호 → 고객번호, 고객번호 → 성명, 고객번호 → 연락처 | 성명, 연락처는 주문번호에 대해 이행 함수 종속됨
- 주문번호, 날짜, 고객번호, 성명, 연락처
- 제 3정규화 진행
(테이블1 컬럼) 주문번호, 날짜, 고객번호 (테이블2 컬럼) 고객번호, 성명, 연락처