본문 바로가기
CS/DataBase

[DataBase] 데이터 이상과 정규화

728x90

 

 

 


데이터 이상(Data Anomaly)이란?

 

잘못된 데이터베이스 설계로 인해 데이터들의 불필요한 중복이 발생할 수 있다. 테이블에서 일부 속성들이 종속으로 인해 데이터의 중복이 발생하고, 테이블 조작 시 문제가 발생하는 현상을 데이터 이상(Anomaly)이라고 한다. 이상의 종류에는 3가지가 있다. 

 

 


 

◼ 삽입 이상(Insertion Anomaly)

테이블에 새로운 데이터를 삽입할 때 불필요한 데이터도 함께 삽입해야 하는 이상. 즉, 일부 데이터만 삽입하고 싶어도 입력을 원치 않는 다른 데이터까지 함께 삽입해야 하는 현상을 뜻한다.

 

위와 같이 (학번, 수강과목)이 PK인 테이블을 가정해보자.

 

 

이때 수강과목은 정하지 않고 '엘싸'라는 학생 정보만 저장하고 싶어도 (학번, 수강과목)이 PK이기 때문에 수강과목 데이터를 비워둘 수 없다. 따라서 학생 정보만 삽입하기를 원해도 수강과목이라는 원치 않는 데이터까지 함께 삽입해야 한다.

 

 

삭제 이상(Insertion Anomaly)

테이블에서 한 튜플을 삭제할 때 연쇄적으로 삭제가 발생하는 이상. 즉, 삭제를 원치 않는 데이터들까지 함께 삭제되는 현상을 뜻한다.

 

 

위 테이블에서 학번이 400, 수강과목 6번인 6행 데이터는 삭제하더라도 큰 문제가 없다. 하지만 학번이 200, 수강과목 2번인 2행 데이터를 삭제하게 되면 '다빈슨'이라는 학생의 정보까지 테이블 상에서 모두 사라지게 된다.

 

 

갱신 이상(Insertion Anomaly)

튜플의 속성 값을 갱신할 때 일부 튜플들만 수정하여 데이터들 간에 불일치가 발생하는 이상

 

'하로롱'이라는 학생의 학부가 오락부로 바뀌었다고 가정해보자. 이때 미처 다른 튜플에 있는 정보를 수정하지 못한다면 '하로롱' 학생의 학부 정보 간의 불일치가 발생하게 된다.

 

 

 


 정규화(Normalization)란?

 

테이블 속성들 사이의 종속적인 관계를 고려하여 테이블을 무손실 분해하는 과정이다. 1NF, 2NF, 3NF, BCNF, 4NF, 5NF, 6NF까지 총 7개의 정규형이 있다. 비공식적으로는 3NF가 되었으면 정규화되었다고 말할 수 있으며, 실제 현업에서도 제 3NF 정도까지만 수행하고 속도, 튜닝 등 필요에 따라 비정규화(Denormalization) 과정을 수행하기도 한다.

 

 


 

함수적 종속(Functional Dependency)

어떤 릴레이션 R이 있고 X, Y는 각각 그 부분집합이다. 이 때 X의 값을 알면 Y를 바로 식별할 수 있다면 Y는 X에
함수적 종속이고 X를 결정자, Y를 종속자라고 부른다.
ex) X : (학번, 수강과목) -> Y : (이름, 학부, 등록금), X : (학번) -> Y : (이름, 학부, 등록금)

 

 

1. 완전 함수적 종속

결정자 X, 종속자 Y가 있을 때 Y가 X의 일부에는 함수적 종속이지 않은 관계
ex) X : (학번, 수강과목) -> Y1 : (성적), Y2: (이름, 학부)
Y1 성적은 X의 일부인 학번, 수강과목 각각에 대해서는 종속적이지 않다. 완전함수종속 O
반면, Y2 (이름, 학부)는 X의 일부인 (학번)에 대해서도 종속적이다. 완전함수종속 X

 

2. 부분 함수적 종속

Y가 X에 종속이면서 X의 일부에도 함수적 종속인 관계
위 예에서 Y2는 X에 부분 함수적 종속이다.

 

3. 이행 함수적 종속

X, Y, Z 3개의 속성 집합이 있다. Y가 X에 종속이고 Z가 Y에 종속 즉, X -> Y이고 Y -> Z인 관계를 가질 때 X -> Z인 관계도 성립한다. 이 때 Z는 X에 이행 함수적 종속이다.
ex) X : (학번), Y : (이름), Z : (학부) 이 때 (학번) -> (이름) -> (학부)의 관계를 가지므로 Z는 X에 이행 함수적 종속이다.

 

 


 

 제 1정규형(1NF)

모든 속성의 도메인이 원자값만으로 되어 있는 정규형이다. 테이블의 모든 속성값들은 반드시 하나의 값만
가져야 한다.

 

위 테이블에서 수강과목 값이 여러 개를 포함하는 튜플이 존재하므로 이를 각각 분리하여 저장한다.

 

1NF를 만족하더라도 데이터 이상은 여전히 발생할 수 있다. 학생 정보만 삽입할 수도 없고(삽입 이상), 성적 정보만 삭제할 수도 없고(삭제 이상), 속성 값 변경 시 데이터 불일치(갱신이상)가 발생할 가능성도 남아있다.

 

 

 제 2정규형(2NF)

테이블이 1NF를 만족하고, 기본키(Primary Key)를 제외한 모든 속성이 기본키에 대해 완전 함수적 종속을 만족하는 정규형이다.

 

 

위 테이블에서 (이름, 학부, 등록금) 속성은 기본키 (학번, 수강과목)의 일부인 (학번)에도 종속이므로 부분 함수적 종속인 관계이다. 이때 테이블을 쪼갬으로써 부분 함수적 종속을 제거할 수 있다.

 

2NF를 만족하더라도 데이터 이상은 여전히 발생할 수 있다. 학부 정보만 삽입할 수 없고(삽입 이상), 학생이나 학부 정보만 삭제할 수도 없다.(삭제 이상)

 

 

 제 2정규형(2NF)

테이블이 2NF를 만족하고 기본키(Primary Key)를 제외한 모든 속성이 기본키에 대해 이행 함수적 종속을 만족하지 않는 정규형이다.

 

 

위 테이블에서 (학번) -> (이름, 학부), (학부) -> (등록금) 관계를 만족하므로 (학부) 속성은 기본키에 대해 이행 함수적 종속을 만족한다. 이때 테이블을 쪼갬으로써 이행 함수적 종속을 제거할 수 있다.

 

 

 


📝 요약

◾ 데이터 이상이란 테이블에서 속성 간에 종속 관계로 인해 불필요한 중복이 발생하고 나아가 데이터 조작 시 문제가 발생하는 현상이다.

◾ 정규화 과정을 통해 데이터 이상 발생 가능성을 줄일 수 있다. 

 

 

 


📃 Ref

  • 김정준, 『2021 정보처리기사 실기』, 시나공
728x90
반응형