데이터베이스 정규화
db정규화란?
- 관계형 데이터베이스에서 데이터를 재설계, 구조화하는 작업
- 정규형이란 특정 조건을 만족하는 realation의 스키마의 형태를 말하며 제 1 정규형, 제 2 정규형, 제 3 정규형 등이 존재한다.
- 보통 속성들 사이와 관계를 분석해 여러개의 릴레이션으로 분할하느 과정을 거치므로 이상현상은 줄어드나 속도가 느려짐.
정규화는 왜 필요한가?
- db 구조가 복잡해질수록 생길 수 있는 중복 저장되며, 저장 공간을 낭비 등을 해결한다.
- 또한 삽입/갱신/삭제 시 발생할 수 있는 각종 이상현상(Anamolies)들을 방지할 수 있습니다.
- 따라서 정규화의 목적은 불필요한 데이터를 제거하고 '논리적'으로 데이터를 저장한다는 것에 있다.
각종 이상현상에는 어떠한 것들이 있는가?
- 삽입 이상(insertion anomalies): 원하지 않는 자료가 삽입되는 경우, 삽입이 되지 않는 경우 등
- 삭제 이상(deletion anomalies): 하나의 자료만 삭제하려 할 때 튜플 전체가 삭제되는 등 원치않는 정보까지 연속적으로 삭제되는 경우 등
- 수정(갱신)이상(modification anomalies): 일부의 데이터만 수정되어 일관성이 없어져(inconsistency)나타나는 문제 등
함수적 종속성이란 무엇인가?
- X 와 Y 를 임의의 attribute 집합이라고 할 때, X 의 값이 Y 의 값을 유일하게(unique) 결정한다면 "X 는 Y 를 함수적으로 결정한다"라고 한다.(X -> Y)
- FD, trivial fd, closure of fd 등
정규화 종류
각 정규형은 그의 선행 정규형보다 더 엄격한 조건을 갖는다
제 1 정규형
- 모든 attribute의 도메인들이 atomic(더이상 쪼갤 수 없는) 해야한다. 즉 각 행마다 열에 해당하는 값이 하나만 있어야 한다.
제 2 정규형
- 테이블의 모든 attribute가 완전 함수적 종속을 만족하는 것.
- 완전 함수적 종속이란 X -> Y 라고 가정했을 때, X 의 어떠한 attribute라도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우
- 즉 부분 함수 종속을 제거하는 것
제 3 정규형
- 기본키를 제외한 속성들 간의 이행적 함수 종속이 없는 것
- 이행 함수적 종속이란 X - >Y, Y -> Z의 경우에 의해서 추론될 수 있는 X -> Z의 종속관계
- 즉, 기본키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 수 없는 것
BCNF(Boyce and Codd Normal Form)
- 제 3 정규형을 보완
- 3차정규형을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형(즉 결정자 중 후보키가 아닌 경우 제거)
- 일반 컬럼이 후보키를 결정하는 경우(3차 정규형 만족, BCNF 불만족)
정규화 장점
- 데이터베이스 변경 시 이상 현상(Anomaly) 문제 해결
- 데이터베이스 구조 확장 시 용이
정규화 단점
- relation 간의 연산(JOIN 연산)이 많아져 질의에 대한 응답 시간이 느려질 수 있다.
데이터베이스 역정규화(denormalization)와 NoSQL
- 관계형 데이터베이스 Join 연산은 시스템이 커질수록 느려지는 단점이 있어 역정규화를 통해 해결
- 역정규화란 데이터베이스에 여분의 정보를 추가해 읽기 연산 속도를 향상시킨 것
(= 두 테이블을 조인하기 보다 애초에 필요한 정보를 추가로 저장해 놓음) - 즉 분할했던 릴레이션을 다시 통합하거나 다른 기준으로 분할하여 구조를 재조정하는 것
- 검색 빈도에 의하여 튜플이나 속성을 분할하기도 함
- NoSQL은 Join 연산을 지원하지 않고 규모확장성이 좋음
기타 개념
- 키의 종류 및 구분- 수퍼키, 후보키 등
- 릴레이션(relation) model : 모든 정보를 표 형태의(행과 열로 구성된 테이블) 관계로 표현
- 스키마(schema) : 구조, 릴레이션이 어떤 attribute를 가지는지 등
- 인스턴스(instance) : 정의된 스키마에 따라 실제로 저장되는 데이터의 집합
- 속성(attribute) : relation 스키마의 열
- 도메인(domain) : 각 attribute가 취할 수 있는 value, 값의 집합
- 튜플(tuple) : relation의 행(row)
이해를 위한 참고 사이트 링크
'CS' 카테고리의 다른 글
[db] 키의 종류 및 구분 -수퍼키, 후보키, 기본키, 대체키, 외래키 (0) | 2021.03.23 |
---|---|
[DB] Functional dependency(FD), 트리비얼 FD (0) | 2021.03.22 |
[네트워크]TCP 3-way handshake/4-way handshake (0) | 2021.03.21 |
[네트워크] TCP와 UDP 차이, TCP는 어떻게 순서를 보장하는가? (0) | 2021.03.20 |
[네트워크]GET과 POST의 차이 (0) | 2021.03.20 |