본문으로 건너뛰기
SQLD 준비실
이론 전체 목차 열기 6 / 32

데이터 모델링의 이해 · 모델과 SQL 연결 6 / 32

데이터 모델과 SQL

ERD에서 테이블, 키, 관계, 조인 조건이 어떻게 SQL로 이어지는지 정리합니다. 모델링 문제가 SQL 결과 예측 문제로 바뀌는 지점을 다룹니다.

출제 빈도 ★★★☆☆ 관련 문제 3개 | PKFKJOINNULL

모델링과 SQL은 따로가 아닙니다

모델링은 업무 규칙을 테이블 구조로 옮기는 과정이고, SQL은 그 구조에서 데이터를 꺼내는 언어입니다. 그래서 좋은 SQL을 쓰려면 먼저 테이블 사이의 관계를 읽을 수 있어야 합니다.

예를 들어 고객, 주문, 주문상세, 상품이 있다면 보통 다음 흐름으로 연결됩니다.

고객 1명 ── 여러 주문
주문 1건 ── 여러 주문상세
상품 1개 ── 여러 주문상세

SQL에서는 이 관계가 조인 조건으로 나타납니다.

SELECT c.customer_name, p.product_name, od.quantity
FROM customer c
JOIN orders o ON o.customer_id = c.customer_id
JOIN order_detail od ON od.order_id = o.order_id
JOIN product p ON p.product_id = od.product_id;

관계 차수 읽기

관계의미테이블 설계 감각
1:1한 행이 상대 테이블 한 행과만 연결자주 합치거나 보안상 분리
1:N한 행이 상대 테이블 여러 행과 연결N쪽 테이블에 외래키가 들어갑니다
M:N양쪽 모두 여러 행과 연결중간 엔터티로 풀어야 합니다

M:N 관계는 그대로 테이블 하나의 외래키로 표현하기 어렵습니다. 학생과목은 한 학생이 여러 과목을 듣고, 한 과목에 여러 학생이 참여합니다. 이때 수강 같은 중간 엔터티가 필요합니다.

식별 관계와 비식별 관계

식별 관계는 부모의 키가 자식의 기본키 일부가 되는 관계입니다. 자식이 부모 없이는 식별될 수 없을 때 사용합니다.

주문(주문번호)
주문상세(주문번호, 순번)

주문상세의 기본키에 주문번호가 포함된다면 식별 관계로 볼 수 있습니다. 반대로 부모 키가 자식의 일반 외래키로만 들어가면 비식별 관계입니다.

시험에서는 “자식 엔터티의 주 식별자에 부모 식별자가 포함되는가”를 기준으로 판단하면 됩니다.

정규화가 SQL에 주는 영향

정규화는 중복을 줄이고 이상 현상을 막지만, 조회할 때 조인이 늘어날 수 있습니다.

설계 상태장점SQL 영향
정규화중복 감소, 무결성 향상필요한 정보를 얻기 위해 조인이 필요
반정규화조회 단순화, 성능 개선 가능중복 관리와 갱신 이상 위험 증가

반정규화는 “무조건 나쁘다”가 아니라 성능 요구 때문에 선택할 수 있는 설계입니다. 다만 시험에서는 보통 정규화로 정확한 구조를 만든 뒤, 검증된 성능 이슈가 있을 때 반정규화를 고려한다는 순서를 기억합니다.

모델을 SQL 결과로 바꾸는 순서

  1. 엔터티가 어떤 테이블로 구현되는지 봅니다.
  2. 기본키와 외래키를 찾아 조인 조건을 만듭니다.
  3. 관계 차수가 1:N인지 M:N인지 확인합니다.
  4. 조인 후 행 수가 늘어나는 쪽을 찾습니다.
  5. 조건절이 어느 테이블의 행을 제거하는지 확인합니다.

자주 출제되는 유의 사항

LEFT OUTER JOIN을 했더라도 WHERE 절에서 오른쪽 테이블 컬럼에 일반 조건을 걸면 결과가 내부 조인처럼 줄어들 수 있습니다.

WHERE 조건

LEFT JOIN orders o
  ON o.customer_id = c.customer_id
WHERE o.order_status = 'PAID';

주문이 없는 고객은 o.order_status가 NULL이므로 WHERE에서 제거됩니다.

ON 조건

LEFT JOIN orders o
  ON o.customer_id = c.customer_id
 AND o.order_status = 'PAID';

기준 테이블(고객)은 보존됩니다. 조건에 맞는 주문만 붙고, 매칭이 없으면 NULL로 남습니다.

보존하고 싶은 기준 테이블이 있다면 조건을 ON에 둘지 WHERE에 둘지 신중히 판단해야 합니다.

한 문장 요약

모델링의 관계는 SQL의 조인 조건이 되고, 관계 차수는 결과 행 수를 바꿉니다.