철학과 학생의 개발자 도전기
이상과 정규화 본문
1. 이상
- 릴레이션에서 속성 간 종속이나 데이터 중복으로 인해 발생하는 문제
- 데이터 조작 시 발생하며 삽입, 수정, 삭제 이상이 있다.
- 삽입 이상: 의도하지 않은 데이터까지 삽입해야 데이터 추가가 가능한 문제
- 수정 이상: 데이터가 중복되어 일부만 수정되고 데이터 모순이 발생하는 문제
- 삭제 이상: 데이터를 삭제할 때 의도하지 않은 데이터도 같이 삭제되는 문제
삽입 이상
학생(학번, 이름, 나이, 성별) 데이터를 추가할 때 강의 데이터를 함께 넣어줘야 한다.
수정 이상
3번 레코드를 수정하면 4번 레코드와 충돌이 발생한다.
삭제 이상
김영호 학생 데이터를 삭제하면 데이터베이스 개론 데이터도 함께 삭제된다.
2. 정규화
- 데이터 중복과 종속 관계를 제거하여 이상현상을 해소하는 과정
- 1NF, 2NF, 3NF, BCNF가 실무에서 주로 사용된다.
1정규형(1NF)
모든 속성은 하나의 원자값만 가진다.
취미 속성에 축구, 야구, 농구가 들어갈 수 없다.
2정규형(2NF)
모든 속성이 완전 함수 종속을 만족한다.
기본키의 일부와 종속 관계인 속성이 있으면 안된다.
기본키가 "강의 번호 + 학번"이면 점수 속성은 완전 함수 종속을 만족하지만, 이름 속성은 학번과 종속 관계이므로 부분 종속이다.
그러므로 학번과 이름은 새로운 테이블로 분리해야 한다.
3정규형(3NF)
기본키가 아닌 모든 속성에서 이행 종속성을 제거한다.
학과번호와 학과이름은 이행 종속적(학과 번호를 알면 학과 이름도 알 수 있음)이므로 새로운 테이블로 분리해야 한다.
BCNF
모든 결정자가 후보키 집합에 속해야 한다.
기본키는 "학생번호 + 과목"이다.
지도교수는 결정자이지만 후보키 집합에 속하지 않으므로, 지도교수와 과목을 새로운 테이블로 분리한다.
결정자: 지도교수를 알면 과목도 알 수 있음
후보키: 지도교수를 알아도 학생 번호는 알 수 없으므로 후보키에 속하지 않음
'데이터베이스' 카테고리의 다른 글
옵티마이저 (0) | 2023.11.05 |
---|---|
Lock과 MVCC (0) | 2023.11.05 |
트랜잭션 (0) | 2023.10.29 |
인덱스 (0) | 2023.10.28 |
DBMS와 RDB의 키 (0) | 2023.10.19 |