본문 바로가기
DB

이상현상, 함수적 종속성, 정규화

by 요섹남 2023. 10. 14.

이상현상

이상현상은 데이터베이스에서 발생하는문제 또는 부작용을 의미한다. 이상현상은 데이터의 무결성이 깨지거나 의도치 않는 결과가 발생하는 현상으로, 주로 데이터의 삽입, 갱신, 삭제 작업이나 쿼리 수행에 따라 발생한다.

 

1. 삽입 이상(Insert Anomaly)

- 데이터를 삽입할 때 발생하는 이상을 의미한다.

- 테이블의 일부 속성을 삽입하기 위해 필요한 정보가 부족하거나, 특정 조건을 만족하지 않으면 데이터를 삽입할 수 없는 경우가 이에 해당한다.

- 예를 들어, 학생 정보를 담고 있는 테이블에서 학생의 주소와 전화번호가 필요한데, 학생 저보만 삽입 되어 있고 주소나 전화번호 정보가 없는 경우가 있을 수 있다.

 

2. 갱신 이상(Update Anomaly)

- 데이터를 갱신할 때 발생하는 이상을 의미한다.

- 테이블 중 일부를 갱신하면서 일부만 갱신되어 데이터의 불일치가 발생하는 경우를 말한다.

- 예를 들어, 동일한 학생이 여러 개의 행에 중복되어 있을 때, 한 행의 학생 정보를 갱신할 때 다른 행의 정보는 그대로 남아 있는 경우가 있을 수 있다.

 

3. 삭제 이상(Delete Anomaly)

- 데이터를 삭제할 때 발생하는 이상을 의미한다.

- 특정 튜플을 삭제 하면서 그 행과 연관된 다른 행들도 함께 삭제해야 하는데, 이로 인해 의도치 않는 데이터 손실이 발생하는 경우를 말한다.

- 예를 들어, 특정 강의를 수강하는 학생들과 강의 정보가 연결된 테이블에서 특정 학생의 정보를 삭제 할 때, 그 학생이 수강한 강의 정보도 함께 삭제되면서 강의 정보가 손실 될 수가 있다.

 

이상현상은 데이터베이스 설계 단계에서 발생할 수 있으며, 정규화 같은 기법을 통해 최소화하고 해결 할 수 있다. 데이터베이스 설계에서는 중복을 피하고, 관계를 명확히 정의하여 데이터의 일관성과 무결성을 보장하는 것이 중요하다.

 

함수적 종속성

관계형 데이터베이스에서 데이터의 무결성을 유지하기 위해 사용되는 개념 중 하나이다. 하나의 속성(열)의 값이 다른 속성의 값을 결정하는 관계를 나타낸다. 간단하게 말하면, X와 Y가 두 속성이라면 X의 값이 주어졌을 때 Y의 값이 항상 유일하게 결정된다면 "X는 Y에 함수적으로 종속(dependent)되어 있다"고 할 수 있다.

 

기호로는 X -> Y와 같이 나타내며, 이는 속성 집합 X의 값이 주어졌을 때 Y의 값이 반드시 유일하게 결정된다는 것을 의미한다.

 

예를 들어, 학생 테이블에서(학번, 강의번호) -> 성적 이라는 함수적 종속성이 있다면, 특정 학생의 특정 강의에 대한 성적은 그 학생의 학번과 강의번호에 의해 결정된다는 의미이다.

 

1. 완전 함수적 종속성

- X의 어떤 부분집합 Y에 대해 X -> Y이고, X에서 어떠한 속성도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우이다.

- 어떤 속성이 기본키에 대하여 완전히 종속적일때

 

2. 부분 함수적 종속성

 - X의 어떤 부분집합 Y에 대해 X -> Y이고, X에서 어떤 속성을 제거해도 여전히 함수적 종속성이 성립하는 경우이다.

- 어떤 속성이 기본키의 일부인 속성에 대해 종속적일때

 

3. 이행적 함수적 종속성(전치 함수적 종속성)

-  X -> Y이고, Y -> Z인 경우 Z는 X에 대해 전치 함수적 종속성을 갖는다, 즉 X -> Z가 성립된다.

 

함수적 종속성은 데이터베이스 설계에서 중요한 역할을 한다. 정규화 과정에서 함수적 종속성을 이용하여 중복을 제거하고 데이터를 정규화 한다. 함수적 종속성은 또한 데이터베이스의 무결성을 유지하고 데이터의 일관성을 보장하는 데 사용된다.

 

정규화

정규화는 관계형 데이터베이스 설계에서 중복을 최소화하고 데이터의 무결성을 보장하기 위해 데이터를 구조화하는 프로세스이다. 정규화를 통해 테이블을 작게 나누어 데이터 중복을 최소화하고 쿼리 실행 속도를 향상시킬 수 있다.

 

1. 제1정규형(1NF)

- 모든 테이블의 속성들은 원자값을 가져야 한다. 즉, 각 속성의 값은 더 이상 쪼갤 수 없는 단일한 값이어야 한다.

- 각 열은 서로 다른 속성을 나타내어야 하며, 열의 순서는 중요하지 않다.

 

2. 제2정규형(2NF)

- 제1정규형을 만족하면서, 부분적 종속성이 없어야 한다. 즉, 기본키의 일부 속성이 기본키에 대해 종속되어서는 안된다.

- 기본키 전체에 함수적 종속된 속성들로만 이루어져야 한다.

 

3. 제3정규형(3NF)

- 제2정규형을 만족하면서, 이행적 종속성이 없어야 한다. 즉, 어떤 속성도 기본키에 대한 이행적으로 종속되어서는 안된다.

- 테이블 내의 모든 속성은 기본키에 직접적으로 종속되어야 한다.

 

4. BCNF(Boyce-Codd Normal Form)

- X가 모든 후보키에 대해 완전 함수적 종속이어야 한다.

 

5. 제4정규형(4NF)

- 다치 종속을 제거하는 과정이다.

 

6. 제5정규형(5NF)

- 다치 종속과 조인 종속을 제거하는 과정이다.

 

7. 비정규화(Denormalization, 역정규화)

- 정규화로 인해 여러 개로 분해된 릴레이션들에서 원하는 정보를 얻기 위해서는 조인을 사용하여 다시 연결해야 한다.

- 하지만 지나치게 자주 조인을 사용하면 응답 속도가  떨어지므로 정규화에 위배되지만 성능 향상을 위해 다시 테이블을 합쳐야 한다.

 

정규화를 사용하면 중복된 데이터를 최소화하여 저장 공간을 절약하고 데이터 일관성을 유지할 수 있다. 그리고 쿼리 성능을 향상시킬 수 있다. 하지만 정규화로 인해 분해가된 테이블 간의 조인이 증가하면서 성능 저하가 발생할 수 있다.

'DB' 카테고리의 다른 글

DB Lock 와 DB Recovery  (0) 2023.10.14
트랜잭션  (0) 2023.10.14
인덱스 (Index)  (0) 2023.10.14
HDD와 SSD, 랜덤 I/O, 순차 I/O  (0) 2023.09.29
SQL 안티패턴, SQL Injection 공격  (0) 2023.09.21