CertNote/ 출퇴근 학습 노트
로드맵
SQLD · 개발자SQL 개발자 (SQLD)
  • Week 1
    • 1.데이터 모델링 개요
    • 2.3단계 스키마와 모델링 단계
    • 3.엔터티
    • 4.속성
    • 5.관계
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← SQLD/Week 1/Day 5

기준: SQLD 출제 기준·오류 제보

SQLD· AssociateWeek 1 · Day 5읽기 약 9분
핵심 정리
  • 관계는 엔터티의 인스턴스 사이에 존재 또는 행위로 맺어진 논리적 연관성이다. 개별 연결 하나는 페어링이라 부른다.
  • 관계는 존재에 의한 관계(상품이 카테고리에 속한다)와 행위에 의한 관계(고객이 주문한다)로 나눈다. ERD 는 둘을 구분하지 않고, UML 은 연관·의존으로 구분한다.
  • 관계 표기의 세 요소: 관계명 · 관계 차수(1:1, 1:M, M:N) · 관계 선택 사양(필수/선택).
  • 관계 읽기 순서: 기준 엔터티(각) → 대상 엔터티 개수 → 선택 사양(항상/때때로) → 관계명.
  • IE 표기는 까마귀발·원·막대로, Barker 표기는 까마귀발과 실선·점선으로 관계를 그린다.

Day 5 - 관계

선 하나에 담긴 문장

ERD 에서 고객과 주문 사이에 선이 하나 그어져 있다. 이 선에는 "고객은 주문을 한다", "한 고객이 여러 주문을 할 수 있다", "주문하지 않은 고객도 있다"는 세 가지 정보가 함께 들어 있다. 관계를 읽는다는 것은 이 정보를 선 모양에서 꺼내는 일이다.

정의

  • 엔터티의 인스턴스 사이의 논리적인 연관성이다.
  • 존재의 형태나 행위로서 서로에게 연관성이 부여된 상태를 말한다.
  • 관계는 엔터티 사이에 그리지만, 실제로 연결되는 것은 인스턴스다. "고객 C001 이 주문 O1001 을 했다"는 연결 하나가 페어링이다.
  • 엔터티 안의 인스턴스는 각자 다른 페어링을 맺을 수 있다. C001 은 주문이 셋, C002 는 하나도 없을 수 있다. 이 페어링들의 집합을 묶어 관계로 표현한다.

존재에 의한 관계와 행위에 의한 관계

분류뜻쇼핑몰 예교재 예
존재에 의한 관계한 엔터티가 다른 엔터티에 존재 자체로 연결된다. 어떤 행위가 없어도 관계가 성립한다상품은 상품카테고리에 속한다사원은 부서에 소속된다
행위에 의한 관계한 엔터티가 어떤 행위를 해야 관계가 생긴다고객이 주문을 한다고객이 주문을 한다
  • 상품은 등록되는 순간부터 어느 카테고리에 속한다. 무엇을 해서 생긴 관계가 아니다.
  • 고객과 주문의 관계는 고객이 주문이라는 행위를 할 때 생긴다. 가입만 하고 주문하지 않은 고객에게는 이 관계의 페어링이 없다.

ERD 와 UML 의 차이

표기존재 관계행위 관계
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 표기법과 Barker 표기법

두 표기법 모두 관계 차수와 선택성을 선 끝의 모양으로 나타낸다. 기호를 읽는 방향이 달라 헷갈리기 쉽다.

항목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를 붙이는 표기법.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

관계에 대한 설명으로 가장 적절하지 않은 것은?

문제 2

다음 중 관계를 표기할 때 사용하는 개념으로 가장 거리가 먼 것은?

문제 3

쇼핑몰에서 한 주문에 여러 상품이 들어갈 수 있고, 한 상품은 여러 주문에 포함될 수 있다. 이를 관계형 데이터베이스로 구현하기 위한 방법으로 가장 적절한 것은?

문제 4

고객과 주문의 관계에서 고객 쪽은 선택 참여, 주문 쪽은 필수 참여이며 관계 차수는 1:M 이다. 주문을 기준으로 관계를 바르게 읽은 것은?

문제 5

관계명을 지을 때의 원칙으로 가장 적절한 것은?

이전속성Week 1 · Day 4다음 식별자Week 2 · Day 1

참고 공식 자료

  • SQLD 공식 출제 기준(새 탭에서 열림)

이 페이지

  • 선 하나에 담긴 문장
  • 정의
  • 존재에 의한 관계와 행위에 의한 관계
  • ERD 와 UML 의 차이
  • 관계 표기의 세 요소
  • 관계명
  • 관계 차수
  • 관계 선택 사양
  • 관계를 읽는 법
  • 관계를 정할 때 확인할 것
  • IE 표기법과 Barker 표기법
  • 용어
  • 연습 문제