Entity Relationship Model

youngwiki
Pinkgo (토론 | 기여)님의 2025년 3월 24일 (월) 03:06 판 (Relational Set)

상위 문서: Database Design

개요

Entity Relationship Model(ER model)은 enterprise를 entity와 relationship으로 모델링하여 DB 설계를 명확하게 정의한다. 즉, ER model은 실제 enterprise의 meanings와 interactions를 개념적인 schema로 mapping하는데 유용하다. 이 모델은 데이터 구조와 그들 간의 관계를 entity-relationship diagram을 통해 시각적으로 표현하여, DB 설계 과정을 이해하기 쉽게 만든다.

개념

Entity Set

  • Entity: object들로부터 구분되는 enterprise의 object나 thing으로, attribute의 집합으로 표현된다.
    • 예를 들면 준영, 삼성, 현대 등이 있다,
  • Entity Set: 동일한 attribute를 공유하는 동일한 유형의 entity의 집합이다.
    • 예를 들면 서강대에서 재직하는 교수의 집합이 있다.
    • entity는 attribute의 집합으로 표현된다. 예를 들어 학생이라는 entity는 이름, 학번, 전공등으로 표현된다.
    • attribute의 부분집합은 entity set의 primary key를 구성한다. 이는 해당 집합의 각각의 원소들을 구분하는 역할을 한다. 학생 entity 집합에서는 학번이 그 역할을 할 수 있다.
Entity set을 시각적으로 나타낸 예시이다.

이러한 entity set은 아래와 같이 시각적으로 표현된다.

  • 각각의 entity set들은 직사각형으로 표현된다.
  • Attribute들은 entity ractangle 안에 열거된다.
  • 밑줄쳐진 attribute는 해당 attribute가 primary key임을 나타낸다.

Relationship Sets

  • Relationship: 몇몇 entity들 사이의 연관을 나타내는 집합이다.
    • 예를 들어서 학생 junyoung과 교수 junho 사이에는 advisor라는 relationship을 정의할 수 있다.
  • Relationship Set: entity set으로 부터의 두개 이상의 entity사이로 나타나는 수학적인 relation[1]이다. 이는 수학적으로 다음과 같이 나타낼 수 있다.
    • {(e1,e2,...,en)|e1E1,e2E2,...,enEn}where(e1,e2,...,en)isarelationship.
    • (junyoung,junho)advisor 에서 (junyoung, junho)는 relationship instance에 해당하며, {E1,E2,...,En}[2]은 relationship set에 속한다.

또한 instructor, student entity set의 각 사이의 relation을 위와 같이 표현할 수 있다.

또한 Relationship Set은 각 entity set 사이에서 위와 같이 다이아몬드 모양 박스 형태로 표시된다.

E-R model에서 relationship set의 attribute은 두 개 이상의 entity set 간의 관계를 설명하는 데 사용된다. relationship set은 entity 간의 relation을 나타내며, 이 relation에 대한 attribute을 추가할 수 있다. 예를 들어, 학생과 전공 과목이 relation을 맺고 있다고 할 때, 이 relation의 attribute는 "등록일"이나 "성적" 등이 될 수 있다. relationship의 attribute는 해당 relation에 대한 추가적인 정보를 제공한다. 이는 다음과 같은 특성을 가진다.

  • relationship attribute은 단일 값[3] 또는 다중 값[4]을 가질 수 있습니다.
  • relationship attribute은 multivalued attributes[5]이나 composite attributes[6]이 될 수 있다.
role 예시

role

relation에서 entity가 수행하는 역할을 그 entity의 role이라고 한다. relationship set에 참여하는 entity set들은 일반적으로 구별되므로 role이 명시될 필요가 없고, 실제로도 그러하다. 그러나 relation의 의미를 명확히 해야 할때가 존재하며, 이때 역할이 유용합니다. 그 경우 중 하나가 relationship set에 참여하는 entity set들이 구별되지 않는 경우, 즉 동일한 entity set이 여러 번 relationship set에 참여하는 경우가 있다. 이를 recursive relationship set이라고 하며, 이 경우에는 entity가 relationship instance에서 어떻게 participating하는지 명시하기 위해 role이 필요하다. 예를 들어서 대학에서 제공되는 모든 강좌에 대한 정보를 기록하는 entity set인 course를 고려해보자. 하나의 강좌(C2)가 다른 강좌(C1)의 전제조건인 상황을 나타내기 위해, 우리는 course entity set을 pair을 사용하여 나타내는 관계 집합 prereq를 정의한다. 이 경우, 한 쌍에서 첫 번째 course는 C1(main course)의 role을 하고, 두 번째 course는 C2(prerequest course)의 role을 한다. 이렇게 모든 prereq 관계는 (C1, C2) pair로 구현되며, (C2, C1) pair는 생성될 수 없다. E-R diagram에서는 role을 오른쪽 같이 다이아몬드와 직사각형을 연결하는 선에 레이블을 붙여 표시한다.

Ternary Relationship

Degree of a Relationship Set

  • Binary relationship은 오직 두개의 entity set들만 연관되어 있는 집합이다.
    • 대부분의 DB에 있는 relationship set들은 binary이다.
  • Non-binary relationship은 세 개 이상의 entity set들이 연관되어 있는 집합이다.
    • Degree of a Relationship Set은 연관되어 있는 entity set의 개수에 해당한다. 예를 들어 binary relationship의 degree는 2이다.

Complex Attributes

Representing Complex Attributes in ER Diagram

Attribute는 다음과 같이 구분된다.

  1. Simple and composite attributes
    • Simple attributes: attribute가 나누어지지 않고 단일하다.
    • Composite attributes: attribute가 여러 하위 attribute로 나눠진다.
  2. Single-valued and Multi-valued attributes[7]
  3. Derived attributes: 다른 attribute로부터 계산될 수 있는 attribute
    • 저장되어있지 않지만 요청받을 경우 생성된다.
    • 예를 들어 age attribute는 date_of_birth attribute에 의해서 계산될 수 있다.

위 그림은 composite attribute가 어떻게 하위 attribute로 구성되어 있는지 보여준다.

Mapping Cardinalities

Mapping Cardinalities는 relationship set을 통해 한 entity가 다른 entity가 연관될 수 있는 수를 나타낸다. 주로 이진 관계 집합을 설명하는 데 유용하다. binary relational set R이 entity 집합 A와 B 간에 존재한다고 가정할 때, Mapping Cardinalities는 다음과 같다.

  • one-to-one: A의 한 entity는 B의 최대 하나의 entity와만 연관되며, B의 한 entity도 A의 최대 하나의 entity와만 연관된다.
  • one-to-many: A의 한 entity는 B의 여러[8] entity와 연관된다. 그러나 B의 한 entity는 A의 최대 하나의 entity와만 연관된다.
  • many-to-one: A의 한 entity는 B의 최대 하나의 entity와만 연관된다. 그러나 B의 한 entity는 A의 여러[9] entity와 연관된다.
  • many-to-many: A의 한 entity는 B의 여러[10] entity과 연관될 수 있으며, B의 한 entity도 A의 여러[11] entity와 연관된다.
Represnting Cardinality

Representing Cardinality Constraints in ER Diagram

Cardinality constraints는 "one"을 의미하기 위해서 화살표(구문 분석 실패 (알 수 없는 함수 "\arrow"): {\displaystyle \arrow} )를 사용하거나, "many"를 의미하기 위해서 방향없는 선(-)을 사용한다. 오른쪽은 각각의 cardinality에 대한 표시 방식이며, 아래는 각각의 cardinality에 대한 해석이다.

  • one-to-one: 강사가 최대 한 명의 학생만 지도할 수 있고, 학생도 최대 한 명의 지도교수만 가질 수 있다.
  • one-to-many: 강사가 여러 학생을 지도할 수 있지만, 학생은 최대 한 명의 지도교수만 가질 수 있다.
  • many-to-one: 강사가 최대 한 명의 학생만 지도할 수 있지만, 학생은 여러 강사에게 지도받을 수 있다.
  • many-to-many: 강사가 여러 학생을 지도할 수 있고, 학생도 여러 명의 강사에게 지도받을 수 있다.

Total/Partial participation

entity set E가 어떤 relationship set R에 total participating을 한다면, 이는 E의 모든 entity들이 적어도 R에 속하는 하나의 relation에는 participating 해야한다는 것을 의미한다. 만약 그럴 필요가 없다면, E는 R에 partial participating한다고 한다. Total/Partial participation은 다음 그림과 같이 나타낼 수 있다.

그림과 같이 Total participation은 이중선으로 표시한다. 또한 partial participation은 일반적인 선으로 표시한다. 위 그림을 해석하면, 학생은 최소한 하나의 교수를 지도 교수로 두어야 하지만 교수는 이를 선택할 수 있다는 것을 의미한다.

Notation for Expressing More Complex Constraints

A line may have an associated minimum and maximum cardinality, shown in the form l..h, where l is the minimum and h the maximum cardinality • A minimum value of 1 indicates total participation. • A maximum value of 1 indicates that the entity participates in at most one relationship • A maximum value of * indicates no limit. E-R diagram은 relationship set에서 각 entity가 relation에 참여하는 횟수에 대한 더 복잡한 constraints를 표시할 수 있는 방법을 제공한다. 그 방법이 line에 최소값과 최대값으로 나타내는 cardinality constraints를 표기하는 것이다. 해당 constraint는 l..h와 같이 표기되며, l은 최소, h는 최대 cardinality를 의미한다. 이때 해당 표기법은 다음과 같이 해석된다.

  • l = 1: total participation.
  • h = 1: the entity participates in at most one relationship
  • h = *: 가능한 cardinality는 무제한이다.

예를 들어,

위는 학생은 반드시 한명의 교수를 지도 교수로 두어야 하지만 교수는 이를 선택할 수 있다는 것을 의미한다.

교재 256페이지 -> reverse한 해석이라고 하는 이유가 궁금하다.

one to one아닌 이유는 명확 -> 최대 하나가 아닌 오직 하나이기 때문이다.

It is easy to misinterpret the 0.. ∗ on the left edge and think that the relationship ad- visor is many-to-one from instructor to student — this is exactly the reverse of the correct interpretation.

If both edges have a maximum value of 1, the relationship is one-to-one. If we had specified a cardinality limit of 1.. ∗ on the left edge, we would be saying that each instructor must advise at least one student....?

Ternary Relationship

Cardinality Constraints on Ternary Relationship

Ternary [12] Relationship에서 cardinality constraints를 표시할 때는 최대 하나의 화살표만 사용된다. 이 화살표는 관계 집합 내에서 특정 엔터티가 다른 엔터티들과 어떻게 연관되는지를 나타내는 중요한 정보를 제공한다.

예를 들어, 오른쪽 그림의 proj_guide라는 ternary relationship에서 학생, 강사, 프로젝트 간의 relationship을 나타낼 때, proj_guide relationship set에서 강사로 향하는 화살표는 "student가 해당 project에 대해서 0~1명의 instructor가 할당된다"라는 constraints를 의미한다. 만약 두개이상의 화살표가 존재한다면, 의미가 두가지 존재한다. 예를 들어서, A, B, C 사이에 존재하는 a ternary relationship R에서 B, C로 향하는 화살표가 존재한다면,

  1. 각 A는 고유한 B와[13] 고유한 C에 relation을 이룬다.
  2. (A, B) 쌍마다 고유한 C와, (A, C) 쌍마다 고유한 B와 relation을 이룬다.

즉, 두개 이상의 화살표는 혼란을 야기하므로 사용되지 않는다.

Primary Key

Primary key는 entity set과 relationship set 내에서 각각의 entity들과 relation들을 구별할 수 있는 방식을 제공한다.

Entity Set

개념적으로 개별 entity는 구별된다. 하지만 DB 관점에서는 이들 간의 차이를 attribte 측면에서 표현해야 한다. 즉, 엔티티의 attribute 값은 해당 entity를 고유하게 식별할 수 있어야 한다. 다시 말해, 어떤 entity set 내 두 entity는 모든 attribute에 대해 정확히 동일한 값을 가질 수 없다.

이러한 개념은 relation model의 schema에서의 key와 관련이 있다. 즉, entity의 key는 entity를 서로 구별할 수 있는 attribute 집합이다. superkey, candidate key, primary key와 같은 개념은 relation model의 schema와 마찬가지로 entity set에도 적용된다.

Relational Set

Relationship set 내에 있는 다양한 relation들을 구분하기 위해서는 먼저 relationship set 내에 있는 entity들의 primary key를 사용해야 한다.

예를 들어, R을 entity set E1, E2,..., En을 포함하는 relationship set이라고 하자. 이 경우에 R에 대한 개별 relation을 설명하는 attribute set은 두가지 경우로 나뉜다.

  1. R이 attribute를 가지지 않을 경우
    • superkey for R = primarykey(E1)primarykey(E2)...primarykey(En)
  1. R이 attribute로 a1, a2,..., an를 가지고 있을 경우:
    • superkey for R = primarykey(E1)primarykey(E2)...primarykey(En){a1,a2,...,an}

Relationship set은 relation instance의 집합으로, 각 인스턴스는 그에 participaing하는 entity set들에 의해 고유하게 식별된다. 이때 만약 primary key의 이름이 각각의 entity set들 사이에서 겹친다면, 이들이 구분되도록 이름을 변경해야 한다.[14] 또한, entity set이 하나의 relationship set에 한번 이상 participating 할 때에는 role name을 대신 사용하여 고유한 attribute name을 만들어야 한다.

위에서 구성한 superkey를 바탕으로 binary relationship key에 대한 primary key를 선택할 수 있다. 이는 다음의 4가지 경우로 나뉜다.

  • one-to-one: participating하는 entity set 중 어느 한쪽의 primary key
  • one-to-many, many-to-one: "many"에 해당하는 entity set의 primary key
    • 예를 들어, 교수-학생 간의 one-to-many relation[15]의 경우, primary key는 학생 entity set의 primary key가 된다.
  • many-to-many: 각각의 entity set의 primary key의 합집합

Normalization Theory

Normalization Theory[16]는 데이터베이스 설계에서 잘못된 설계를 식별하고 이를 수정할 수 있는 방법을 제공한다.

각주

  1. 두 개 이상의 집합에 대하여 집합 원소들 간의 쌍을 나타낸다.
  2. 방금 예시에서 advisor가 이에 해당한다.
  3. '등록일' 속성은 단일값만 가진다. 학생이 강좌에 등록한 특정 날짜를 가리키기 때문이다.
  4. "성적" 속성은 다중 값을 가질 수 있다. 여러 과목에서의 성적을 나타내야 하는 경우가 있기 때문이다.
  5. 하나의 relation에서 여러 값을 가질 수 있는 attribute이다. 예를 들어, 학생이 여러 강좌를 수강하고 각 강좌에 대해 여러 개의 성적을 가질 수 있으면, "성적"은 multivalued attributes이다.
  6. 여러 attribute가 결합되어 하나의 attribute를 구성하는 경우이다. 예를 들어, "주소"는 "도로명", "시", "우편번호"와 같은 여러 부분으로 구성된다.
  7. 하나의 relation에서 여러 값을 가질 수 있는 attribute이다. 예를 들어, 학생이 여러 강좌를 수강하고 각 강좌에 대해 여러 개의 성적을 가질 수 있으면, "성적"은 multivalued attributes이다.
  8. 0개 이상
  9. 0개 이상
  10. 0개 이상
  11. 0개 이상
  12. 혹은 그 이상의 dgree
  13. 하나의 A는 오직 하나의 B만을 참조할 수 있지만, 하나의 B는 여러 A와 연결될 수 있다.
  14. ex: ID-> student_ID, instructor_ID
  15. 학생은 최대 한명의 교수를 지도교수로 둘 수 있다.
  16. 정규화 이론