[HUFS/Database] Normalization: Relational Database Design (1)

박경민·2023년 5월 4일
0

[CS/Database]

목록 보기
11/16

ER 다이어그램에서 테이블을 만드는 과정 중 Normalization 을 사용한다.

Relational Database Design

  • 스키마의 완성이 목표
  • 두 개의 작은 스키마를 결합, 하나의 큰 스키마로 재구성 / 하나의 큰 스키마를 분할하여 두 개 이상의 작은 스키마로 재구성.

Bad example of combined schema

loan_number 가 하나로 결합. natural-join 하는 과정으로 보임. (두 테이블을 결합하는 것은 natural join 임.)

바람직한 결합인가? 정보의 중복이 발생.

Good example

아까는 여러 customer_id 가 하나의 loan_number 을 가졌지만, 지금은 그게 아니므로 정보의 중복이 발생하지 않아 좋은 결합이다.

Deomposition of a schema

두 개의 테이블로 나누자.

1,2,3은 각각 공통 att를 다르게 한 결과이다. 3번처럼 구성했을 경우 23-602가 어떤 loan_number 인지 확정할 수 없으므로 정보의 손실이 일어난다.

2,3 은 natural join 으로 원래의 테이블을 얻을 수 있다. 이럴 경우 분할이 잘 되었다고 판단한다.

Bad example

Natural join 하게되면 원래 테이블에 없었던 정보가 추가된다. (이름이 Kim 으로 같기 때문이다.)
이럴 때는 어떤 att 를 공통으로 줄 것인지 잘 선택해야 하고, 이를 정규화라 하는 것이다.

Design Guidelines for Relational Databae

결합? 분할?
손실 없이 분할?
함수 종속정규화 개념이 답이 된다.

정규화란? 정규형Normal Form을 구성하는 과정
1NF, 2NF, 3NF, BCNF

Redundant Information in Tuples

중복된 정보가 있을 경우: 낭비, 이상 문제를 야기

  • 삽입 이상
  • 삭제 이상
  • 갱신 이상

Anomaly

중복된 값이 너무 많은 테이블에서 발생하는 문제를 살펴보자.

삭제이상: 200인 학생이 C123 수업을 포기하면 200 학생의 학년 정보가 완전히 삭제된다.
이를 삭제 이상, 연쇄적 삭제로 인해 정보의 손실이 발생했다고 한다.

삽입이상: 학번이 600인 신입생의 정보를 삽입한다면? 수강과목 없이 학년 정보만 삽입할 수 없다. 왜? cno 가 primary key 로 설정되어 null 로 입력할 수 없기 때문이다.

갱신이상: 학번이 300인 학생이 1학년에서 2학년으로 변경된다면 세 튜플을 모두 변경해야.
하나라도 갱신이 안되면 inconsistency

profile
Mathematics, Algorithm, and IDEA for AI research🦖

0개의 댓글