속성, 관계, 식별자
엔터티를 완성하는 속성, 관계, 식별자의 의미와 분류를 시험에서 구분할 수 있게 정리합니다.
속성관계식별자 엔터티만으로는 모델이 완성되지 않습니다
엔터티는 관리 대상의 집합입니다. 하지만 엔터티 이름만으로는 어떤 데이터를 저장하고, 어떻게 구분하고, 다른 엔터티와 어떻게 연결되는지 알 수 없습니다. 그래서 속성, 식별자, 관계를 함께 정의해야 합니다.
속성
속성은 엔터티가 가지는 세부 정보입니다. 사원 엔터티라면 사원번호, 사원명, 입사일, 부서번호가 속성이 될 수 있습니다.
| 분류 | 의미 | 예 |
|---|---|---|
| 기본 속성 | 업무에서 직접 수집되는 속성 | 이름, 생년월일, 주문일 |
| 설계 속성 | 시스템 설계를 위해 추가한 속성 | 주문번호, 고객ID |
| 파생 속성 | 다른 값으로 계산 가능한 속성 | 총주문금액, 나이 |
파생 속성은 편리하지만 중복을 만들 수 있습니다. 예를 들어 총주문금액은 주문상세의 수량과 단가로 계산할 수 있으므로 저장 여부를 신중히 결정해야 합니다.
식별자
식별자는 엔터티의 인스턴스를 유일하게 구분하는 속성 또는 속성 집합입니다.
| 구분 | 의미 |
|---|---|
| 주 식별자 | 대표로 선택한 식별자 |
| 보조 식별자 | 후보는 되지만 대표로 선택되지 않은 식별자 |
| 내부 식별자 | 엔터티 내부 속성으로 구성 |
| 외부 식별자 | 다른 엔터티와의 관계에서 가져온 식별자 |
| 단일 식별자 | 속성 하나로 식별 |
| 복합 식별자 | 둘 이상 속성으로 식별 |
좋은 주 식별자는 유일성, 최소성, 불변성, 존재성을 만족해야 합니다. 즉 중복되지 않고, 꼭 필요한 속성만 포함하고, 쉽게 바뀌지 않으며, NULL이 아니어야 합니다.
관계
관계는 엔터티 사이의 업무적 연관성입니다. 관계를 읽을 때는 세 가지를 확인합니다.
| 확인 항목 | 질문 |
|---|---|
| 관계명 | 두 엔터티가 어떤 의미로 연결되는가 |
| 관계 차수 | 1:1, 1:N, M:N 중 무엇인가 |
| 선택성 | 반드시 연결되어야 하는가, 없어도 되는가 |
예를 들어 고객과 주문은 보통 고객 1명이 여러 주문을 할 수 있으므로 1:N 관계입니다. 이때 주문이 반드시 고객을 가져야 한다면 주문 쪽 고객 관계는 필수 관계입니다.
식별 관계와 비식별 관계
식별 관계는 부모의 식별자가 자식의 주 식별자에 포함되는 관계입니다.
주문(주문번호)
주문상세(주문번호, 주문순번)
주문상세는 주문번호 없이는 식별되기 어렵습니다. 이런 경우 식별 관계로 표현할 수 있습니다.
비식별 관계는 부모 식별자가 자식의 일반 외래키가 되는 관계입니다. 자식의 주 식별자는 별도로 있고, 부모 키는 참조용으로만 들어갑니다.
속성은 무엇을 저장할지, 식별자는 어떻게 구분할지, 관계는 어떻게 연결할지를 정합니다.