ER 다이어그램에서 테이블을 만드는 과정 중 Normalization 을 사용한다.
loan_number 가 하나로 결합. natural-join 하는 과정으로 보임. (두 테이블을 결합하는 것은 natural join 임.)
바람직한 결합인가? 정보의 중복이 발생.
아까는 여러 customer_id 가 하나의 loan_number 을 가졌지만, 지금은 그게 아니므로 정보의 중복이 발생하지 않아 좋은 결합이다.
두 개의 테이블로 나누자.
1,2,3은 각각 공통 att를 다르게 한 결과이다. 3번처럼 구성했을 경우 23-602가 어떤 loan_number 인지 확정할 수 없으므로 정보의 손실이 일어난다.
2,3 은 natural join 으로 원래의 테이블을 얻을 수 있다. 이럴 경우 분할이 잘 되었다고 판단한다.
Natural join 하게되면 원래 테이블에 없었던 정보가 추가된다. (이름이 Kim 으로 같기 때문이다.)
이럴 때는 어떤 att 를 공통으로 줄 것인지 잘 선택해야 하고, 이를 정규화라 하는 것이다.
결합? 분할?
손실 없이 분할?
함수 종속과 정규화 개념이 답이 된다.
정규화란? 정규형Normal Form을 구성하는 과정
1NF, 2NF, 3NF, BCNF
중복된 정보가 있을 경우: 낭비, 이상 문제를 야기
중복된 값이 너무 많은 테이블에서 발생하는 문제를 살펴보자.
삭제이상: 200인 학생이 C123 수업을 포기하면 200 학생의 학년 정보가 완전히 삭제된다.
이를 삭제 이상, 연쇄적 삭제로 인해 정보의 손실이 발생했다고 한다.
삽입이상: 학번이 600인 신입생의 정보를 삽입한다면? 수강과목 없이 학년 정보만 삽입할 수 없다. 왜? cno 가 primary key 로 설정되어 null 로 입력할 수 없기 때문이다.
갱신이상: 학번이 300인 학생이 1학년에서 2학년으로 변경된다면 세 튜플을 모두 변경해야.
하나라도 갱신이 안되면 inconsistency