정규화, 트랜잭션
오늘은 데이터베이스와 관련된 문제다 :)
정규화의 목적에 대해서 말하시오
관계형 데이터베이스에서 데이터의 중복을 최소화하기 위해 데이터를 구조화하는 작업이다.
함수적 종속성을 판단해 릴레이션을 좀 더 작게 분해한다.
이러한 과정을 정규화 과정이라고 하는데, 아래와 같이 6개의 단계로 나뉜다.
제 1 정규형 | 도메인을 원자값이 되도록 분해 |
제 2 정규형 | 부분 함수 종속 제거 |
제 3 정규형 | 이행적 함수 종속 제거 |
BCNF | 후보자가 아닌 결정자 관계 제거 |
제 4 정규형 | 다치 종속 관계 제거 |
제 5 정규형 | 후보키를 통하지 않은 JOIN 종속 관계 제거 |
이를 통해 Anomaly 현상을 제거할 수 있고, 구조 확장 시 일부만 변경해도 된다는 등의 장점이 있다.
그러나 릴레이션의 분해로 JOIN 연산이 많아져 질의 응답시간이 오래 걸린다는 단점이 있다.
이를 해결하기 위해 역정규화(De-normalization)를 하기도 한다.
트랜잭션에 대해 설명하시오
하나의 작업을 수행하기 위해 필요한 데이터베이스 연산의 집합이다.
데이터베이스에서 논리적인 작업의 단위가 되어 장애가 발생했을 시에 주로 사용된다.
작업 집합을 원상태로 복구 했을 때 작업의 일부만 적용되지 않도록 한다.
즉 논리적 작업 집합이 100% 적용되거나, 아무것도 적용되지 않는 것을 보장하는 것이다.