Normalization
개념
배경
- 하나의 릴레이션에서 여러 엔티티의 속성을 혼합하면 정보가 중복될 수 있고 공간을 낭비할 수 있다.
- anormaly
- 하나의 릴레이션에서는 변경하고 나머지에서는 변경하지 않았을 때 어느 정보가 정확한 것인지 확인 불가
- insertion anormaly
- 원하지 않은 자료가 삽입되거나 자료가 부족하여 삽입이 안 되는 경우
- deletion anormaly
- 하나의 자료만 삭제하고 싶은데 그 자료가 포함한 튜플 전체를 삭제하면서 원하지 않은 정보 손실 발생
- modification anormaly
- 정확하지 않거나 일부 튜플만 변경되어 일관된 정보를 얻을 수 없는 경우
정규화
- 관계형 데이터베이스에서 중복된 데이터를 최소화하기 위한 과정
- 릴레이션을 분해해서 해결
함수적 종속성
- 속성간의 상호 관계로부터 유도되는 제약 조건
- x의 값이 y의 값을 유일하게 결정한다면 x는 y를 함수적으로 결정한다라고 표현
정규형의 기본 조건
- 무손실 조인 보장
- 함수적 종속성을 보장
종류
제 1 정규화
- 속성의 값이 원자값으로 하나의 값만 들어간다.
제2 정규화
- 기본키가 아닌 속성이 기본키 속성에 완전 함수 종속을 만족
- 기본키의 일부에 의해 결정되는 부분 함수 종속이 아닌 완전 함수종속을 만족해야 한다.
제3 정규화
- 비 기본키가 이행적 함수 종속이 아닌 경우를 만족
- 이행적 함수 종속은 비 기본키가 기본키에 종속적이고 그 기본키가 다른 비 기본키에 종속적인 경우이다.
BCNF
- 후보키가 다른 속성을 결정하는 결정자일 경우 분해하는 정규화
장단점
장점
- 이상 현상 제거
- DB 구조를 확장 시에 다시 디자인해야 하는 것을 최소화한다.
- 데이터 모델을 보다 현실 세계의 대상과 유사하게 반영
단점
- 릴레이션 분해를 자주하면 데이터를 찾을 때 JOIN 연산을 자주 하게 된다.
- 이로 인해 쿼리 성능 저하가 될 수 있다.
반정규화
- 정규화된 엔티티, 속성, 관계를 시스템 성능 향상 및 운영 단순화를 위해 중복 통합, 분리하는 데이터 모델링
- 정규화의 단점을 보완
- 일반적으로 조회의 성능 처리가 중요할 경우 사용
- 사용 대상
- 자주 사용되는 테이블이나 접근하는 프로세스 수가 많고 일정 범위만 접근하는 경우
- 테이블에 대량의 데이터가 있고 대량의 범위를 자주 처리하는 경우와 성능 우려가 있을 경우
- 테이블을 지나치게 조인을 많이하여 조회가 어려운 경우
- 반정규화를 과도하게 하면 데이터 무결성이 깨질 수 있고, 입력, 수정, 삭제에 대한 응답 시간이 지연될 수 있다.
데이터 무결성
- 데이터의 정확성과 유효성을 의미
- 객체 무결성
- 테이블에 기본키가 하나 있어야하고 null값이 아니어야 한다.
- 참조 무결성
- 외래키의 값은 null이거나 참조 테이블의 기본키와 동일
- 도메인 무결성
- 테이블에 존재하는 필드의 무결성을 보장하기 위해 필드 타입, null 값 허용에 대한 사항을 정의하고 확인하는 조건
- null 무결성
- null 값이 될 수 없게 하는 조건
- 고유 무결성
- 테이블의 특정 속성에 대해 값이 서로 달라야 하는 조건
- 키 무결성
- 하나의 테이블에 적어도 하나의 키가 존재
- 관계 무결성
- 테이블의 어느 레코드의 삽입 가능 여부 혹은 한 테이블과 다른 테이블의 레코드 사이의 관계 적절성 여부
Reference
Interview_Question_for_Beginner/Database at master · JaeYeopHan/Interview_Question_for_Beginner
'DataBase' 카테고리의 다른 글
Redis & Memcached (0) | 2023.03.02 |
---|---|
RDBMS & NoSQL (0) | 2023.03.01 |
Transaction (0) | 2023.02.27 |
Index (0) | 2023.02.26 |
데이터베이스 인덱스 종류 (0) | 2022.12.21 |