Entity
개체. 실생활에서 필요한 정보들을 데이터베이스화하는 과정에서 각각의 정보들은 각각은 Entity로 정의된다.
Relationship
관계. 정의한 Entity들 사이에서 관계를 맺는다.
Entity Relationship
개체간의 관계를 맺는 것
왜 개체간의 관계를 맺을까?
수강 신청 시스템을 생각해보자.
엔티티로 학생과 수업이 존재한다.
학생이 수강신청을 한다.
학생-수업간의 관계가 발생한다.
즉, 해당 학생(학생 엔티티의 인스턴스)과 해당 수업(수업 엔티티의 인스턴스) 사이에는 '모 학생이 신청한 모 수업'이라는 관계가 발생한다.
이제, 해당 학생을 조회하면 관계를 통해 신청한 수업 목록을 조회할 수 있다. 반대로 수업을 조회하면 해당 수업을 신청한 학생 목록을 조회할 수 있다.
우리는, 그리고 세상의 모든 것들은 저마다 고유한 관계를 맺고 있다.
개발자는 그 중에서, 개발하는 시스템의 requirements(요구 조건)에 부합하는 특정 정보들을 추출하여 데이터베이스화한다.
이러한 데이터베이스화 과정에서 엔티티간의 관계를 맺는 Entity Relationship 과정은 유의미하고 필수적이다.
Mapping Constraints
Entity Relationship을 정의할 때 엔티티 간에 서로 관계를 맺을 수 있는 엔티티의 개수에 대해서 표현하는 조건이다.
- 1 :1 일대일 매핑
- 1 : n 일대다 매핑
- n : 1 다대일 매핑
- m : n 다대다 매핑
Participation Constraints
관련된 엔티티의 모든 인스턴스가 반드시 참여해야하는지, 꼭 그럴 필요는 없는지 표현하는 조건이다.
- Total (mandatory)
관련 엔티티의 모든 인스턴스는 반드시 관계를 맺어야한다.
- Partial (optional)
관련 엔티티의 모든 인스턴스가 관계에 참여할 필요는 없다.
(min, max) Constraints
엔티티간 맺을 관계의 개수를 범위로 제한한다.
(관련된 엔티티가 맺어야하는 최소 관계 수, 관련된 엔티티가 맺을 수 있는 최대 관계 수)
Recursive Relationship
Relationship with degree 1
하나의 엔티티에서, 해당 엔티티의 인스턴스간에 관계를 맺는 것이다.
Relationship에 참가하는 인스턴스간의 엔티티 타입이 같다.
예를 들어, 학생과 학생의 관계, 과목과 과목들간의 관계, 부품과 부품간의 관계가 이와 같다.
참여한 동일한 엔티티 타입의 인스턴스를 구분하기 위해서, 서로 맡은 다른 역할(Role)이 필요하다.