2026 SQLD 필기 1과목 2장 1~3절 | 정규화·조인·트랜잭션 모델 — 핵심 이론

데이터위자드 ·

2026 SQLD 필기 1과목 2장 1~3절 | 정규화·조인·트랜잭션 모델 — 핵심 이론

필기 · 핵심 이론

정규화는 테이블을 무조건 잘게 쪼개는 작업이 아닙니다. 어떤 속성이 어떤 키에 의존하는지 확인해 중복으로 인한 삽입·수정·삭제 이상을 줄이는 과정입니다. 분리한 테이블은 관계와 조인을 통해 원래 업무 정보를 복원할 수 있어야 합니다.

이번 절에서 익힐 내용

함수 종속 · 제 1정규형 · 제 2정규형과 부분 종속 · 제 3정규형과 이행 종속 · 트랜잭션과 모델의 연결

1. 함수 종속

X→Y는 X 값이 같으면 Y 값이 하나로 정해진다는 뜻입니다. 직원번호→직원명은 성립할 수 있지만 직원명→직원번호는 동명이인 때문에 성립하지 않을 수 있습니다. 현재 표본에서 우연히 값이 모두 다르다는 사실만으로 업무상의 종속을 확정하면 안 됩니다.

종속의 방향을 바꾸면 다른 문장이 됩니다. 상품코드가 상품명을 결정한다는 사실은 상품명이 상품코드를 결정한다는 뜻이 아닙니다. 후보키와 부분·이행 종속을 판단할 때 이 방향이 출발점입니다.

핵심 기준

X→Y는 같은 X에 대해 Y가 하나로 정해짐을 뜻한다.

예제로 적용하기

상품코드 P1의 이름이 항상 연필이고 다른 코드도 연필일 수 있다. 보장되는 종속은?

풀이와 판단 과정

결론: 상품코드→상품명

같은 상품코드의 이름이 하나로 정해지지만 이름이 같은 상품코드는 여러 개일 수 있습니다.

2. 제 1정규형

제 1정규형은 각 속성 값이 해당 도메인에서 원자적인 값을 갖도록 하는 것입니다. 주문 한 행의 상품코드 칸에 P1,P2,P3를 한 문자열로 넣으면 개별 상품의 수량·가격을 연결하고 제약을 적용하기 어렵습니다. 반복 그룹을 주문상세 행들로 분리하면 상품 단위 조회가 가능합니다.

원자성은 값의 업무 의미와 사용 방식에 따라 판단합니다. 주소 문자열을 반드시 글자 단위로 분해하는 것이 정규화는 아닙니다. 별도로 관리·검색해야 하는 반복 항목이 한 칸에 묶였는지 보세요.

핵심 기준

한 칸에 반복되는 상품 목록을 넣기보다 주문상세 여러 행으로 관리한다.

예제로 적용하기

한 주문에 상품별 수량을 기록하려 한다. 적절한 구조는?

풀이와 판단 과정

결론: 주문번호·상품코드·수량의 상세 행

반복되는 상품과 수량을 행으로 분리하면 상품별 집계와 외래키 검증을 할 수 있습니다.

3. 제 2정규형과 부분 종속

제 1정규형을 만족하고, 비키 속성이 후보키의 일부에만 의존하는 부분 함수 종속을 제거하면 제 2정규형을 검토할 수 있습니다. 키가 (주문번호,상품코드)인데 상품명이 상품코드에만 의존한다면 상품명을 상품 테이블로 분리합니다.

복합키가 있는 경우 키의 각 부분을 떼어 비키 속성을 결정하는지 확인하세요. 단일 속성 후보키에는 그 키의 진부분집합에 대한 부분 종속이 생기지 않습니다. 다만 다른 후보키와 전체 종속 관계까지 함께 봐야 정확합니다.

핵심 기준

복합키 일부에 의존하는 비키 속성을 분리해 부분 종속을 제거한다.

예제로 적용하기

PK가 (주문번호,상품코드)이고 상품코드→상품명이다. 우선 분리할 대상은?

풀이와 판단 과정

결론: 상품코드·상품명

상품명은 복합키 전체가 아니라 상품코드에 의존하므로 상품 엔터티로 분리합니다.

4. 제 3정규형과 이행 종속

제 2정규형에서 비키 속성을 거쳐 다른 비키 속성이 결정되는 이행 종속을 제거하는 것이 제 3정규형 학습의 핵심입니다. 직원번호→부서번호, 부서번호→부서명이면 직원 행마다 부서명이 중복됩니다. 직원과 부서를 분리해 부서명은 부서번호 기준으로 관리합니다.

정확한 제 3정규형 정의는 모든 비자명 종속 X→A에 대해 X가 슈퍼키이거나 A가 주요 속성이어야 한다는 조건입니다. SQLD의 기본 사례에서는 비키→비키의 이행 종속을 찾는 방법으로 먼저 판단할 수 있습니다.

핵심 기준

직원번호→부서번호→부서명은 이행 종속 사례다.

예제로 적용하기

부서명 변경 시 직원 100행을 바꾸어야 한다. 개선 구조는?

풀이와 판단 과정

결론: 부서 테이블에 부서명을 한 번 저장하고 직원은 부서번호를 참조한다.

부서명은 부서 단위 속성이므로 부서 엔터티에서 한 번 수정하게 하면 수정 이상을 줄일 수 있습니다.

5. 트랜잭션과 모델의 연결

트랜잭션은 함께 성공하거나 함께 취소되어야 하는 업무 처리 단위입니다. 주문 저장과 재고 차감을 별개 성공으로 두면 주문만 있고 재고는 줄지 않은 상태가 생길 수 있습니다. 모델에서 어느 데이터가 같은 업무 단위로 변경되는지 파악해야 원자적인 처리를 설계할 수 있습니다.

정규화로 분리한 테이블도 하나의 트랜잭션에서 함께 변경할 수 있습니다. 테이블을 분리했다는 이유로 업무 일관성이 깨지는 것이 아닙니다. 반대로 한 테이블이라는 이유만으로 여러 SQL 문이 자동으로 하나의 원자적 처리로 묶이는 것도 아닙니다.

핵심 기준

주문과 재고의 동시 변경은 하나의 트랜잭션으로 묶을 수 있다.

예제로 적용하기

결제 성공 후 주문 저장이 실패했다. 일관성을 위해 필요한 접근은?

풀이와 판단 과정

결론: 업무 단위의 원자성 및 실패 복구를 설계한다.

관련 변경을 트랜잭션으로 묶고 외부 결제가 포함되면 취소·재시도 같은 복구 흐름까지 설계해야 합니다.

한눈에 비교하기

정규형핵심 점검대표 개선
1NF반복 그룹·원자 값상품별 상세 행
2NF부분 종속상품코드→상품명 분리
3NF이행 종속부서번호→부서명 분리
이상 현상중복 저장의 부작용삽입·수정·삭제 불일치 방지

순서대로 풀어 보는 예제

주문상세(주문번호, 상품코드, 상품명, 수량, 고객번호, 고객명)를 생각해 봅니다. 상품명은 상품코드에, 고객명은 고객번호에 의존합니다. 주문번호가 고객번호를 결정한다면 고객 정보는 주문상세의 복합키 전체에 의존하지 않습니다.

상품·고객·주문·주문상세로 나눈 뒤 주문상세는 주문번호와 상품코드를 참조하게 구성합니다. 주문 수량 합계를 계산할 때는 상품명 중복을 제거하려 DISTINCT부터 붙이는 대신 올바른 상세 행 단위에서 집계해야 합니다.

헷갈리는 문장 바로잡기

함수 종속

잘못된 판단 X→Y이면 언제나 Y→X다.

올바른 판단: X→Y는 같은 X에 대해 Y가 하나로 정해짐을 뜻한다.

제 1정규형

잘못된 판단 제 1정규형은 모든 문자열을 한 글자씩 분리한다.

올바른 판단: 한 칸에 반복되는 상품 목록을 넣기보다 주문상세 여러 행으로 관리한다.

제 2정규형과 부분 종속

잘못된 판단 제 2정규형은 이행 종속만 제거한다.

올바른 판단: 복합키 일부에 의존하는 비키 속성을 분리해 부분 종속을 제거한다.

제 3정규형과 이행 종속

잘못된 판단 부서명은 반드시 직원마다 별도 값이어야 한다.

올바른 판단: 직원번호→부서번호→부서명은 이행 종속 사례다.

트랜잭션과 모델의 연결

잘못된 판단 테이블이 다르면 같은 트랜잭션으로 처리할 수 없다.

올바른 판단: 주문과 재고의 동시 변경은 하나의 트랜잭션으로 묶을 수 있다.

이론을 정리했다면 같은 절의 객관식 문제에서 조건과 예외를 확인하세요. 정답을 고른 뒤에는 틀린 선택지가 왜 성립하지 않는지도 설명해 보세요.

핵심 개념 확인 — 객관식 5문제

설명을 읽은 뒤 아래 다섯 문항을 풀어 보세요. 정답을 고르고 틀린 선택지의 오류도 설명할 수 있으면 이 단원의 기준을 이해한 것입니다.

문제 1

정규화·조인·트랜잭션 모델에서 함수 종속에 대한 설명으로 옳은 것은?

  1. ① X→Y는 같은 X에 대해 Y가 하나로 정해짐을 뜻한다.
  2. ② 표본 두 행이 다르면 모든 종속을 확정한다.
  3. ③ X→Y이면 언제나 Y→X다.
  4. ④ 함수 종속은 SQL 함수 호출만 뜻한다.
정답과 해설 보기

정답 ①

X→Y는 X 값이 같으면 Y 값이 하나로 정해진다는 뜻입니다. 직원번호→직원명은 성립할 수 있지만 직원명→직원번호는 동명이인 때문에 성립하지 않을 수 있습니다. 현재 표본에서 우연히 값이 모두 다르다는 사실만으로 업무상의 종속을 확정하면 안 됩니다. 종속의 방향을 바꾸면 다른 문장이 됩니다. 상품코드가 상품명을 결정한다는 사실은 상품명이 상품코드를 결정한다는 뜻이 아닙니다. 후보키와 부분·이행 종속을 판단할 때 이 방향이 출발점입니다.

기억할 핵심

X→Y는 같은 X에 대해 Y가 하나로 정해짐을 뜻한다.

문제 2

정규화·조인·트랜잭션 모델에서 제 1정규형에 대한 설명으로 옳은 것은?

  1. ① 한 칸에 반복되는 상품 목록을 넣기보다 주문상세 여러 행으로 관리한다.
  2. ② 제 1정규형은 모든 문자열을 한 글자씩 분리한다.
  3. ③ 반복 상품을 쉼표로 합치면 관계 제약이 더 쉬워진다.
  4. ④ 정규화는 테이블의 컬럼명을 짧게 바꾸는 것이다.
정답과 해설 보기

정답 ①

제 1정규형은 각 속성 값이 해당 도메인에서 원자적인 값을 갖도록 하는 것입니다. 주문 한 행의 상품코드 칸에 P1,P2,P3를 한 문자열로 넣으면 개별 상품의 수량·가격을 연결하고 제약을 적용하기 어렵습니다. 반복 그룹을 주문상세 행들로 분리하면 상품 단위 조회가 가능합니다. 원자성은 값의 업무 의미와 사용 방식에 따라 판단합니다. 주소 문자열을 반드시 글자 단위로 분해하는 것이 정규화는 아닙니다. 별도로 관리·검색해야 하는 반복 항목이 한 칸에 묶였는지 보세요.

기억할 핵심

한 칸에 반복되는 상품 목록을 넣기보다 주문상세 여러 행으로 관리한다.

문제 3

정규화·조인·트랜잭션 모델에서 제 2정규형과 부분 종속에 대한 설명으로 옳은 것은?

  1. ① 복합키 전체에 의존하는 수량을 무조건 제거한다.
  2. ② 제 2정규형은 이행 종속만 제거한다.
  3. ③ 복합키 일부에 의존하는 비키 속성을 분리해 부분 종속을 제거한다.
  4. ④ 테이블을 합치면 항상 제 2정규형이다.
정답과 해설 보기

정답 ③

제 1정규형을 만족하고, 비키 속성이 후보키의 일부에만 의존하는 부분 함수 종속을 제거하면 제 2정규형을 검토할 수 있습니다. 키가 (주문번호,상품코드)인데 상품명이 상품코드에만 의존한다면 상품명을 상품 테이블로 분리합니다. 복합키가 있는 경우 키의 각 부분을 떼어 비키 속성을 결정하는지 확인하세요. 단일 속성 후보키에는 그 키의 진부분집합에 대한 부분 종속이 생기지 않습니다. 다만 다른 후보키와 전체 종속 관계까지 함께 봐야 정확합니다.

기억할 핵심

복합키 일부에 의존하는 비키 속성을 분리해 부분 종속을 제거한다.

문제 4

정규화·조인·트랜잭션 모델에서 제 3정규형과 이행 종속에 대한 설명으로 옳은 것은?

  1. ① 부서명은 반드시 직원마다 별도 값이어야 한다.
  2. ② 모든 함수 종속을 없애야 정규형이다.
  3. ③ 제 3정규형은 기본키를 제거한다.
  4. ④ 직원번호→부서번호→부서명은 이행 종속 사례다.
정답과 해설 보기

정답 ④

제 2정규형에서 비키 속성을 거쳐 다른 비키 속성이 결정되는 이행 종속을 제거하는 것이 제 3정규형 학습의 핵심입니다. 직원번호→부서번호, 부서번호→부서명이면 직원 행마다 부서명이 중복됩니다. 직원과 부서를 분리해 부서명은 부서번호 기준으로 관리합니다. 정확한 제 3정규형 정의는 모든 비자명 종속 X→A에 대해 X가 슈퍼키이거나 A가 주요 속성이어야 한다는 조건입니다. SQLD의 기본 사례에서는 비키→비키의 이행 종속을 찾는 방법으로 먼저 판단할 수 있습니다.

기억할 핵심

직원번호→부서번호→부서명은 이행 종속 사례다.

문제 5

정규화·조인·트랜잭션 모델에서 트랜잭션과 모델의 연결에 대한 설명으로 옳은 것은?

  1. ① 같은 테이블의 모든 SQL은 항상 자동으로 함께 취소된다.
  2. ② 주문과 재고의 동시 변경은 하나의 트랜잭션으로 묶을 수 있다.
  3. ③ 테이블이 다르면 같은 트랜잭션으로 처리할 수 없다.
  4. ④ 정규화하면 참조 무결성이 필요 없다.
정답과 해설 보기

정답 ②

트랜잭션은 함께 성공하거나 함께 취소되어야 하는 업무 처리 단위입니다. 주문 저장과 재고 차감을 별개 성공으로 두면 주문만 있고 재고는 줄지 않은 상태가 생길 수 있습니다. 모델에서 어느 데이터가 같은 업무 단위로 변경되는지 파악해야 원자적인 처리를 설계할 수 있습니다. 정규화로 분리한 테이블도 하나의 트랜잭션에서 함께 변경할 수 있습니다. 테이블을 분리했다는 이유로 업무 일관성이 깨지는 것이 아닙니다. 반대로 한 테이블이라는 이유만으로 여러 SQL 문이 자동으로 하나의 원자적 처리로 묶이는 것도 아닙니다.

기억할 핵심

주문과 재고의 동시 변경은 하나의 트랜잭션으로 묶을 수 있다.

범위 확인

2026년 학습 범위를 기준으로 구성했습니다. 시험 시행기관의 자격 안내·출제 기준에서 과목과 변경 공지를 확인할 수 있습니다.

이 단원의 객관식 문제 풀기

이전 · 관계·식별자와 카디널리티

다음 · NULL·본질식별자·인조식별자

SQLD 전체 목차

과목별 이론

단원별 객관식

실습

필기 모의고사

스터디클럽의 다른 강의 보기