📌 삽입 이상(insertion anomaly)
릴레이션에 새 데이터를 삽입하려면 불필요한 데이터도 함께 삽입해야 하는 문제
[삽입 이상이 발생하는 예]
📌 갱신 이상(update anomaly)
릴레이션의 중복된 투플들 중 일부만 수정하여 데이터가 불일치하게 되는 모순ㅇ이 발생하는 문제
[갱신 이상이 발생하는 예]
📌삭제 이상(deletion anomaly)
릴레이션에서 투플을 삭제하면 꼭 필요한 데이터까지 손실되는 연쇄 삭제 현상이 발생하는 문제
[삭제 이상이 발생하는 예]
"X가 Y를 함수적으로 결정한다"
각 고객 아이디 속성 값에 대응되는 고객이름 속성과 등급 속성 값이 단 하나임
(✏️ 정소화라는 고객이 등급을 결정한다고 할 수 있겠는가? NO 동명이인이 있다면 다른 등급을 가질 수 있기에 함수 종속관계가 존재한다고 볼 수 없다)
속성 자체의 특성과 의미를 기반으로 종속성을 판단해야 함
일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정함
기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자고 될 수 있음
(✏️고객 아이디가 고객이름을 결정/ 고객아이디+이벤트번호가 당첨여부를 결정. * (주의) 고객아이디가 당첨여부를 결정하지 못한다. apple 당첨여부 Y/N 둘 다 존재)
함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성오디도록 분해해서 이상현상이 발생하지 않는 바람직한 릴레이션으로 만들어가는 과정
정규화를 통해 릴레이션은 무손실 분해(nonloss decomposition) 이 되어야 함
제 1 정규형(1NF)
릴레이션에 속한 모든 속성의 도메인이 원자값으로만 구성되어 있으면 제 1 정규형에 속한다.
이벤트번호/당첨여부 -> 원자값 만족하지 못함
→ 삽입 이상: 멜론이라는 고객 이벤트 참여하지 않으면 테이블에 삽입할 수 없다.
→ 갱신 이상: apple이라는 고객이 등급을 gold애서 vip로 변경, 근데 과정 중에 변경 안 되는 행이 존재할 수 있다
→ 삭제 이상: orange라는 고객라는 사람이 이벤트 취소, orange 등급 등등도 삭제 됨
제 2 정규형(2NF)
릴레이션이 제 1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형에 속한다.
→ 갱신 이상: gold라는 고객의 할인 율 15%로 늘려주자 but, 일부만 갱신
→ 삭제 이상: banana라는 고객 탈퇴, 데이터 손실이 발생
→ 삽입 이상: 브론즈 등급을 하나 더 만들고 싶을 때, 브론즈라는 고객이 한 명도 없다면, 고객 아이디 가질 수 없기에 삽입 불가능
이상 현상의 발생 이유
문제 해결 방법?
: 이행적 함수 종속이 제거되도록 고객 릴레이션을 분해 → 분해된 릴레이션은 제 3정규형에 속하게 됨
제 3정규형(3NF)
릴레이션이 제 2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3정규형에 속한다.
(정규화 예제 직전까지 들음)