ER 모델 상세 — 애트리뷰트, 약한 엔티티, 관계의 제약

Tasker_Jang·2026년 9월 22일
post-thumbnail

1. 애트리뷰트를 구분하지 않으면

하나의 엔티티는 연관된 애트리뷰트들의 집합으로 설명됩니다. 이때 애트리뷰트의 성격을 구분하지 않으면 전화번호 칸에 010-1234-5678, 02-123-4567처럼 콤마로 여러 값을 밀어 넣게 되고, 평점을 성적과 별개로 저장했다가 두 값이 어긋나는 일이 생깁니다.

구분의미학생 엔티티 예
단순(simple) vs 복합(composite)더 나눌 수 없는가, 여러 애트리뷰트로 구성되는가학번 / 주소(시, 구, 도로명)
단일값(single-valued) vs 다치(multivalued)값이 하나인가, 여러 개일 수 있는가이름 / 전화번호
저장된(stored) vs 유도된(derived)직접 저장하는가, 다른 값에서 계산되는가생년월일 / 평점(수강 성적에서 계산)

세 축은 서로 독립입니다. 주소는 복합이면서 단일값일 수 있고, 전화번호는 단순이면서 다치일 수 있습니다.

2. 강한 엔티티 타입과 약한 엔티티 타입

과목마다 분반이 있고 분반 번호가 1, 2, 3으로 매겨진다고 해봅시다. "1분반"만으로는 데이터베이스의 1분반인지 운영체제의 1분반인지 알 수 없습니다.

  • 강한 엔티티 타입(strong entity type): 자신의 애트리뷰트만으로 키를 가짐. 학생(학번), 과목(과목번호)
  • 약한 엔티티 타입(weak entity type): 자신의 애트리뷰트만으로는 키를 만들 수 없음. 분반

약한 엔티티 타입은 자신을 식별해 주는 강한 엔티티 타입에 의존합니다. 이 엔티티 타입을 소유 엔티티 타입(owner entity type) 또는 식별 엔티티 타입(identifying entity type)이라고 부릅니다. 분반의 소유 엔티티 타입은 과목입니다.

부분 키(partial key)는 같은 소유 엔티티에 속한 약한 엔티티들 사이에서만 서로를 구별하는 애트리뷰트입니다. 분반 번호가 부분 키이고, 과목번호와 합쳐져야 비로소 전체 키가 됩니다.

3. 관계의 구조

관계 타입도 애트리뷰트를 가질 수 있습니다. 학생과 과목의 "수강" 관계에서 학기와 성적은 학생에도 과목에도 속하지 않고 수강이라는 사실 자체에 속합니다.

차수(degree)는 관계로 연결된 엔티티 타입의 개수입니다. 소속·수강은 2진(binary), 뒤에 나올 선수과목 관계는 1진(unary)입니다.

카디날리티(cardinality)는 한 엔티티가 관계를 통해 상대 엔티티 몇 개와 연결될 수 있는지를 나타냅니다.

카디날리티의미예
1:1양쪽 모두 최대 하나학과 - 학과장
1:N한쪽은 여럿, 다른 쪽은 최대 하나학과 - 학생 (소속)
M:N양쪽 모두 여럿학생 - 과목 (수강)

참여 제약은 모든 엔티티가 관계에 참여해야 하는지를 나타냅니다. 모든 과목은 반드시 한 학과에 개설되므로 과목은 "개설"에 전체 참여(total participation)합니다. 예를들면, 최유나는 소속 학과가 없고 경영학과에는 학생이 없으므로, "소속"에는 학생과 학과 모두 부분 참여(partial participation)합니다. 약한 엔티티 타입은 소유 엔티티 없이 존재할 수 없으므로 항상 전체 참여입니다.

4. 역할, 순환적 관계, 다중 관계

과목과 과목 사이의 "선수과목" 관계처럼 한 엔티티 타입이 같은 관계에 두 번 참여하는 것을 순환적 관계(recursive relationship)라고 합니다. 이때 선 두 개가 모두 과목에 닿으므로, 어느 쪽이 선수과목이고 어느 쪽이 후수과목인지 구분할 수단이 필요합니다. 그것이 역할(role)입니다. 역할은 관계 타입의 의미를 명확히 하기 위해 붙이는 이름입니다.

다중 관계(multiple relationships)는 같은 두 엔티티 타입 사이에 관계 타입이 둘 이상 존재하는 경우입니다. 학생은 한 학과에 "소속"되면서 다른 학과를 "부전공"할 수 있습니다.

지금까지의 요소를 한 그림에 모으면 다음과 같습니다.

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

profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글