
하나의 엔티티는 연관된 애트리뷰트들의 집합으로 설명됩니다. 이때 애트리뷰트의 성격을 구분하지 않으면 전화번호 칸에 010-1234-5678, 02-123-4567처럼 콤마로 여러 값을 밀어 넣게 되고, 평점을 성적과 별개로 저장했다가 두 값이 어긋나는 일이 생깁니다.
| 구분 | 의미 | 학생 엔티티 예 |
|---|---|---|
| 단순(simple) vs 복합(composite) | 더 나눌 수 없는가, 여러 애트리뷰트로 구성되는가 | 학번 / 주소(시, 구, 도로명) |
| 단일값(single-valued) vs 다치(multivalued) | 값이 하나인가, 여러 개일 수 있는가 | 이름 / 전화번호 |
| 저장된(stored) vs 유도된(derived) | 직접 저장하는가, 다른 값에서 계산되는가 | 생년월일 / 평점(수강 성적에서 계산) |
세 축은 서로 독립입니다. 주소는 복합이면서 단일값일 수 있고, 전화번호는 단순이면서 다치일 수 있습니다.
과목마다 분반이 있고 분반 번호가 1, 2, 3으로 매겨진다고 해봅시다. "1분반"만으로는 데이터베이스의 1분반인지 운영체제의 1분반인지 알 수 없습니다.
약한 엔티티 타입은 자신을 식별해 주는 강한 엔티티 타입에 의존합니다. 이 엔티티 타입을 소유 엔티티 타입(owner entity type) 또는 식별 엔티티 타입(identifying entity type)이라고 부릅니다. 분반의 소유 엔티티 타입은 과목입니다.
부분 키(partial key)는 같은 소유 엔티티에 속한 약한 엔티티들 사이에서만 서로를 구별하는 애트리뷰트입니다. 분반 번호가 부분 키이고, 과목번호와 합쳐져야 비로소 전체 키가 됩니다.
관계 타입도 애트리뷰트를 가질 수 있습니다. 학생과 과목의 "수강" 관계에서 학기와 성적은 학생에도 과목에도 속하지 않고 수강이라는 사실 자체에 속합니다.
차수(degree)는 관계로 연결된 엔티티 타입의 개수입니다. 소속·수강은 2진(binary), 뒤에 나올 선수과목 관계는 1진(unary)입니다.
카디날리티(cardinality)는 한 엔티티가 관계를 통해 상대 엔티티 몇 개와 연결될 수 있는지를 나타냅니다.
| 카디날리티 | 의미 | 예 |
|---|---|---|
| 1:1 | 양쪽 모두 최대 하나 | 학과 - 학과장 |
| 1:N | 한쪽은 여럿, 다른 쪽은 최대 하나 | 학과 - 학생 (소속) |
| M:N | 양쪽 모두 여럿 | 학생 - 과목 (수강) |
참여 제약은 모든 엔티티가 관계에 참여해야 하는지를 나타냅니다. 모든 과목은 반드시 한 학과에 개설되므로 과목은 "개설"에 전체 참여(total participation)합니다. 예를들면, 최유나는 소속 학과가 없고 경영학과에는 학생이 없으므로, "소속"에는 학생과 학과 모두 부분 참여(partial participation)합니다. 약한 엔티티 타입은 소유 엔티티 없이 존재할 수 없으므로 항상 전체 참여입니다.
과목과 과목 사이의 "선수과목" 관계처럼 한 엔티티 타입이 같은 관계에 두 번 참여하는 것을 순환적 관계(recursive relationship)라고 합니다. 이때 선 두 개가 모두 과목에 닿으므로, 어느 쪽이 선수과목이고 어느 쪽이 후수과목인지 구분할 수단이 필요합니다. 그것이 역할(role)입니다. 역할은 관계 타입의 의미를 명확히 하기 위해 붙이는 이름입니다.
다중 관계(multiple relationships)는 같은 두 엔티티 타입 사이에 관계 타입이 둘 이상 존재하는 경우입니다. 학생은 한 학과에 "소속"되면서 다른 학과를 "부전공"할 수 있습니다.
지금까지의 요소를 한 그림에 모으면 다음과 같습니다.

o는 최소 0(부분 참여), |는 최소 1(전체 참여), {는 여럿을 뜻합니다. 실선은 약한 엔티티를 식별하는 관계, 점선은 일반 관계입니다.