정규화가 등장하게 된 배경
하나의 릴레이션에서 여러 엔티티의 attribute를 혼합하면 데이터의 중복이 일어나 저장 공간이 낭비된다. 또한 이러한 중복으로 인해 하나의 릴레이션에서만 변경되고 다른 릴레이션들에선 변경되지않는 데이터의 불일치 문제도 일어나 어느것이 정확한지 알 수 없게 된다.
이러한 문제의 해결을 위해 정규화 과정을 거치는 것.
갱신 이상
삽입 이상: 원하지 않는 자료가 삽입되거나 삽입하는데 자료가 부족해 삽입되지 않아 발생
삭제 이상: 하나의 자료만 삭제하길 원하나 그 자료가 포함된 튜플이 모두 삭제되어 정보 손실이 발생
수정 이상: 일부 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는 문제
정규화
데이터베이스의 설계를 재구성하는 테크닉으로, 이를 통해 불필요한 데이터의 중복을 없앨 수 있고, 데이터 저장을 논리적으로 하여 삽입/수정/삭제 시 발생하는 문제들을 방지할 수 있다. 정규화 과정을 거치면 정규형을 만족하게 되는데, 정규형에는 제1정규형, 제2정규형, 제3 정규형,..이 있다.
불필요한 데이터의 삭제 / 데이터 저장을 논리적으로
함수적 종속성이란?
애트리뷰트 데이터들의 의미와 애트리뷰트들 간의 상호 관계로부터 유도되는 제약조건의 일종
X 와 Y 를 임의의 애트리뷰트 집합이라고 할 때, X 의 값이 Y 의 값을 유일하게(unique) 결정한다면 "X 는 Y 를 함수적으로 결정한다"라고 한다.
각각의 정규형이 만족해야 하는 조건
1. 분해의 대상인 분해 집합 D는 무손실 조인을 보장해야 한다.
2. 분해 집합 D는 함수적 종속성을 보존해야 한다.
제 1 정규형
각 로우마다 컬럼의 값이 1개씩만 있어야 함
name | age | subject |
Amy | 24 | math, bio |
John | 22 | computer science |
Bob | 21 | korean |
위의 표는 math,bio 때문에 1차 정규형을 만족하지 못한다.
name | age | subject |
Amy | 24 | math |
Amy | 24 | bio |
John | 22 | computer science |
Bob | 21 | korean |
위 처럼 로우를 하나 더 만들어 1차 정규화 할 수 있다.
제 2 정규형
모든 비주요 attribute들이 주요 attribute에 대해 완전 함수적 종속을 만족. 즉 테이블의 무든 컬럼에서 부분함수적 종속을 제거.
완전 함수적 종속: X->Y라고 가정하는 경우 X의 어떤 attribute라도 제거하면 더이상 함수적 종속성이 성립하지 않는 경우. 즉 기본키의 부분집합이 결정자가 되어서는 안된다.
제 3 정규형
어떠한 비주요 애트리뷰트도 기본키에 대해서 이행적으로 종속되지 않음. 즉 기본키를 제외한 속성들 간의 이행적 함수 종속을 제거.
이행 함수적 종속: X->Y, Y->Z의 경우에 의해서 추론될 수 있는 X->Z의 종속 관계. 즉 비주요 attribute가 비주요 attribute에 의해 종속되는 경우가 없는 릴레이션 형태를 말한다.
BCNF 정규형
여러 후보키가 존재하는 릴레이션에 해당하는 정규화 내용. 모든 결정자가 후보키가 되도록 테이블을 분해.
복잡한 식별자 관계에 의해 발생하는 문제를 해결하기 위해 제 3 정규형을 보완하는데에 의미가 있음. 비주요 attribute사 후보키의 일부를 결정하여 분해하는 과정을 말함. 즉 결정자이면서 후보키가 아닌 것들을 제거
각 정규형은 선행 정규형 보다 엄격한 조건을 가짐
- 모든 제 2 정규형 릴레이션은 제 1 정규형을 갖는다.
- 모든 제 3 정규형 릴레이션은 제 2 정규형을 갖는다.
- 모든 BCNF 정규형 렐레이션은 제 3 정규형을 갖는다.
관계형 데이터베이스 설계의 목표는 각 릴레이션이 제 3 정규형 또는 BCNF 정규형을 갖게 하는것.
정규화의 장점
- 데이터베이스 변경시 발생하는 갱신이상 문제들을 해결해준다.
- 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만 미치게 하여 그 응용프로그램의 생명을 연장 시킴. (재디자인 최소화 정규화된 데이터베이스 구조에선 새로운 데이터 형의 추가로 인한 확장시, 구조를 일부만 변경 또는 변경하지 않아도 됨)
- 정규화된 테이블들과 그 테이블들간의 관계는 현실 세계에서의 개념과 그들의 관계를 반영하여 사용자에게 더 의미 있게 데이터 모델을 제공 할 수 있음.
정규화의 단점
릴레이션이 분해 되기 때문에 JOIN(릴레이션간의 연산)이 많아짐 -> 응답시간이 길어질 수 있음.
정규화를 수행한다는 것: 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것.
따라서 데이터의 중복 속성을 제거해 한 테이블의 데이터 용량을 줄일 수있는 효과 -> 데이터 처리속도가 빨라질수도O 느려질 수도 O
정규화를 진행하는 상황?
조회를 위한 SQL문에서 JOIN의 사용 증가로 인해 발생하는 성능 저하를 고려해 정규화를 진행해야한다. 이런 경우 비정규화를 선택하는 전략이 필요
비정규화
정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 데이터 모델링 기법 중 하나. 조회의 처리 성능이 중요한 경우 부분적으로 비정규화를 사용하게 된다.
비정규화의 대상?
- 자주 사용되는 테이블에 엑세스하는 프로세스의 수가 가장 많고 항상 일정한 범위만 조회하는 경우
- 데이블에 대량 데이터가 있으며 대량의 범위를 자주 처리하는 경우, 성능 상 이슈가 있을 경우
- 테이블에 지나치게 조인을 많이 사용하게 되어 데이터의 조회가 기술적으로 어려운 경우
이 과정에서 주의해야할 사항?
반정규화를 과도하게 적용하다 보면 데이터의 무결성이 깨질 수 있고, 삽입/삭제/수정의 질의문에 대한 응답시간이 늦어질 수 있다.
CS 면접 대비를 위해 아래 깃허브를 기반으로 작성 되었습니다.
github.com/JaeYeopHan/Interview_Question_for_Beginner
'Computer Science > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 관계형 DB와 비관계형 DB (0) | 2021.05.13 |
---|---|
[데이터베이스] Statement vs PreparedStatement (0) | 2021.05.13 |
[데이터베이스] 트랜잭션 (Transaction) (0) | 2021.05.13 |
[데이터베이스] 인덱스 (Index) (0) | 2021.05.12 |
[데이터베이스] 데이터베이스의 특징 및 필요성 (0) | 2021.05.11 |