ER 모델링과 관계 카디널리티
요구 사항을 엔터티, 관계, 연결 테이블로 변환합니다.
ER 모델링과 관계 카디널리티은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding 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로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“ER 모델링과 관계 카디널리티”에서 뭘 배우나요?
요구 사항을 엔터티, 관계, 연결 테이블로 변환합니다. 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“ER 모델링과 관계 카디널리티” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 3NF까지 정규화하기
- ER 모델링과 관계 카디널리티
- 스타 스키마와 데이터 웨어하우스 설계
- 전체 모의 면접 문제 세트