0Pricing
SQL Interview Prep · 강의

ER 모델링과 관계 카디널리티

요구 사항을 엔터티, 관계, 연결 테이블로 변환합니다.

ER 모델링과 관계 카디널리티은(는) CoddyKit의 무료 SQL Interview Prep 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

ER 모델링이 면접에 등장하는 이유

정규화를 마치면, 면접관은 요구 사항을 스키마로 변환할 수 있는지 확인합니다. 질문은 대개 범위가 열려 있습니다: "차량 공유 앱의 데이터베이스를 설계해 보세요" 또는 "도서관 시스템을 모델링해 보세요."

이는 엔터티-관계(ER) 모델링 연습입니다. 면접관은 카디널리티를 포함해 엔터티, 속성, 엔터티 간 관계를 어떻게 식별하는지 지켜봅니다.

핵심 역량은 영어의 명사와 동사를 테이블과 외래 키로 변환하는 것입니다.

엔터티, 속성, 관계

세 가지 구성 요소가 모든 ER 모델을 이룹니다:

  • 엔터티: 데이터를 저장하는 대상(고객, 주문, 상품)입니다. 대개 테이블이 됩니다.
  • 속성: 엔터티의 특성(이름, 가격, 생성 시각)입니다. 대개 열이 됩니다.
  • 관계: 엔터티가 연결되는 방식(고객이 주문을 합니다)입니다. 외래 키나 연결 테이블로 구현합니다.

질문의 힌트: 명사는 엔터티/속성이 되고, 동사는 관계가 됩니다.

카디널리티: 핵심 개념

카디널리티는 한 엔터티의 인스턴스가 다른 엔터티와 몇 개씩 관계를 맺는지 설명합니다. 세 가지 유형이 있습니다:

  • 일대일(1:1): 한쪽의 한 행이 다른 쪽의 최대 한 행과 대응됩니다.
  • 일대다(1:N): 한쪽의 한 행이 다른 쪽의 여러 행과 대응됩니다(가장 일반적입니다).
  • 다대다(M:N): 양쪽의 행이 서로 반대편의 여러 행과 대응됩니다.

카디널리티를 올바르게 정하면 외래 키를 어디에 둘지와 연결 테이블이 필요한지가 결정됩니다.

일대다 구현

일대다는 "다" 쪽에 외래 키를 두는 방식으로 구현합니다. 고객 한 명에게 여러 주문이 있으므로 각 주문 행에 customer_id가 들어갑니다.

면접에서는 항상 방향을 명확하게 말해야 합니다: "고객 한 명과 여러 주문의 관계이므로 FK는 주문 테이블에 있습니다."

CREATE TABLE customers (
  customer_id INT PRIMARY KEY,
  name        VARCHAR(100)
);

CREATE TABLE orders (
  order_id    INT PRIMARY KEY,
  customer_id INT NOT NULL,
  order_date  DATE,
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

다대다 구현

관계형 데이터베이스는 M:N 관계를 직접 저장할 수 없습니다. 면접관이 기대하는 답은 연결 테이블(브리지 테이블, 링크 테이블 또는 연관 테이블이라고도 함)입니다.

학생은 여러 강좌에 등록할 수 있고, 강좌에는 여러 학생이 등록할 수 있습니다. 두 외래 키를 결합한 키를 갖는 enrollments 테이블을 만듭니다. 이렇게 하면 M:N 관계가 두 개의 1:N 관계로 해소됩니다.

CREATE TABLE students (
  student_id INT PRIMARY KEY,
  name       VARCHAR(100)
);

CREATE TABLE courses (
  course_id  INT PRIMARY KEY,
  title      VARCHAR(100)
);

CREATE TABLE enrollments (
  student_id INT,
  course_id  INT,
  enrolled_at DATE,
  PRIMARY KEY (student_id, course_id),
  FOREIGN KEY (student_id) REFERENCES students(student_id),
  FOREIGN KEY (course_id)  REFERENCES courses(course_id)
);

연결 테이블에 데이터를 저장할 수 있습니다

자주 나오는 후속 질문은 다음과 같습니다: "학생이 강좌에서 받은 성적은 어디에 저장하나요?"

성적은 학생이나 강좌 하나에만 속하는 것이 아니라 관계에 속합니다. 따라서 연결 테이블에 저장합니다. 이것이 면접관이 확인하려는 핵심입니다. M:N 관계의 속성은 연결 테이블에 저장됩니다.

예: 등록 날짜, 성적, 주문 항목의 수량, 프로젝트 참여에서의 역할

ALTER TABLE enrollments
  ADD COLUMN grade CHAR(2);
-- grade describes THIS student in THIS course,
-- so it belongs on the junction table

일대일 구현

일대일 관계는 드뭅니다. 종속 테이블에 외래 키를 지정하고, 그 키를 동시에 고유 키로 만들어 구현합니다(대개 기본 키 자체로 지정합니다).

예를 들어 user와 확장된 선택적 세부 정보를 저장하는 user_profile이 있다고 해 보겠습니다. 프로필 테이블의 기본 키를 user_id로 만들면 사용자마다 프로필을 최대 하나만 갖도록 강제할 수 있습니다.

CREATE TABLE users (
  user_id INT PRIMARY KEY,
  email   VARCHAR(255)
);

CREATE TABLE user_profiles (
  user_id INT PRIMARY KEY,           -- 1:1 enforced here
  bio     TEXT,
  avatar_url VARCHAR(255),
  FOREIGN KEY (user_id) REFERENCES users(user_id)
);

선택 사항과 참여

카디널리티에는 면접관이 중요하게 보는 두 번째 차원인 선택 여부(참여라고도 함)가 있습니다.

  • 필수: 모든 주문에는 고객이 있어야 하므로 customer_id는 NOT NULL입니다.
  • 선택: 사용자는 프로필을 가질 수도 있고 가지지 않을 수도 있으므로 관계가 없을 수 있습니다.

외래 키에 NOT NULL을 지정하면 필수 참여를 표현할 수 있습니다. NULL 가능 여부를 언급하면 단순히 구조만 보는 것이 아니라 실제 제약 조건까지 고려한다는 점을 보여 줍니다.

자기 참조 관계

일부 관계는 엔터티가 자기 자신을 가리키도록 합니다. 직원에게는 직원이기도 한 관리자가 있고, 범주에는 상위 범주가 있습니다.

이 관계는 같은 테이블을 참조하는 외래 키로 모델링합니다. 면접관은 조직도와 트리 구조에서 이 방식을 기대하며, 자기 조인 및 재귀적 공통 테이블 표현식과도 자연스럽게 연결됩니다.

CREATE TABLE employees (
  employee_id INT PRIMARY KEY,
  name        VARCHAR(100),
  manager_id  INT NULL,
  FOREIGN KEY (manager_id) REFERENCES employees(employee_id)
);
-- manager_id NULL = top of the hierarchy (e.g. CEO)

간단한 모델링 풀이

동사를 관계로 바꾸는 방법을 연습해 보겠습니다. 질문: "고객은 주문을 하고, 각 주문에는 여러 상품이 포함되며, 상품은 공급업체에 속합니다."

  • 고객 1:N 주문(주문 테이블에 고객 식별자 외래 키)
  • 주문 M:N 상품 -> 수량을 포함하는 연결 테이블 order_items
  • 공급업체 1:N 상품(상품 테이블에 공급업체 식별자 외래 키)

각 카디널리티와 키가 어디에 들어가는지 말하세요. 이러한 설명이 면접에서 좋은 결과를 만듭니다.

질문하기 좋은 확인 사항

면접관은 설계 전에 질문하는 지원자를 높이 평가합니다. 좋은 확인 질문은 다음과 같습니다:

  • "상품 하나가 둘 이상의 공급업체에 속할 수 있나요?"(1:N과 M:N 중 결정)
  • "모든 주문에 항목이 하나 이상 있어야 하나요?"(참여 여부)
  • "이력이 필요한가요, 아니면 현재 상태만 필요한가요?"(추가 테이블의 필요성 결정)

답변에 따라 카디널리티와 테이블 수가 달라지므로 절대 추측해서는 안 됩니다. 질문하는 태도는 숙련도를 보여 주는 신호입니다.

빠른 확인

각 학생이 여러 강좌를 수강할 수 있고 각 강좌에 여러 학생이 등록할 수 있는 상황에서 학생과 강좌를 모델링하고 있습니다.

복습: ER 모델링과 카디널리티

이제 정답이 하나로 정해지지 않은 스키마 설계 질문에도 대응할 수 있습니다.

  • 명사를 엔터티/속성으로, 동사를 관계로 바꾸십시오.
  • 1:N: 다 쪽에 외래 키를 둡니다.
  • M:N: 두 외래 키와 관계 속성을 보관하는 연결 테이블을 사용합니다.
  • 1:1: 종속 테이블에 공유 키 또는 고유 키를 둡니다.
  • NOT NULL을 사용하여 필수 참여를 표현하고, 계층 구조에는 자기 참조 외래 키를 사용합니다.
  • 카디널리티를 결정하기 전에 명확히 질문하십시오.

자주 묻는 질문

“ER 모델링과 관계 카디널리티” 강의는 무료인가요?

네 — “ER 모델링과 관계 카디널리티” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Interview Prep 강의 전체를 잠금 해제할 수 있습니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“ER 모델링과 관계 카디널리티”에서 뭘 배우나요?

요구 사항을 엔터티, 관계, 연결 테이블로 변환합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Interview Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“ER 모델링과 관계 카디널리티” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 3NF까지 정규화하기
  2. ER 모델링과 관계 카디널리티
  3. 스타 스키마와 데이터 웨어하우스 설계
  4. 전체 모의 면접 문제 세트
← SQL Interview Prep(으)로 돌아가기