릴레이션에서 튜플에 있는 속성값 갱신 시 일부 튜플 정보만 갱신되어 정보모순이 생기는 현상
정규화 절차
제 1 정규화
속성[Attribute]의 원자성을 확보 기본키[Primary Key]를 설정 → 엔터티의 유일성을 만족하기 위해 식별자를 찾는 과정 중복속성에 대한 분리 → 칼럼 단위에서 중복된 경우 1:M관계로 두 개의 엔터티로 분리하는 제1 정규화 진행
제 2 정규화
부분 함수 종속성 제거 → 부분 함수 종속성은 기본키가 2개 이상의 칼럼으로 이뤄진 경우에만 발생 → 부분 함수 종속성이 발생하면 테이블을 분해하여 새로운 테이블 도출 → 즉, 모든 속성이 식별자에 종속해야 하며 그렇지 않은 경우에는 분해 기본키가 하나의 칼럼으로 이뤄지면 제2정규화는 생략
제 3 정규화
이행 함수 종속성을 제거 → 이행 함수 종속성은 기본키를 제외하고 칼럼간에 종속성이 발생하는 것 → 제3정규화를 통해 기본키를 제외한 칼럼 간에 종속성을 제거 제 1정규화와 제 2정규화를 수행한 다음 수행
BNCF [Boyce-Codd Normal Form]
복수의 후보키가 있고, 후보키들이 복합 속성이어야하며 서로 중첩됨 → 기본키가 후보키를 함수적으로 종속 → 후보키가 기본키를 함수적으로 종속하는 경우 분해 → 해당 후보키 테이블을 새롭게 만들고 기본키로 지정 컬럼은 함수적으로 종속된 기본키
PK가 걸려있는 방향으로 조인이 걸려 Unique Index를 찾아 빠르게 데이터 조회 가능 → 하나의 테이블에서 조회할 때와 비교했을 때 성능 차이가 미미 → 일부 SQL문 처리는 2차 정규화된 테이블이 더 빠름! → 정규화를 수행하면 무조건 조회성능이 저하되는 것은 아님!!!
출처 : DBGUIDE.NET
매각일자가 결정자가 되고 매각시간과 매각장소는 의존자가 되는 함수적 종속관계가 형성된 예
대량의 데이터에서 조인 조건의 대상을 찾기 위해 인라인뷰를 사용하므로 모델의 성능이 저하됨
2개 이상의 기본키를 갖는 테이블로부터 부분 함수 종속성 발생
제2정규화를 통해 매각일자[PK], 매각시간[일반속성], 매각장소[일반속성]을 갖는 테이블을 별도로 생성
정규화의 문제점
정규화는 데이터 조회[SELECT]시에 조인을 유발해 CPU와 메모리를 많이 사용하게 됨 → 정규화는 테이블을 분해해서 데이터 중복을 제거하므로 데이터 모델의 유연성을 높임
두 개의 테이블로 이뤄진 경우, 조인을 사용해야할 수도 있음 ex> 직원 : 사원번호, 부서코드, 이름, 전화번호 부서 : 부서코드, 부서명 SELECT 사원번호,부서코드, 부서명, 이름, 전화번호 FROM 직원,부서 WHERE 직원.부서코드 = 부서.부서코드