Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- linux
- 컴퓨터네트워크
- 정리
- S3
- 파이썬
- Go
- 데이터베이스
- dockerfile
- TIL
- sql
- 종류
- Docker
- http
- 데이터엔지니어링
- Django
- 자료구조
- 데이터 엔지니어링
- AWS
- 데브코스
- 데이터 웨어하우스
- airflow
- 가상환경
- 컴퓨터 네트워크
- HADOOP
- 운영체제
- 데이터 파이프라인
- airflow.cfg
- redshift
- PYTHON
- TCP
Archives
- Today
- Total
홍카나의 공부방
[데이터베이스] 정규화, 함수 종속 관계, 정규형 본문
정규화(Normalization) 요약
- 사실상 DB(스키마) 설계를 완성하는 마지막 단계
- 각종 이상 현상(삽입 이상, 갱신 이상, 삭제 이상)을 해결하면서 데이터베이스 설계를 올바르게 해가는 과정이다.
- 이상 현상이 발생하지 않도록 테이블을 분해하는 과정이다.
함수 종속(Functional Dependency)
- 위와 같은 이상(anomal) 현상의 원인은 속성들 간에 존재하는 여러 종속관계를 하나의 테이블에 표현함에 있다.
- 정규화는 함수적 종속성을 판단하여 수행하게 된다. 이 함수적 종속성이란 속성들 간의 관련성을 이야기한다.
- 결정자인 X와 종속자인 Y는 특정 테이블 내 속성들의 부분집합이다.
- X가 Y를 함수적으로 결정한다는 것은, 테이블의 모든 레코드에 대하여 하나의 X값에 대한 Y값은 항상 하나라는 점이다.
userID(pk) | username | class |
red | kim | silver |
blue | kang | silver |
orange | lee | gold |
yellow | park | platinum |
- 위 테이블 구조를 예시로 살펴보면, 기본키인 userID가 X(결정자)로 취급할 수 있다.
- 꼭 기본키가 아니더라도 후보키는 모두 결정자가 될 수 있다.
- 위 예시에서 만약 username을 결정자로 취급할 수 있을까? -> 아니다! username 칼럼은 레코드의 값이 중복될 수 있기 때문에 다른 속성 값을 유일하게 결정하지 못한다. 그래서 결정자가 되지 못한다.
- 후보키가 아닌 속성 값도, 다른 속성 값을 유일하게 결정하면 결정자가 될 수 있다.
- 정리하면 위 예시에서는 userID -> username, userID -> class로 함수 종속 관계를 정리할 수 있다.
- 일반적으로 함수 종속은 완전 함수 종속(FFD)을 의미한다. 완전 함수 종속은 Y가 X에 종속이 되나, X의 전체가 아닌 X의 일부분에는 종속되지 않음을 의미한다.
- 부분 함수 종속(PFD)은 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수 종속이 되는 관계를 의미한다.
함수 종속 판단 시 유의 사항
- 현재 존재하는 레코드들로 함수 종속 관계를 섣불리 판단하면 안 된다. 예를 들어 위 예시에서는 현재 레코드들의 username으로 class를 함수적으로 결정할 수 있다고 판단할 수 있지만, username은 언제든지 중복될 수 있다. 이때는 함수 종속성이 사라져서 이상 현상이 발생하게 된다.
- 속성 자체의 의미를 기반으로 함수 종속성을 판단하자.
정규화 원칙
- 1) 무손실 분해 : 분해로 인한 정보 손실이 발생하지 않아야 한다. 분해된 테이블을 조인하면 복원이 가능해야 한다.
- 2) 분해하면 분해할수록 데이터의 중복성을 감소시켜야 한다.
- 3) 분리의 원칙 : 독립적인 관계는 별개의 테이블로 표현해야 한다.
정규형
- 테이블이 정규화된 정도를 정규형(Normal Form, NF)이라고 표현한다.
- 각 정규형마다 제약조건이 존재한다.
- 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해진다.
- 테이블의 특성을 고려해서 적합한 정규형을 선택한다.
제1,2,3 정규형, BCNF
- 제1 정규형은 모든 속성의 값이 쪼개질 수 없는 원자 값(atomic value)만을 가질 때 제1 정규형이라고 한다.
- 보통 RDBMS라고 할 때, 제1 정규형은 만족해야 한다.
- 제2 정규형은 부분 함수 종속을 제거한 형태를 의미한다. 즉, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 한다.
- 제2 정규형에서도 이행적 함수 종속이 존재하여 이상 현상(갱신,삭제,삽입 이상)이 발생할 수 있다.
- 이행적 함수 종속이란 X->Y, Y->Z의 관계일 때 논리적으로 X->Z의 관계가 성립되는데, 이때 Z가 X에 이행적으로 함수 종속되었다고 한다.
- 제3 정규형은 이러한 이행적 함수 종속을 제거한 정규형을 의미한다. 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 성립한다.
- 보이스/코드 정규형(BCNF)은 위 제3 정규형을 만족한 상태에서 모든 결정자가 후보키일 때 성립한다.
- 정규형을 무조건 높게 하는 게 정답은 아니다! 현실적으로 모든 테이블을 BCNF까지 분해할 이유는 없다. 상황에 따라 테이블의 정규형 수준을 정하면 된다.
각종 정규형 예시들
반응형
'Data Engineering > Database' 카테고리의 다른 글
SQL 연습 - 프로그래머스 SQL 문제풀이 (1) (0) | 2023.06.12 |
---|---|
[SQL] MySQL : 연월일 중 월을 표현하고 싶을 때 (DATE_FORMAT) (0) | 2023.05.28 |
[데이터베이스] 트랜잭션 - 장애와 회복, 로그 회복 기법 (0) | 2023.05.26 |
[데이터베이스] 트랜잭션 - ACID, 연산, State (0) | 2023.05.25 |
[데이터베이스] 트리거(Trigger)에 대하여 - AWS RDS (0) | 2023.05.20 |