[DB] Reduction to Relational Schemas

G·2023년 4월 30일
0

DB

목록 보기
6/11

ER Model 설계를 마친 후, 어떻게 Relational Schema로 변경되는지와 이 과정에서 발생하는 문제점을 알아보자.

Schema 생성 과정

ER Model에서 Schema로 생성하는 과정은 다음과 같다.

  1. simple attribute로 이루어진 strong entity set의 schema 생성
  2. weak entity set schema 생성
  3. composite, multivalued attribute를 가진 entity set의 schema 생성
  4. relationship set 중, Many-to-Many의 schema 생성
  5. one-to-many relationship set schema 생성

1. Strong entity set composed of simple attributes & Weak entity set


course와 같은 entity set의 schema를 먼저 생성한다.
이후 section과 같은 weak entity set의 schema를 생성한다.
weak entity set의 primary key는 strong entity set의 primary key를 참조하여 처리한다.

2. Composite and mutlivalued attributes


{phone_number}와 같은 multivalued attribute는 따로 테이블로 처리한다.

이는 weak entity set을 처리하는 것과 비슷하며, 기존의 entity set E의 primary key와 multivalued M을 primary key로 지정한다.
Many-to-Many 관계로 설명할 수 있다. one-to-many이라 생각할 수 있지만, 한 연구실의 학생들은 동일한 전화번호를 부여받을 수 있다.

Speical case

만약 section과 time_slot을 schema로 구현한다면, time_slot_id 하나가 primary key로 생성되며, 이는 multivalued attribute이기 때문에, 이 속성값들은 또 다른 테이블을 생성하게 된다.

이럼 비효율적이기 때문에 그냥 모든 attribute들을 flat하게 편다.

time_slot(time_slot_id, day, start_time, end_time)

위와 같이 되며, 이렇게 설계한다면 primary key의 일부이기 때문에, foreign key로 지정될 수 없게 된다.

이러한 이유로 section에는 따로 이름만 같게 하여 time_slot_id를 저장해야한다.

3. Many-to-Many Relationship Sets

두 table을 Many-to-Many라 가정

그럼 두 primary key의 합집합을 schema의 primary key로 설정한다.

takes, teaches 동일하다.

4. Many-to-one


Many-to-one인 경우, Many가 total participation이라면, 테이블을 만들지 않고 one의 primary key를 many 테이블이 참조하게 한다.

advisor은 total participation이 아니기 때문에, table을 생성해야한다.

5. One-to-One

Design Issue


phone_number가 multivalued이거나, location과 같이 거기다 더 많은 정보를 넣고 싶다면 attribute보다 entity set으로 표현하는 것이 좋다.


이전에 section과 student의 관계인 takes를 본적이 있을 것이다. 이를 수강이력정보의 entity set으로 설계하는게 좋을까, takes인 관계가 좋을까? 이는 client의 원하는바에 따라 다르겠지만, 아마도 후자가 좋을 것이다. action을 relationship으로 표현하는 것이 적합하다.

Binary vs Non-binary

Non-binary 관계는 다수의 binary 관계로 더 바꿀 수 있다.
웬만하면 binary를 사용하는 것이 좋지만, 예외가 존재한다.

자식, 아빠, 엄마를 연결하는 parent relationship보다, mother, father binary relationship을 사용하여 편부모를 나타낼 수 있을 것이다.


하지만 이와 같이 하나의 프로젝트에 대한, 이를 수행하는 학생과 가이드 역할인 교수를 ternary relationship이 더 좋다.


위와 같이 ternary relationship을 binary로 변경할 수 있다. 이 방법은 관계를 이루는 attribute들을 하나의 tuple로 보는 것이다. 그렇게 새로운 entity set으로 만들 수 있다.

그럼 세 개의 binary relationship이 만들어진다.

  • constraints를 모두 지킬 수 없을 수 있고, 의미를 잃어버릴 수 있다.
  • relationship을 위해 추가적인 정보가 필요할 수 있다.
  • E를 weak entity set으로 표현하여 E의 튜플을 식별할 추가적인 attribute를 피할 수 있다.
profile
열심히 안 사는 사람

0개의 댓글