데이터 베이스 정규화 ( Normalization )
목적
- 테이블 내의 중복된 데이터를 제거
- 데이터 추가, 수정, 삭제 간에 발생하는 이상현상( Anoamly ) 를 최소화
- 일반적으로 3 NF 단계의 정규화를 마치면 정규화된 테이블이라고 표현
이상현상 ? ( Anomaly )
데이터의 중복 등 정규화가 진행되지 않음에 따라 발생하는 부작용을 말한다.
- 삽입 이상 ( Insertion Anomaly )
데이터를 삽입하는데 불필요한 속성까지 추가해야하는 경우를 말한다.
- 기본 키가 { Student_id , Course_id } 인 경우, 어떤 수업도 수강하지 않는 학생의 경우
Course_id가 없는 현상이 발생한다.
- 기본 키가 Null 이 될 수는 없기 때문에, "미수강" 이라는 불필요한 속성을 추가해야하는 경우가 발생.
- 갱신 이상 ( Update Anomaly )
데이터를 갱신한 후 일관성이 위반되는 경우
- 어떤 학생이 개명을 통해 Student_Name 이 바뀌었다고 할 때,
해당 개명학생의 모든 튜플을 갱신해줘야만 한다.
하지만, 이렇게 하지 않고 하나의 튜플만 갱신할 경우 발생하는 문제를 '갱신 이상' 이라고 한다.
- 삭제 이상 ( Deletion Anomaly )
데이터를 삭제하는데 의도치 않은 항목까지 함께 삭제되는 경우
- 수강 취소를 위해 수강 정보를 삭제하려고 할 때,
수강 정보와 학생 정보가 하나의 튜플에 같이 들어있다면,
수강 정보는 물론 학생의 정보 또한 삭제되어버린다.
- 위 처럼, 원하지 않는 데이터도 함께 삭제 되어버리는 현상을 '삭제 이상' 이라고 한다.
함수적 종속성 ( Functional Dependency , FD )
함수적 종속성이란, 테이블에 있는 두 개의 속성들 사이의 제약을 말한다.
테이블에 X , Y 필드가 있다고 했을 때,
X 의 값이 Y에 속한 '하나의' 값에만 매핑이 되는 경우를 함수 종속적이다 라고 하며,
X -> Y 로 표현한다.
이 때, X를 결정자, Y를 종속자 라고 한다.
완전 함수 종속 ( Full Functional Dependency )
기본키가 종속자이며, 기본키가 여러속성으로 구성이 되어있을 경우,
기본키를 구성하는 모든 속성이 포함된 부분집합 또한 종속자일 경우
부분 함수 종속 ( Partial Functional Dependency )
릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키를 구성하는
여러 속성들의 부분집합 중 일부분에만 종속될 경우.
위 테이블에서, 기본키는 { 고객 id , 상품 id } 이며, '주문 상품' 의 경우,
상품 id만 알아도 식별이 가능하기 때문에, 주문 상품은 기본키에 부분 함수 종속 관계 이다.
'가격' 의 경우, 상품 id 에 부분 함수 종속 관계 라고 할 수 있지만,
이 경우에는 기본키 외에도 '수량' 에도 종속이 되어있다.
이 경우에는 논리적으로 자연스럽지 않으며, 개선될 필요가 있다.
이행 함수 종속 (Transitive Functional Dependency )
X Y Z 3가지 부분집합을 가진 릴레이션에서 ,
X -> Y 이고, Y -> Z 일때, X-> Z 가 성립이 되는 경우를 말한다.
( Y- > X가 아닐 경우 )
위 테이블을 보면,
'가격' 은 { 고객 id , 상품 id -> 수량 -> 가격 } 이러한 관계라고 볼 수 있으며,
{ 고객 id , 상품 id } 에 이행적 종속 되어있다 라고 할 수 있다.
기본키인 상품 id와, 기본키가 아닌 수량이 있어야만 가격이 유효할 수 있다는 것이다.
이러한 관계 또한 논리적으로 부자연스럽기 때문에
부분 함수 종속과 이행 함수 종속을 제거하여 테이블을 논리적이고
효율적이게 만드는 것을 정규화 라고 한다.
'내일배움캠프' 카테고리의 다른 글
24.10.11 TIL 타워 디펜스 프로젝트 (0) | 2024.10.11 |
---|---|
24.10.10 TIL 타워 디펜스 프로젝트 (0) | 2024.10.11 |
24.10.04TIL 리얼타임 과제 (0) | 2024.10.04 |
24.10.02 TIL 리얼타임 과제 (0) | 2024.10.02 |
24.10.01 TIL 리얼타임 과제 (0) | 2024.10.01 |