- ER 모델(Entity Relation Model)이란?
ER 모델은 개념적 데이터 모델로서 요구사항에서 얻은 정보현실 세계를 개체와 개체 간의 관계(개체, 속성, 관계)를 이용하여 개념적 구조로 표현한 것으로 ER다이어그램으로 구체화할 수 있다.또한 데이터 베이스의 스키마를 설계할 때 사용된다. 관계형 데이터베이스를 생성하는 개념적 설계 단계에서 이용된다.

ER 다이어그램 구성요소 3가지
- 개체(Entity)
- 개체란 단독으로 존재하는 객체를 의미하며, 동일한 객체는 존재하지 않습니다.
- 예를 들어, 학생 정보가 학번, 이름, 학년이 있을 때, 3개의 정보가 모두 같은 학생이 오직 한 명이면 이를 개체라고 합니다.
- 즉, 학생 한 명이 개체가 되는 것입니다.
- 이러한 개체들을 모아둔 것을 개체집합(Entity Type)이라고 합니다. 위의 그림에서 Student와 Course에 해당합니다.
- ER 다이어그램에서는 Entity type을 사각형으로 표현합니다.
- 속성, 애트리뷰트(Attribute)
- 개체가 갖고 있는 속성을 의미합니다.
- 위의 그림을 예시로하면, 개체 Student는 학번, 이름, 학년이라는 속성을 가지고 있습니다.
- ER다이어그램에서는 속성을 원으로 표현합니다.
- 관계(Relation)
- 개체 집합(Entity type)간의 관계를 의미합니다.
- 예를 들어, 수강을 뜻하는 Takes는 학생과 과목간의 '수강'이라는 관계를 갖습니다.
- 이 때 Takes를 Relation Type(관계 집합)이라 하며, 관계 집합 역시 속성을 가질 수 있습니다.
- ER다이어그램은 관계집합을 마름모로 표현합니다.
ER 다이어그램에서 개체, 속성, 관계 표현하기
- 속성(Attribute)
-
1.Attribute Domain
- 해당 Attribute가 가질 수 있는 집합(도메인, 자료형)을 말합니다.
- 예를들어, 학생의 학년을 나타내는 year 속성은 1, 2, 3, 4와 같은 숫자만 허용하므로 year의 Attribute Domain은 정수형(intger)입니다.
- EX) 학생의 이름을 나타내는 name 속성은 문자열이므로 name의 Attribute domain은 문자열입니다.
-
2.Key Attribute
- 다른 개체들과 중복되지 않는 고유한 값을 가진 속성으로 객체를 식별하는 역할을 하는 속성입니다.
- 예를들어, 학생의 학번을 의미하는 Student_no는 다른 학생들과 중복되지 않는 고유한 번호입니다. 따라서 Student_no는 Key Attribute입니다.
- Key Attribute는 ER다이어그램에서 원에 밑줄로 표현합니다.

-
복합 애트리뷰트(Composite Attribute)
- 독립적인 속성들이 모여서 생성된 속성을 의미합니다.
- 예를들어, 학생의 주소를 나타내는 Address 속성이 있을 때, 우리나라에서 주소는 "경기도", "OO시", "OO동", "OO아파트"와 같이 표현합니다.
- 즉 Address는 위의 4개의 독립된 속성들이 모여서 생성된 속성이므로 Address를 Composite Attribute라고 합니다.

-
다중값 속성(Multi-Valued Attribute)
- 하나의 속성에 여러 값을 가지는 속성을 의미합니다.
- 예를들어, 학생의 전공을 나타내는 Degree 속성이 있을 때, 학생이 복수 전공을 할 경우 Degree 속성 값이 2개가 되므로 이 때 Degree는 Multi-Valued 속성이 되어야 합니다.
- 이와 달리, 오직 한 속성당 한개의 값을 가지는 것을 단일값 애트리뷰트(Single-Valued Attribute)라고 합니다.
- 다중값 속성은 ER다이어그램에서 두 개의 원으로 표현합니다.

-
유도된 애트리뷰트(Derived Attribute)
- 다른 속성이 갖고 있는 값으로 부터 계산되어져 나온 속성을 의미합니다.
- 예를 들어, 모든 상품의 총 가격을 나타내는 total, 상품의 가격을 나타내는 price, 상품의 개수를 나타내는 count 속성이 있다고 가정합니다. total은 price와 count속성의 곱으로 계산되어져 나오는 값이므로 total 속성은 유도된 속성입니다.
-
유도된 속성은 ER다이어그램에서 점선으로 표현된 원입니다.

-
관계성(Relationship)
ER다이어그램을 설게하는 가장 큰 목적은 Entity type을 정의하고 entity type간에 관계를 표현하는 것입니다. 속성을 통해 entity type을 정의했다면, relationship을 통해 entity type 간의 관계를 표현 합니다.
관계성은 2가지 제약조건을 명시함으로써 표현할 수 있습니다.
- 1.카디널리티 비율 제약조건(Cardinality Ratio Constraint)
관계를 맺는 두 entity type에 대해, 한 개체가 얼마나 많은 다른 개체와 관련될 수 있는지를 나타내는 제약조건을 뜻합니다.
- 일대일(1:1)
- 두 개 entity type의 개체들은 서로 일대일 대응
- 일대다(1:N)
- 하나의 개체가 다른 entity type의 많은 개체들과 관련되지만, 그 역은 성립하지 않는다.
- 다대다(N:N)
- 하나의 개체가 다른 entity type의 많은 개체들과 관련되며, 역이 성립한다.
예를 들어, '학사관리시스템'에서 한 학생은 많은 과목을 수강하고 있고 한 과목에는 많은 학생이 수강하므로 Student entity type과 course entity type은 N:M 관계입니다. 
또 다른 예로, 부모와 자식 관계가 있습니다. 부모는 많은 자식을 가질 수 있지만 자식은 한 부모만을 가질 수 있습니다. 즉 entity type 관계에서 부모와 자식은 1:M 관계이며 이를 ER다이어그램으로 표현하면 다음과 같습니다. 간혹 1과 M을 어느 선에 명시해야 하는지 헷갈리는 경우가 있는데, M에 해당되는 entity type에 M을 명시해주면 됩니다.

- 2.참여 제약조건(Participation Constraint)
관계를 맺는 두 entity type에 대해 한 개체의 존재가 다른 개체의 존재에 의존하는지 여부를 나타내는 제약조건을 의미합니다.
- 전체 참여(Total Participation)
- 개체가 무조건 관계에 참여해야 한다., 의존적, 두 개 실선
- 부분 참여(Partial Participation)
- 관계에 선택적인 참여, 비 의존적, 한 개 실선
예를 들어, 학생은 과목을 반드시 수강할 필요는 없지만 과목은 항상 수강생이 있어야 합니다. 수강생이 없는 과목은 폐강되기 때문입니다.
ER다이어그램에서는 전체 참여를 두 개의 실선으로 표현하고, 부분 참여는 한 개의 실선으로 표현합니다.

- 3.구조적 제약조건(Structural Constraint)
앞서 살펴 본 두 개의 제약조건을 가리켜 구조적 제약조건이라고 합니다.
구조적 제약조건은 관계를 맺는 두 entity type에 1, M, N을 표시하거나 한 줄 또는 두 줄을 표시하지 말고 (MIN, MAX) 방식으로 두 제약조건을 한 번에 표현하는 방식입니다.
예를 들어, 학생은 최소 3개, 최대 6개의 강의를 수강할 수 있으며, 강의는 최소 10명 최대 100명의 학생들이 들을 수 있을 때, 이를 ER다이어그램으로 표현하자면 다음과 같습니다.

지금까지 배운 내용을 표로 정리하면 다음과 같습니다.

- 4.약한 개체(Weak Entity)와 식별 관계성 타입(Identifying Relationship Type)
약한 개체란 기본 키가 있지만 갖고 있는 기본키 만으로는 식별이 불가능한 개체입니다.
예를들어, '학사관리시스템'에서 강의번호 10043은 10043-01, 10043-02와 같이 여러 개의 분반이 있을 수 있습니다. 이 때 분반이라는 개체는 자신의 Key Attribute가 없고, 강의 테이블에 의존하기 때문에 약간 개체라 합니다. 다시 말하면 분반이 존재하기 위해선 반드시 Course entity type이 있어야 합니다.
강의와 분반의 관계를 ER다이어그램으로 표현하면 다음과 같습니다.

ER다이어그램에서 약한 개체는 두 개의 네모로 표현하고, 약한 개체의 key인 bun_no를 partial key(부분 키)라고 합니다. 부분 키는 단독으로 존재할 수 없고 자신을 소유하고 있는 Owner entity type인 Course entity type의 key와 합쳐서 표현되어야 합니다.
er다이어그램에서 부분 키는 점선으로 된 밑줄로 표현합니다.
또한 entity type이 약한 개체와 관계를 맺을 때는 식별 관계성 타입으로 표현하고, ER다이어그램에서 두 개의 마름모로 표현합니다. 약한 개체는 의존적이기 때문에 참여 제약 조건은 항상 전체 참여(total participation)입니다.
원본자료: https://victorydntmd.tistory.com/126
개체(Entity):
- 1.현실 세계에서 조직을 운영하는 데 꼭 필요한 사람이나 사물과 같이 구별되는 모든 것을 의미한다. 즉 개체는 저장할 만한 가치가 있는 중요 데이터를 가지고 있는 사람이나 사물 등이며, 개념적 모델링을 하는 데 가장 중요한 요소다.
- 2.개체는 사람과 사물처럼 물리적으로 존재하는 것만을 의미하지 않는다. 개념이나 사건처럼 개념적으로만 존재하는 것도 객체가 될 수 있다. 예를 들어 학교 운영에 필요한 데이터를 가지고 있는 학과나 과목이 물리적으로 존재하지 않지만 반드시 필요한 개념이기 때문에 개체가 될 수 있다.
- 3.개체는 다른 개체와 구별되는 이름을 가지고 있고, 각 개체만의 고유한 특성이나 상태, 즉 속성을 하나 이상 가지고 있다. 개체를 고유의 이름과 속성들로 정의한 것을 개체 타입(entity type)이라 한다.

- 4.개체를 구성하고 있는 속성이 실제 값을 가짐으로써 실체화된 개체를 개체 인스턴스(entity instance)라 한다.
- 5.특정 개체 타입에 대한 개체 인스턴스들을 모아놓은 것을 개체 집합(entity set)이라고 한다. 데이터베이스에 실제로 저장하고 관리하는 것이 이 개체 인스턴스의 모임인 개체 집합이라 할 수 있다.
- 6.E-R다이어그램에서는 개체를 사각형으로 표현하고 사각형 안에 개체의 이름을 표기한다.
