중복되는 정보과 업데이트 되는 이상치 문제
anomalies 종류
예시
이를 피하기 위해 NULL을 쓰면 되는거 아닌가? 많이 쓰면 쓸 수록 performance가 줄어든다.
이를 정규화를 통해 해결 할 수 있다.
정규화의 과정은 테이블을 쪼개는 과정, 가능한 join 연산을 줄이려 하는것
실행적인 측면에서는 쪼갤수록 안좋고, 데이터 저장 관리 측면에서 쪼갤 수록 좋다
관계형 데이터베이스의 설계에서 중복된 데이터가 최소화되도록 데이터베이스의 구조를 결정하는 것을 정규화 (normalization)라고 한다.
함수 종속성은 수학에서의 함수와 같이 두 필드의 집합이 many-to-one 관계로 사상되는 것을 말한다. 즉, 함수와 같이 어떠한 값을 통해 종속 관계에 있는 다른 값을 유일하게 결정할 수 있다는 것이다. 데이터베이스에서의 함수 종속성을 더욱 명확하게 정의하면 다음과 같다.
어떤 테이블 R에 존재하는 필드들의 부분집합을 각각 X와 Y라고 할 때, X의 한 값이 Y에 속한 오직 하나의 값에만 사상될 경우에 "Y는 X에 함수 종속 (Y is functionally dependent on X)"이라고 하며, X→Y라고 표기한다.
FD를 확인할 수 있는 방법은 무엇일까?
특정 attribute를 groupby해서 해당 attribute에 대해 일정한 dependency를 갖는 attribute가 존재하는지 확인한다.
함수 종속성과 암스트롱의 공리, closure 개념을 이용하여 super key를 판별할 수 있다.
제 1형 : all attributes depend on the key
제1 정규화란 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것
제 2형 : all attributes depend on the whole key
제2 정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
제 3형 : all attributes depend on nothing but the key
제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
BCNF :
제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
제 4형 : 이상현상의 원인이 되는 중복값을 없애 데이터 중복성을 제거하는 것
제 5형도 존재 하지만 4이후는 거의 사용하지 않음