정의\
데이터베이스 정규화 프로세스는 모든 필드와 레코드가 논리적으로 구성되어 중복을 방지할 뿐만 아니라 관계형 데이터베이스를 보다 효율적으로 사용하도록 하는 방법이다. 데이터 입력 오류를 방지하고, 실수로 삭제하고 데이터 업데이트 프로세스도 쉽게 수행할 수 있다.
반정규화는 정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 데이터 모델링 기법 중 하나이다.
사용하는 이유
1. 디스크 I/O 량이 많아서 조회 시 성능이 저하기때문에
2. 테이블끼리의 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되기 때문에
3. 칼럼을 계산하여 조회할 때 성능이 저하될 것이 예상되기 때문에
비정규화의 대상
1. 자주 사용되는 테이블에 액세스하는 프로세스의 수가 가장 많은 경우
2. 항상 일정한 범위만을 조회하는 경우
3. 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우
4. 성능 상 이슈가 있을 경우
5. 테이블에 지나치게 조인을 많이 사용하게 되어 데이터를 조회하는 것이 기술적으로 어려울 경우
비정규화에서 주의할 점
1. 반정규화를 과도하게 적용하다 보면 데이터의 무결성이 깨질 수 있습니다.
2. 또한 입력, 수정, 삭제의 질의문에 대한 응답 시간이 늦어질 수 있습니다.
기능적 의존성은 데이터베이스 설계 및 관계형 이론의 개념으로, 관계의 속성 간의 관계를 설명합니다. 기능적 종속성에서 한 속성은 다른 속성의 값을 결정합니다.
기본키가 종속자이며 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 모든 속성이 포함된 부분집합 또한 종속자일 경우를 말합니다.
릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키를 구성하는 여러 속성들의 부분집합 중 일부분에만 종속되어 있음을 말합니다.
비 키 속성이 다른 비 키 속성에 의존 할 때 발생하는 관계형 데이터베이스에서 기능적 종속성의 유형입니다. 다시 말해, x-> y 및 y-> z가 기능적 종속성으로 유지되면 x-> z는 이행적 의존성으로 유지됩니다.
릴레이션에 속한 모든 속성의 도메인이 더 이상 분해되지 않는 원자값으로만 구성된 정규형이다.
몇가지 규칙
1. 각 컬럼이 하나의 속성만을 가져야 한다.
2. 하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야 한다.
3. 각 컬럼이 유일한(unique) 이름을 가져야 한다.
4. 칼럼의 순서가 상관없어야 한다.
이렇게 수강생들이 여러개씩 있는 것들을 하나로 쪼개는 것을 1정규화라고 한다.
정규화하지 않았을때 발생하는 문제들
1. 갱신이상 : 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.
2. 삭제이상 : 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.
NF는 normal form의 약자이다.
기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2정규형에 속한다.
몇가지 규칙
1. 1NF를 만족해야 한다.
2. 모든 컬럼이 부분적 종속(Partial Dependency)이 없어야 한다. 즉, 모든 칼럼이 완전 함수 종속을 만족해야 한다.
부분적 종속성을 없애고 테이블이 하나의 기본키에 완전 함수 종속성을 띄게 하는것이 2NF이다.
정규화하지 않았을때 발생하는 문제들
1. 삽입이상 : 데이터베이스수업을 듣는 새로운 학생이 생긴다면, 불필요한 강의실정보가 또 업데이트된다.
2. 갱신이상 : 자료구조의 강의실이 변경되었다면, 모든 강의실의 정보를 업데이트해줘야한다.
3. 삭제이상 : 402이 자퇴한다면 알고리즘의 정보가 사라진다.
기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3정규형에 속한다.
몇가지 규칙
1. 2NF를 만족해야 한다.
2. 기본키를 제외한 속성들 간의 이행 종속성 (Transitive Dependency)이 없어야 한다.
위 그림과 같이 학생이 강좌를 선택했고, 그로인해 수강료가 정해져 사실 학생만 알아도 수강료를 알 수 있는 이행적 함수 종속성을 가지고 있는데, 이를 위처럼 분리하는 것이 3NF이다.
정규화하지 않았을때 발생하는 문제들
1. 삽입이상 : 다른 학생이 알고리즘을 듣는다면 불필요한 정보가 삽입된다.
2. 갱신이상 : 알고리즘의 수강료가 올랐다면, 모든 수강료를 찾아서 업데이트해야한다.
3. 삭제이상 : 502이 자퇴한다면 자료구조의 정보가 사라진다.
모든 결정자가 후보키이면 BCNF에 속한다.
몇가지 규칙
1. 3정규형을 만족해야 한다.
2. 모든 결정자가 후보키 집합에 속해야 한다.
(학번, 특강) -> 교수, (학번, 교수) -> 특강, 교수 -> 특강 과 같은 결정자들이 존재하는데, 교수는 후보키가 될 수 없다. 그렇기 때문에 위처럼 나누는 것을 BCNF라고 한다.
정규화하지 않았을때 발생하는 문제들
1. 삽입이상 : 만약 401이 인간과 사회를 수강한다면, 필요없는 송교수 인간과 사회라는 정보가 삽입된다.
2. 갱신이상 : 김교수가 다른 과목을 맡게 되면 학생은 다른 특강을 듣는 것처럼 바뀐다.
3. 삭제이상 : 402이 자퇴한다면 송교수 인간과 사회의 정보는 사라진다.