SQLD 식별 관계 vs 비식별 관계, 그림 두 장으로 끝내기
"ERD에서 실선이랑 점선 차이가 뭔가요?"
SQLD 1과목 모델링 파트에서 서브쿼리만큼 자주 걸리는 질문입니다. 개념 자체는 짧게 정리되는데, 막상 문제로 나오면 "이 관계는 식별인가 비식별인가"를 헷갈려서 틀리는 경우가 많습니다. 기준은 하나입니다. 부모 없이 자식이 혼자 존재할 수 있느냐입니다.
1. 실선은 "함께 태어난다", 점선은 "따로 존재할 수 있다"
식별 관계(실선)는 부모 테이블의 기본키(PK)가 자식 테이블의 기본키에 그대로 들어갑니다. 위 그림의 왼쪽처럼 부서번호가 사원 테이블의 PK 일부가 되는 구조입니다. 이렇게 되면 사원 행은 부서번호 없이는 존재 자체가 불가능합니다. 부모가 있어야만 자식이 태어나는 관계입니다.
비식별 관계(점선)는 부모의 기본키가 자식 테이블에 외래키(FK)로만 들어갑니다. 오른쪽 그림처럼 고객번호는 주문 테이블의 PK가 아니라 FK로만 존재합니다. 그래서 이론적으로는 고객 정보 없이도 주문 행 구조 자체는 유지될 수 있습니다(물론 실무에서는 대부분 NOT NULL 제약을 걸지만, 모델링 관점에서는 독립적으로 식별 가능하다는 것이 핵심입니다).
시험에서는 "다음 중 식별 관계에 대한 설명으로 옳은 것은?" 식으로 묻습니다. 이때 "자식 엔터티의 PK에 부모 PK가 포함된다"는 문장이 나오면 식별 관계, "부모 PK가 FK로만 들어간다"는 문장이 나오면 비식별 관계라고 바로 연결하면 됩니다.
2. 관계의 개수도 표기로 정해진다
식별인지 비식별인지와는 별개로, ERD에는 "몇 대 몇 관계인지"를 나타내는 표기도 있습니다. 선 끝에 붙는 모양(까마귀발)이 그 답입니다.
여기서 시험에 자주 나오는 함정이 있습니다. M:N 관계는 그대로 테이블로 구현할 수 없다는 점입니다. 관계형 데이터베이스는 다대다를 직접 표현하지 못하기 때문에, 중간에 연결 테이블(예: 수강)을 하나 더 두어 1:N과 N:1 두 개로 쪼개야 합니다. "M:N 관계는 별도 처리 없이 그대로 구현 가능하다"는 선지가 나오면 틀린 보기입니다.
3. 실전 감각 점검 — 이 문제 풀리나요?
다음 중 식별 관계로 연결하는 것이 더 적절한 경우는?
① 고객과 배송지 주소 (고객 한 명이 여러 주소를 등록할 수 있고, 각 주소는 독립적으로 관리됨)
② 계약과 계약상세 (계약상세는 특정 계약 없이는 의미를 가질 수 없음)
정답은 ②입니다. 계약상세는 계약이 없으면 애초에 존재할 이유가 없는, 부모에 완전히 종속된 데이터입니다. 반면 배송지 주소는 고객과 연결은 되어 있지만 독립적인 식별 단위로 볼 수 있어 비식별 관계가 더 적절합니다.
이 판단이 자연스러웠다면 식별·비식별 관계 구분은 잡힌 겁니다. 아직 헷갈린다면, "이 자식 데이터가 부모 없이 혼자 의미를 가질 수 있는가?"라는 질문을 스스로 던지는 연습이 가장 빠릅니다.
식별 관계를 문제로 굳히고 싶다면
『빠르게 따는 SQLD』 1권 「1장 데이터 모델링의 이해」에서는 오늘 다룬 식별·비식별 관계와 까마귀발 표기뿐 아니라, 정규화와 이상 현상까지 이어지는 흐름을 그림과 기출변형 문제로 함께 다룹니다. 해설은 정답의 이유뿐 아니라 나머지 보기가 왜 틀렸는지까지 '오답 노트' 방식으로 풀어냈습니다.
책 없이도 지금 바로 실력을 점검하고 싶다면, 골든래빗 CBT에서 SQLD 기출변형 문제를 실제 시험과 같은 화면으로 풀어볼 수 있습니다.
공부하다 막히는 부분은 빠따 SQLD 공식 카카오톡 질문방에서 저자에게 직접 물어볼 수 있습니다.
