본문 바로가기
데이터베이스

데이터베이스 정규화 1,2,3,bcnf,4,5 / 트랜잭션 acid / 삽입 삭제 갱신

by 흰색남자 2022. 9. 21.

개념

- 함수적종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정

- 데이터베이스의 잘못된 설계로 발생할 수 있는 데이터 중복과 이상(Anomaly)현상을 해결하기 위한 방법.

=========================================================================================

* 종속성 : 동일한 데이터베이스 테이블에 저장된 정보가 동일한 테이블에 저장된 다른 정보를 고유하게 결정할 때 데이터베이스에 종속성이 발생합니다. 또한 하나의 속성 (또는 속성 세트)의 값이 동일한 테이블의 다른 속성 (또는 속성 세트)의 값을 알기에 충분하다는 것을 아는 관계로 설명 할 수 있습니다.

=========================================================================================

목적

- 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 만든다.

- 효과적인 검색 알고리즘을 생성할 수 있다.

- 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지한다.

- 데이터 삽입시 릴레리션을 재구성할 필요성을 줄인다.

 

 

[ 제1 정규화 ] 

테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것

 

[ 제2 정규화 ] 

제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것

 

** 완전 함수 종속 :

종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을 경우 종속자가 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우

모든 속성이 포함된 기본키의 부분집합에 종속된 경우

정규화 전

 

정규화 후

 

[ 제3 정규화 ]

제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것

** 릴레이션에서 X, Y, Z라는 3 개의 속성이 있을 때 X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z가 성립될 때 이행적 함수 종속이라고 함

정규화 전
정규화 후

 

[ BCNF 정규화 ]

제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것

정규화 전
정규화 후

 

[ 제4 정규화 ]

애트리뷰트가 값이 원자값이 아닌 값을 여러개 갖는 릴레이션을 분해하여 애트리뷰트가 원자값을 갖도록 하는 것

정규화 전
정규화 후

 

[ 제5 정규화 ] 

1)여러개의 릴레이션으로 한 릴레이션을 분해했을 때, 모든 나눠진 릴레이션이 원래 릴레이션의 슈퍼키이며

2)릴레이션을 더 분해할 경우, 기존 릴레이션의 정보가 손실되기 때문에 더 이상 릴레이션이 분해가 될 수 없는 경우를 말한다.

 

 

 

** 부분 함수 종속 : 릴레이션에서 기본키가 복합키일 경우 기본키를 구성하는 속성 중 일부에게 종속된 경우

 

반 정규화

- 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로, 의도적으로 정규화 원칙을 위배하는 행위 

 

- 반정규화를 수행하면 시스템의 성능이 향상되고 관리 효율성을 증가하지만 데이터의 일관성 및 정합성이 저하될 수 있음 

 

- 과도한 반정규화는 오히려 성능을 저하시킴 

 

- 반정규화를 위해서는 사전에 데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화를 우선으로 할지를 결정해야 함 

 

- 반정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등이 있음 

 

 

 

 

 

 

트랜잭션의 ACID

 

 

A : 원자성

한 트랜잭션은 모두 성공하거나 모두 실패해야함. 결과가 예측가능해야함.

 

C : 일관성

트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 일관된 상태여야한다.

 

I : 고립성

모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야한다.

 

D :  트랜잭션에 대한 로그가 남아야한다. 또한 한번 반영된 쿼리는 영구적으로 반영되어야한다.

 

트랜잭션은 모두 성공하거나 실패해야하며, 적용 전 후 상태는 일관된 상태를 유지해야한다.

또한 모든 트랜잭션은 서로 영향을 미쳐서는 안되며, 영구적으로 반영되어야한다.

 

 

삽입 삭제 갱신 이상현상

 

- 삽입 이상 (insertion anomaly) : 원하지 않는 자료가 삽입된다든지, key가 없어 삽입하지 못하는(불필요한 데이터를 추가해야 삽입할 수 있음) 문제점

- 삭제 이상 (deletion anomaly) : 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점

- 갱신 이상 (update anomaly) : 일부만 변경하여 데이터가 불일치하는 모순, 또는 중복되는 튜플이 존재하게 되는 문제점. 

출처: https://rebro.kr/159 [Rebro의 코딩 일기장:티스토리]