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