[DB] ER model

G·2023년 4월 23일
0

DB

목록 보기
5/11

Table의 tuple들의 관계를 정의하는 Relation model 다음으로 Relation들의 model을 정의하는 ER model을 알아보자.

Relational model에서, 테이블의 모델링을 배웠다면, ER model에서 테이블간의 모델링을 배운다.

Database는 다음 두 가지로 정의될 수 있다,

  • entity들의 모음
  • entity들의 관계(relationship)

entity와 relationship은 다음과 같다.

  • entity: entity는 구별가능한 하나의 object(객체)이다.
    특정 사람, 기업, 교수가 될 수 있다.
  • attributes: entity가 가지는 성질이다.
    이름, 주소, 연락처가 될 수 있다.
  • entity set: entity들의 집합이다.

entity는 tuple, entity set은 table로 매핑하면 이해하기 수월하다.
entity type은 instructor, student와 같이 entity의 종류이다.

Attribute

sql의 create table 문을 보면, attribute의 타입, 범위, check 등으로 domain을 정한다.
domain은 간단하게, 각각의 attribute가 될 수 있는 모든 값의 카테시안 프로덕트(×\times)이다.

이 결과값의 subset이 테이블이 가질 수 있는 Attribute들이다.

Attribute type은 다음과 같다.

  • Simple attribute: 하나의 값을 가지는 attribute이다.
  • composite attribute: 구조나 계층을 가지는 attribute이다.
    e.g. name attribute는 first_name, middle_name, last_name attribute를 가진다.
  • Single-valued: 하나의 값을 가지는 attribute이다.
  • Multivalued: 두 개 이상의 값을 가지는 attribute이다.
  • Derived: attribute를 계산하여 나타나는 속성이다.
    e.g. 실제 attribute인 생년월일을 계산하여 age로 표현한다.

Relationship

Relationship이란 entity간의 관계를 의미한다.
Example

44553 (Peltier) advisor 22222 (Einstein)
student의 entity와 instructor entity는 advisor 관계를 가진다.

Relationship set은 같은 Relationship들의 집합을 나타낸다.
entity간의 관계를 Relationship이라 정의했다면, 같은 Relationship을 집합을 Relationship set이라 칭한다.

{(e1,e2,...,en)e1E1,e2E2,...,e1En}\{(e_1, e_2, ... ,e_n) |e_1\in E_1, e_2\in E_2, ... , e_1\in E_n\}
E는 relationship, e는 E를 구성하는 entity들이다.

이 e들은 relationship(adivisor)을 가지고 이들의 set은 relationship set이 된다.

(44553,22222)advisor(44553, 22222) \in advisor

ER diagram

relationship set이라 하지 않고 간단하게 relationship이라 칭하겠다.
Relationship을 정하기 위한 diagram을 알아보자.

ER model의 마름모는 관계를 표현하며, 이는 구현단계에서 테이블의 형태또는 외래키 참조로 구현될 수 있다.(아닌 경우도 많다.)


instructor와 student는 advisor의 관계를 가진다.
위의 date는 두 관계가 맺어진 시점을 표시한다.(관계가 테이블로 구현됐을 때, date attribute가 tuple을 구별하는 primary key가 되면 안 된다.)

밑줄은 각 entity를 구별하는 primary key이다.

relationship을 가지는 entity set은 중복되는 attribute를 가지면 안 된다.
예를 들어, instructor와 department가 dept_name으로 연결이 될 때, instructor에 dept_name attribute가 중복되어 존재하면 안 된다는 것이다. 대개 foreign key로 참조한다.

Roles


하나의 entity set에 대한 Relationship으로, course_id와 prereq_id는 course_id로 표현된다.(이 두 attribute는 roles라 불리운다.)

Mapping Cardinality Constraints

두 개의 entity set이 관계가 맺어질 때, 하나의 entity set 객체에 대해 몇개의 다른 entity set 객체와 관계를 맺어야 하는지에 대한 제약조건이다.

  • One to one: 하나의 entity에 하나의 entity만 연결될 수 있다.
  • One to many: 하나의 entity에 다양한 entity가 연결될 수 있다.
  • Many to one: 다양한 entity가 하나의 entity와 연결될 수 있다.
  • Many to many: 다양한 entity와 다양한 entity가 연결될 수 있다.

이는 ER diagram에서 화살표로 표시된다.

  • -> one
  • - many

one-to-many의 예시는 advisor relationship에서 교수는 다양한 학생과 연결될 수 있지만, 학생은 하나의 교수가 정해지면 다른 교수와 관계를 맺을 수 없다.

Tenary Relationship

세 개의 entity set도 관계를 맺을 수 있다. 하지만 Mapping Cardinality Constraints에 대한 제약 조건이 발생한다.

  • 화살표를 하나만 사용할 수 있다.

이 문장의 의미는 두 개의 화살표가 사용되면 diagram을 해석하기 어렵기 때문이다.
A, B, C가 관계를 맺고 있고, B와 C에 화살표가 있다면,
A와 B가 정해지고 이에 대한 unique한 C가 있는지, A와 C가 정해지고 이에 대한 unique한 B가 있는지와 같이 중복된 의미를 가질 수 있다.

A에만 화살표를 두어, A가 결정되면 이에 대한 유니크한 (B, C) pair가 있다고 명시할 수 있는 하나의 화살표만 사용할 수 있다.

How Participation works

entity 간의 관계는 별개의 table 또는, 관계를 의미하는 foreign key로 표현될 수 있다.
foreign key를 가진 테이블이나, 별개의 table에 어떤 형태로 튜플이 존재해야할까?

course와 section(분반)은 관계를 맺을 때, course는 분반이 없을 수도 있지만, 분반은 무조건 course와 관계를 맺어야한다. 분반이 없는 강의는 있을 수 있지만, 강의가 없는 분반은 있을 수 없다.


위와 같이 마름모에 연결된 선이 두 줄인 경우 최소 하나의 course entity와 관계를 맺어야함을 의미한다.

section에 course_id를 참조하여 관계를 형성한다면, course에 존재하는 course_id는 section table에 존재하지 않을 수 있지만, 모든 section에 존재하는 tuple들은 course_id를 가지고 있어야만 한다.

keys

이전에 알아본 key에 대해 간단하게 알아보자.

  • Super key: tuple을 구별할 수 있는 모든 key들의 집합이다.
  • candidate key: 가장 적은 attribute를 사용하는 super key들의 집합이다.
  • primary key: candidate key들 중 선택된 하나의 key들이다.

Mapping에 따라 선택되는 관계의 primary key를 알아보자.

  • One to one: 두 개의 entity set의 primary key 중 하나를 선택한다.
  • One to many: many entity set에 해당되는 primary key를 선택한다.
  • Many to many: 두 entity set의 primary key의 합집합을 선택한다.

Weak Entity Set

sec_course는 course와 section의 relationship으로, 이 관계의 primary key는 course_id, sec_id, semester, year이다. section의 경우, course_id는 course의 primary key로, 이 key가 존재하지 않는다면 section table의 튜플들을 구별할 수 없게된다.
이러한 entity set을 weak entity set이라 부른다.

위에서 weak entity set의 primary key 역할을 하는 course_id를 제공하는 course table을 identifying(or strong) entity set이라 부른다.

identifying entity set의 primary key를 제외한 나머지 primary key들(sec_id, semester, year)을 discriminator이라 부른다.

weak entity set이 존재하는 관계를 identifying relationship이라 부른다.

마름모가 두 줄인 경우 identifying relationship이다.
점선으로 표현된 attribute들은 discriminaotr이다.

profile
열심히 안 사는 사람

0개의 댓글