이상 (Anomaly)
* 한 개체의 애트리뷰트들 간에 존재하는 여러 종속관계(dependency)를 하나의 릴레이션으로 표현하였기 때문에 생기는 현상
1) 갱신 이상
* 반복된 데이터 중에 정확하지 않거나 일부만을 수정해 데이터의 모순과 일관성이 없어지는 등 불일치가 발생
2) 삽입 이상
* 불필요한 정보를 함께 저장하지 않으면 원하는 정보를 삽입하지 못하는 현상.
* 원하지 않는 정ㅂ의 강제 삽입
* 예를 들어 기본키가 수강과목인 경우, 어떤 학생이 2학년이라는 정보만을 삽입하고 싶지만 (해당 학생이 수강하는 과목이 없거나, 휴학생일 때) 기본키는 널(Null)값을 가질 수 없기 때문에 해당 학생의 수강과목을 삽입하지 않는 이상 학년 정보를 삽입 할 수 없을 때
3) 삭제 이상
* 유용한 정보를 함께 삭제하지 않고는 원하는 특정 정보를 삭제하는 것이 불가능 한 현상
* 연쇄 삭제에 의한 정보 손실이 일어난다.
4) 이상 해결 방법
* 하나의 릴레이션에는 하나의 종속 관계만 표현한다
* 애트리뷰트들 간의 여러 종속관계를 분해(decomposition)
해결법 => 정규화
정규화 (Normalization)
* 데이터의 중복을 방지하고 보다 효율적으로 데이터를 저장하기 위함.
* 이상 현상의 발생 가능성을 줄인다.
1) 제 1정규화 (1NF)
* 반복되는 속성을 제거한 뒤 모든 속성이 원자 도메인만으로 되어 있는 정규형
* 모든 속성이 원자값만으로 이루어진 릴레이션
* 예 ) 수강 지도 릴레이션
! 기본키에 부분 함수 종속된 Attribute가 존재해 이상 발생
=> 프로젝션으로 부분 함수 종속을 제거한다.
2) 제 2정규형 (2NF)
* 제 1정규형을 만족하고, 부붐함수적 종속을 제거하여 완전 함수 종속을 만족하는 정규형
* 키가 아닌 모든 Attribute가 모두 기본키에 완전 함수 종속
* 예) 수강 릴레이션, 지도 릴레이션으로 분해
! 이 때 지도교수가 어떤 학과에 속하는지 정보를 삽입 할 수 없고, 만약 지도 릴레이션에 한 학생을 삭제하려 할 때 지도교수가 릴레이션에 정보가 하나 뿐이라면 삭제했을 시 해당 지도교수의 정보를 어디서도 찾을 수 없게 된다.
! 이행적인 함수 종속문제 발생 ( A->B 이고 B->C 일 때, Attribute C는 Attribute A에 이행적 함수 종속이다.)
=> 프로젝션으로 릴레이션을 분해해 이행적 함수 종속을 제거한다.
2) 제 3정규화 (3NF)
* 제 2정규형을 만족하고, 이행적 함수 종속 관계를 제거하여 비 이행적 함수 종속 관계를 만족한다.
* 키가 아닌 모든 Attribute들은 기본 키에 이행적 함수 종속이 되지 않음
* 키가 아닌 애트리뷰트 값의 갱신 시, 불필요한 부작용(이상)은 발 생하지 않는다.
* 모든 이원(binary) 릴레이션은 3NF에 속한다.
* 예) 지도 릴레이션을, 학생지도, 지도교수 릴레이션으로 분해
! 제 3 정규형을 적용할 수 없을 때
- 복수의 후보 키를 가지고 있고
- 후보 키들이 두 개 이상의 애트리뷰트들로 구성되고
- 후보 키들의 애트리뷰트가 서로 중첩되는 경우
! 이 때 결정자가 후보키가 아닌 이유로 이상이 발생한다.
=> 모든 결정자가 후보키가 아닌 함수 종속을 제거한다.
4) BCNF
* 제 3정규형을 만족하고, 결정자가 후보키가 아닌 함수 종속 관계를 제거해 모든 결정자가 후보키이도록 한다.
* 만약 한 학생은 각 과목에 대해 오직 한 교수의 강의만 수강할 수 있고, 각 교수는 한 과목만 담당하며, 한 과목을 여러 교수가 담당할 수 있다고 했을 때
! 어떤 한 교수가 어떤 과목을 담당한다는 정보를 삽입하려 할 때 수강 학생이 있어야 삽입이 가능하며 (삽입 이상)
릴레이션에 한 지도교수가 한 명의 학생과 강의를 하고 있을 경우 학생을 삭제할 경우 유일한 지도교수 정보가 함께 삭제된다(삭제이상)
=> 다치 종속 제거
* 1:다 대응. 이상 현상을 발생시킬 수 있다.
* A, B, C가 릴레이션 R의 애트리뷰트의 부분 집합이라 할 때 애트리뷰트 쌍 (A, C)값에 대응되는 B값의 집합이 A값에만 종속 되고 C값에는 독립적이면 B는 A에 다치 종속이라 하고 A↠B로 표기한다.
* 예를들어 한 학생이 여러개의 과목을 수강할 수 있으므로 학생과 수강과목 속성은 다치종속이다.
5) 제 4정규형 (4NF)
* 다치 종속을 제거한다.
6) 제 5정규형 (5NF)
* 후보키를 통하지 않은 조인종속을 제거한다.
* 조인 종속 : 릴레이션이 그의 어떤 프로켁션들을 조인한 결과값과 똑같아야 한다.
함수 종속
* 어떤 릴레이션 R에서 X 와 Y를 각각 R의 애트리뷰트 집합의 부분 집합이라고 할 경우, 애트리뷰트 X의 값 각각에 대하여 시간에 관계없이 항상 애트리뷰트 Y의 값이 오직 하나만 연결되어 있을 때 Y는 X에 함수 종속이라 하고 X를 결정자, Y를 종속자라고 한다.
* 완전 함수 종속 : 회원번호, 수강과목 -> 성적
*부분 함수 종속 : 회원번호 -> 이름
'DataBase' 카테고리의 다른 글
SQL Server와 PostgreSQL에서 문자열 비교 차이점 (0) | 2023.08.03 |
---|---|
기초 : 데이터 (0) | 2016.11.09 |
기초 : 테이블 (0) | 2016.11.09 |
기초 : 데이터베이스 (0) | 2016.11.09 |
데이터베이스 : 정의, 구조, 무결성 (0) | 2016.10.30 |