ERD 에서 고객과 주문 사이에 선이 하나 그어져 있다. 이 선에는 "고객은 주문을 한다", "한 고객이 여러 주문을 할 수 있다", "주문하지 않은 고객도 있다"는 세 가지 정보가 함께 들어 있다. 관계를 읽는다는 것은 이 정보를 선 모양에서 꺼내는 일이다.
엔터티의 인스턴스 사이 의 논리적인 연관성이다.
존재의 형태나 행위로서 서로에게 연관성이 부여된 상태를 말한다.
관계는 엔터티 사이에 그리지만, 실제로 연결되는 것은 인스턴스다. "고객 C001 이 주문 O1001 을 했다"는 연결 하나가 페어링 이다.
엔터티 안의 인스턴스는 각자 다른 페어링을 맺을 수 있다. C001 은 주문이 셋, C002 는 하나도 없을 수 있다. 이 페어링들의 집합을 묶어 관계로 표현한다.
분류 뜻 쇼핑몰 예 교재 예 존재에 의한 관계 한 엔터티가 다른 엔터티에 존재 자체로 연결된다. 어떤 행위가 없어도 관계가 성립한다 상품은 상품카테고리에 속한다 사원은 부서에 소속된다 행위에 의한 관계 한 엔터티가 어떤 행위 를 해야 관계가 생긴다 고객이 주문을 한다 고객이 주문을 한다
상품은 등록되는 순간부터 어느 카테고리에 속한다. 무엇을 해서 생긴 관계가 아니다.
고객과 주문의 관계는 고객이 주문이라는 행위를 할 때 생긴다. 가입만 하고 주문하지 않은 고객에게는 이 관계의 페어링이 없다.
표기 존재 관계 행위 관계 ERD 구분하지 않는다 (같은 관계선) 구분하지 않는다 (같은 관계선) UML 클래스 다이어그램 연관 관계 (Association) — 실선의존 관계 (Dependency) — 점선
연관 관계는 클래스가 다른 클래스를 멤버 변수로 참조 하는 관계, 의존 관계는 행위(메서드)를 수행할 때만 상대 클래스를 쓰는 관계다.
ERD 에서 실선·점선은 식별·비식별 관계나 선택성을 뜻할 수 있다. UML 의 실선·점선과 의미가 다르다.
요소 영문 묻는 질문 관계명 Membership 두 엔터티가 어떤 관계 인가 관계 차수 Cardinality 한 인스턴스가 상대 인스턴스 몇 개 와 연결되나 관계 선택 사양 Optionality 관계에 반드시 참여하나, 선택적으로 참여하나
관계에는 이름이 두 개 붙는다. 관계가 시작되는 쪽(The Beginning)과 끝나는 쪽(The End)에서 각각 본 이름이다.
고객 → 주문 방향은 "주문한다", 주문 → 고객 방향은 "주문받는다"(또는 "의뢰된다")처럼 관점마다 따로 짓는다.
명명 규칙 좋은 예 나쁜 예 애매한 동사를 피한다 주문한다, 포함한다, 속한다 관계된다, 관련이 있다, 이다, 한다 현재형으로 쓴다 주문한다 주문했다, 주문할 것이다
차수 뜻 쇼핑몰 예 1:1 한 인스턴스가 상대 인스턴스 하나 와만 연결된다 주문 – 결제 (주문 한 건에 결제 한 건만 허용하는 업무라면) 1:M 한 인스턴스가 상대 인스턴스 여러 개 와 연결된다 고객 – 주문 M:N 양쪽 모두 상대 인스턴스 여러 개와 연결된다 주문 – 상품
차수는 업무 규칙 이 정한다. 분할 결제를 허용하는 쇼핑몰이라면 주문 – 결제는 1:M 이 된다.
관계형 데이터베이스는 M:N 을 직접 구현하지 못한다. 그래서 둘 사이에 교차 엔터티 (연관 엔터티)를 두어 1:M 두 개로 푼다.
M:N 을 그대로 두면 교차 엔터티로 풀면
┌──────┐ M N ┌──────┐ ┌──────┐ 1 M ┌──────────┐ M 1 ┌──────┐
│ 주문 │ ──────── │ 상품 │ │ 주문 │ ───── │ 주문상품 │ ───── │ 상품 │
└──────┘ └──────┘ └──────┘ └──────────┘ └──────┘
주문번호(FK)
상품번호(FK)
주문수량
주문상품은 Day 3 에서 본 행위 엔터티 다. 두 부모(주문, 상품)에서 생기고 주문수량 같은 자기 속성을 가진다.
사양 뜻 쇼핑몰 예 필수 참여 (Mandatory)모든 인스턴스가 반드시 관계에 참여한다 모든 주문에는 그 주문을 한 고객이 반드시 있다 선택 참여 (Optional)관계에 참여하지 않는 인스턴스가 있을 수 있다 주문을 한 번도 하지 않은 고객이 있을 수 있다
한 관계의 양쪽은 선택 사양이 서로 다를 수 있다. 고객 쪽은 선택, 주문 쪽은 필수다.
선택 사양을 잘못 정하면 업무 규칙이 바뀐다. 고객 쪽을 필수로 그리면 "가입하려면 주문을 반드시 해야 한다"는 규칙이 된다.
관계는 정해진 순서로 읽는다.
순서 무엇을 읽나 표현 1 기준 엔터티 "각각의(Each) ~은" 또는 "한(One) ~은" 2 대상 엔터티의 개수 (관계 차수)"하나의", "하나 이상의(여러)" 3 관계 선택 사양 필수면 "항상", 선택이면 "때때로" 4 관계명 "주문한다", "속한다"
고객 – 주문 관계(고객 쪽 선택, 주문 쪽 필수, 1:M)를 양쪽에서 읽으면 다음과 같다.
각각의 고객은 여러 주문을 때때로 한다.
(기준 엔터티) (개수) (선택) (관계명)
각각의 주문은 한 고객에 의해 항상 주문된다.
(기준 엔터티) (개수) (필수) (관계명)
기준 엔터티는 언제나 "각각의" 하나로 읽는다. 개수는 상대편 의 개수다.
같은 선이라도 어느 쪽에서 읽느냐에 따라 문장이 달라진다. 문제에서 "다음 관계를 바르게 읽은 것은"이라고 물으면 양 방향을 모두 확인한다.
두 엔터티 사이에 관심 있는 연관 규칙 이 있는가.
두 엔터티 사이에 정보의 조합 이 발생하는가.
업무 기술서·장표에 관계 연결에 대한 규칙 이 서술돼 있는가.
업무 기술서·장표에 관계 연결을 가능하게 하는 동사(Verb) 가 있는가.
"고객이 상품을 장바구니에 담는다"는 업무 문장에는 동사 "담는다"가 있다. 고객과 상품 사이에 관계(또는 장바구니라는 교차 엔터티)를 검토할 근거가 된다.
두 표기법 모두 관계 차수와 선택성을 선 끝의 모양으로 나타낸다. 기호를 읽는 방향이 달라 헷갈리기 쉽다.
항목 IE (Information Engineering) Barker 다수(M) 선 끝 까마귀발 선 끝 까마귀발 하나(1) 선 끝 짧은 막대, 까마귀발 없음 까마귀발 없음 필수 짧은 막대 실선 선택 원 O 점선 엔터티 모양 사각형 (위 칸 식별자, 아래 칸 일반 속성) 모서리가 둥근 사각형 속성 표시 칸으로 구분 # 식별자, * 필수, o 선택
IE 표기법 (고객 1 — 주문 0..M)
┌──────┐ ┌──────┐
│ 고객 │ ┼────────────O< │ 주문 │
└──────┘ └──────┘
┼ : 주문 쪽에서 본 고객 = 하나, 필수
O< : 고객 쪽에서 본 주문 = 여럿, 선택
Barker 표기법 (같은 관계)
╭──────╮ ╭──────╮
│ 고객 │ - - - -───────< │ 주문 │
╰──────╯ ╰──────╯
고객 쪽 절반 점선 : 고객은 선택 참여
주문 쪽 절반 실선 : 주문은 필수 참여
주문 쪽 까마귀발 : 고객 하나에 주문 여럿
IE 에서 선택성 기호(원·막대)는 상대편 끝 에 붙는다. 주문 쪽 끝의 O 는 "고객이 주문을 갖지 않을 수 있다"는 뜻이다.
Barker 에서 선택성은 자기 쪽 절반 의 선 모양으로 나타낸다. 고객 쪽 절반이 점선이면 고객이 선택 참여다.
⚠️ 두 표기법의 선택성 기호 위치가 반대로 보인다. IE 의 O 는 대상 엔터티 쪽 끝에, Barker 의 점선은 기준 엔터티 쪽 절반에 그린다. 그림 문제에서는 기호가 어느 쪽 끝에 있는지부터 확인한다.
식별 관계와 비식별 관계(IE 의 실선·점선)는 Week 2 Day 1 식별자에서 다룬다.
다음 주는 식별자와 정규화로 넘어가 모델을 다듬는 방법을 본다.
관계(Relationship) : 엔터티의 인스턴스 사이에 맺어진 논리적 연관성.
페어링(Pairing) : 관계에 참여한 인스턴스 한 쌍의 연결.
관계 차수(Cardinality) : 한 인스턴스가 상대 엔터티 인스턴스 몇 개와 연결되는지. 1:1, 1:M, M:N.
관계 선택 사양(Optionality) : 관계에 반드시 참여하는지(필수), 참여하지 않을 수도 있는지(선택).
교차 엔터티 : M:N 관계를 1:M 두 개로 풀기 위해 사이에 두는 엔터티. 주문상품 같은 것.
연관 관계 / 의존 관계 : UML 에서 존재에 의한 관계와 행위에 의한 관계를 부르는 이름.
IE 표기법 : 까마귀발·원·막대로 관계를 그리는 표기법.
Barker 표기법 : 까마귀발과 실선·점선으로 관계를 그리고, 속성 앞에 #·*·o를 붙이는 표기법.
📝 연습 문제 선택지를 클릭하면 정답·해설이 펼쳐집니다.
관계에 대한 설명으로 가장 적절하지 않은 것은?
A 관계는 엔터티의 인스턴스 사이의 논리적인 연관성이다. B 관계에 참여한 인스턴스 한 쌍의 연결을 페어링이라 한다. C ERD 에서는 존재에 의한 관계와 행위에 의한 관계를 서로 다른 선으로 구분해 표기한다. D UML 클래스 다이어그램에서는 연관 관계와 의존 관계를 구분해 표기한다. 다음 중 관계를 표기할 때 사용하는 개념으로 가장 거리가 먼 것은?
A 관계 도메인 B 관계명 C 관계 차수 D 관계 선택 사양 쇼핑몰에서 한 주문에 여러 상품이 들어갈 수 있고, 한 상품은 여러 주문에 포함될 수 있다. 이를 관계형 데이터베이스로 구현하기 위한 방법으로 가장 적절한 것은?
A 주문 엔터티에 상품번호 속성을 여러 개 추가한다. B 상품 엔터티에 주문번호 속성 하나를 추가하고 값을 쉼표로 이어 저장한다. C 주문과 상품을 하나의 엔터티로 합친다. D 주문과 상품 사이에 주문상품 엔터티를 두어 1:M 관계 두 개로 해소한다. 고객과 주문의 관계에서 고객 쪽은 선택 참여, 주문 쪽은 필수 참여이며 관계 차수는 1:M 이다. 주문을 기준으로 관계를 바르게 읽은 것은?
A 각각의 주문은 여러 고객에 의해 때때로 주문된다. B 각각의 주문은 한 고객에 의해 항상 주문된다. C 각각의 주문은 한 고객에 의해 때때로 주문된다. D 각각의 주문은 여러 고객에 의해 항상 주문된다. 관계명을 지을 때의 원칙으로 가장 적절한 것은?
A "관계된다", "관련이 있다"처럼 애매한 동사는 피한다. B 관계가 이미 일어난 일이므로 "주문했다"처럼 과거형으로 쓴다. C 관계 하나에는 한쪽 관점의 관계명 하나만 붙인다. D 관계명은 관계 차수를 숫자로 적어 대신한다.