Relational DataBase - 6. E-R Model

Ui Jin·2022년 4월 10일
0

Data Base

목록 보기
6/11

앞에서는 DataBase를 사용하는 방법에 대해서 알아보았다면, 여기서는 DataBase를 어떻게 설계해야 하는지, 즉 DataBase의 Schema를 어떻게 만들지에 대한 생각을 해보는 부분이다.

이를 위해서 Entity-Relationship Model이라는 개념을 도입하게 되는데, 이 E-R Model을 먼저 만들고, 이를 통해 Relational Model을 만들게 된다.

즉, E-R Model이 무엇인지배우고, 이를통해 E-R Diagram을 만들고, 이 E-R Diagram으로부터 Relational Model을 만드는 방법을 살펴볼 것이다.


E-R Model

E-R Model은 다음과 같이 DataBase를 Entity와 Relationship으로 나누어 생각하는 방법이다.

이 때, DataBase를 설계하는 단계이기 때문에 앞에서 배웠던 Relational DataBase의 속성과는 다른 점이 있을 수 있다.
(예를들어 E-R Model에서는 Atomic하지 않은 Data도 허용한다.)

따라서 일단 우선은 E-R Model이 Relational DataBase와 다르다는 것을 인지하고, 이 E-R Model이 어떻게 Relational DataBase로 변해가는지에 초점을 맞추어야 할 것 같다.


1. Entity

1) Entitiy

Entity는 위의 데이터를 실체화한 대상이다. 즉, Data에 실제로 들어가는 값들이라고 생각할 수 있다.


Attribute
모든 Entity들은 Attribute를 가진다.

예를들어 위의 예시에서 Einstein이라는 교수가 있다고 해보자. 이 때 Einstein이라는 Entity는 ID, name, salary라는 Attribute를 가진다는 것이다.

2) Entity Set

Entity Set은 Entity들이 모여있는 집합을 의미한다.
즉 이 Entity Set은 후에 몇가지 과정을 거쳐 테이블이되고, Entities는 이 Table의 Tuple이 된다.


Key
Relational Model과 마찬가지로 E-R Model의 EntitySet도 Key를 가진다.
(Primary Key, Candidate Key, Super Key)

3) Attribute

앞에서 잠깐 이야기 했듯이 모든 Entity들은 Attribute를 가진다.
Relational Model과 마찬가지로 이 Attribute는 Domain을 가지는데 이는 다음과 같이 나누어 볼 수 있다.
(varchar, int와 같이 구체적인 값이 아니라 추상적인 개념으로 접근해보자.)


Attribute의 Domain

  1. Simple & Composite
    • Simple
      : 단일 값만을 갖는 데이터를 의미한다.
    • Composite
      : 여러 데이터가 구조를 이루어 하나의 데이터를 형성하고 있음을 의미한다.
      (ex. name은 firstname과 lastname으로 이루어져있다.)
      (ex. Address는 Street, City, State로 이루어져 있다.)
  1. Single-Valued & Multi-Valued
    • Single-Valued
      : 단일 값만을 갖는 데이터를 의미한다.
    • Multi-Valued
      : 여러개의 데이터를 한번에 입력할 수 있는 Domain을 의미한다.
      (ex. 한명이 여러개의 Phone number를 가질 수 있다.)
  1. Derived
    : 다른 Attribute를 통해 유추할 수 있는 데이터를 의미한다
    (ex. age라는 Attribute는 birth라는 Attribute로 부터 추측이 가능하다.)

후에 Relational Model에서는 Simple하고 Single-Valued인 데이터만 남게된다.


2. Relationship

1) Relationship

Relationship은 Entity들이 관계를 맺고 있다는 것을 의미한다.

흔히 착각할 수 있는 점 중 하나는 Relation을 하나의 현상이라고 이해하면 안되고, 하나의 Data라고 생각해야한다.


Attribute
Relationship도 하나의 Data이기 때문에 Attribute를 가진다.
이 때, 이 Attribute는 우선 관계를 형성한 두 Entity의 Attribute가 포함될 수 있고, 이 외에도 관계를 표현하는 추가적인 Attribute가 있을 수 있다.

예를들어, 위의 Crick라는 교수와 Tanaka라는 학생의 관계는 Instructor.name, Student.name, Intimacy 등으로 표현할 수 있을 것이다.

2) Relationship Set

Relationship들이 모여있는 집합을 의미한다.
이 때, 이 Relationship Set가 어떻게 형성되었는지에 따라서 degree와 Cardinality라는 속성이 결정된다.


뒤의 RelationShip의 특성을 본 후에 이부분을 보도록 하자.

Primary Key

EntitySet과 마찬가지로 RelationshipSet도 하나의 Data Set이므로 Key를 가진다. 이때, Relationship은 참여하고 있는 두 Entity들로만 Identify될 수 있을 것임을 명심하자.
(즉, 관계를 설명하기 위한 추가적인 Attribute를 위해 Relationship을 만드는 것이 아니다.)

이때 이 Primary Key를 정하는 방법은 다음과 같다.

  1. One to One
    : One to One Relationship은 한쪽의 한 Entity만 있더라도 Relationship을 정의할 수 있었다.
    • 즉, 두 EntitySet의 PrimaryKey중 하나의 PrimaryKey로 선택한다.
  1. Many to One
    : Many to Many Relationship은 Many쪽의 Entity가 있어야 Relationship을 정의할 수 있었다.
    • 즉, Many를 담당하는 EntitySet의 PrimaryKey를 PrimaryKey로 선택한다.
  1. Many to Many
    : Many to Many Relationship은 양쪽 모두의 Entity가 있어야 Relationship을 정의할 수 있었다.
    • 즉, 두 EntitySet의 PrimaryKey를 조합해 primarykey로 정한다

3) Relationship Set의 특성

1. Relationship Set의 Degree


2. Relationship Set의 Cardinality


3. Relationship Set의 Participation


4. Strong EntitySet과 Weak EntitySet

E-R Model에는 중복된 Attribute가 각 Entity에 존재하면 안된다는 규칙이 있다. 즉, 다음과 같이 중복된 Attribute가 있을 경우 한쪽을 지워주고, 이를 Relation으로 표현해야 한다.

이 때, 위의 경우에서는 겹치는 Attribute가 지워지는 쪽에서 Primary key를 구성하지 않았으므로 문제가 되진 않는다.

하지만, 만약 그렇지 않다면, 한 EntitySet에 의해 다른 EntitySet이 결정되는 관계가 되어버린다.

이렇게, 다른 EntitySet에 의존하는 EntitySet을 Weak EntitySet이라고 하고 그렇지 않으면 Strong EntitySet이라고 한다.

이 때, Weak EntitySet의 PrimaryKey는 더이상 제역할을 하지 못한다. 즉, 해당하는 Strong Entity Set의 PrimaryKey와 합쳐져야 PrimaryKey의 역할을 할 수 있다.

이 Weak EntitySet의 PrimaryKey를 PartialKey혹은 discriminator라고 한다.


3. E-R Diagram

1) Entity Set

여태껏 봐왔듯이 Entity Set은 사각형으로 표시하고, 그 안에 Attribute를 표시한다.

2) Relationship Set

마찬가지로 여태껏 봐왔듯 Relationship Set은 마름모로 표시하고 이 Relationship에 참여하는 EntitySet을 연결하도록 한다.

3) Relationship의 Extra Info

Relationship에 참여하는 EntitySet의 Entity들 이외에 Relationship을 설명하는 추가적인 Attribute가 있을 수 있다. 이것은 점선과 사각형을 통해 표현해준다.

2) Cardinality

Cardinality는 화살표로 표현한다. 이 때, 화살표의 시작점의 Entity가 결정되면 화살표의 도착점의 Entity가 결정된다는 것으로 해석할 수 있다.
(One쪽에 화살표의 머리가 존재)


Ternary Relationship의 Cardinality

세개 이상의 Ternary Relationship에서는 화살표를 하나만 사용해 표현할 수 있다.

이 이유는 화살표가 2개 이상이 들어갈 경우 해석하는데에 모호성이 생기기 때문이다.

(예시)

해석1
: Student가 결정되면 project와 instructor가 결정된다.
해석2
: Student와 Project가 결정되면 Instructor가 결정되고, Student와 Instructor가 결정되면 Project가 결정된다.

3) Participation

1. Total Participation

위와같이 Total Participation은 겹친 선으로 표현한다.


2. Partial Participation

위와 같이 Partial Participation은 하나의 선으로 표현한다.

4) Strong/Weak Entity Set

1. Strong Entity Set

위와 같이 우리가 지금까지 봐왔던 EntitySet은 StrongEntitySet이었다.


2. Weak Entity Set

위와 같이 Weak EntitySet은 겹친 사각형으로 표현한다.
또한, 그 PartialKey는 점선으로 표현한다.



Relational Schema

이제 위에서 만든 ER-Diagram을 통해 Relational Schema를 만드는 방법을 알아보자.

(참고)
Relational Schema는 Section(couse_id, sec_id, semester, year)와 같이 표현하는 것을 의미한다.

1. EntitySet

1) Composite & Multi-Valued

우선 EntitySet에 Composite나 Multi-Valued Attribute가 있을 경우, 다음과 같은 작업이 필요하다.

  1. Composite Attribute가 있을 경우
: Flattened, 즉 구조를 이루던 값을 각각 모두 넣거나 합쳐서 넣어주어야 한다.
  1. Multi-Valued Attribute가 있을 경우
: 두 개의 Entity Set으로 만들어 준다.

Multi-Valued Attribute일 때 나누어진 EntitySet의 Primary는 나눈 기준과 나누어진 Column 모두로 PrimaryKey를 구성해야한다.

2) Strong EntitySet

Strong Entity Set의 경우 그냥 그대로 Relational Schema로 바꾼다


Instructor(ID, dept_name, salary, phone_number_id)

3) Weak EntitySet

Weak Entity Set의 경우 해당 Set을 연결하는 Strong Entity Set의 Primarykey와 합쳐서 표현한다.


Section(course_id, sec_id, semesterm, year)

2. RelationShip

1) Weak EntitySet을 포함하는 경우

먼저 Weak EntitySet을 포함하는 경우의 RelationShip은 따로 Relation을 만들지 않는다.


Sec_course는 Relation을 만들지 않는다.

2) Many to Many를 표현한 Relationship의 경우

이 경우는 항상 Table을 새로 만들고 Primary key는 Relationship을 갖는 두 Attribute로 정한다. *(이 때, Extra Attribute가 있을 경우 추가해 주는 것을 잊지말자.)*

teaches(ID, course_id, sec_id, semester, year)

(양 EntitySet를 통해 만든 Table의 Primary key를 가져오고, 추가할것이 있으면 추가하도록 하자)
(참고로 여기서는 Section을 Table로 만들었을 때, course_id가 포함되었다.)

2) Total Participation을 포함한 경우

위와 같이 Total Participation이 포함된 경우 새로운 Table을 만들지 않고, Many에 해당하는 Entity Set에 One에 해당하는 Primary Key를 추가해주기만 하면 된다.
(One to One의 경우는 아무거나 1개)


Inst_dept는 Relation을 만들지 않는다.

3) Partial Participation인 경우

마찬가지 방법으로 새로운 Table을 만들게 된다.

profile
github로 이전 중... (https://uijinee.github.io/)

0개의 댓글

관련 채용 정보