현재 선택한 SQL 과정

SQLP 이론 학습

이론 목록으로 돌아가기

관계형 데이터베이스와 Key의 종류

행·열·관계로 데이터를 표현하는 원리와 Candidate·Primary·Alternate·Foreign Key를 구분한다.

예상 읽기 6

핵심 요약

행·열·관계로 데이터를 표현하는 원리와 Candidate·Primary·Alternate·Foreign Key를 구분한다.

핵심 질문

  1. 관계형 데이터베이스와 Key의 종류에서 반드시 구분해야 할 개념과 결과 규칙은 무엇인가?
  2. 0건·1건·여러 건과 NULL·동점·중복 데이터에서 결과가 어떻게 달라지는가?
  3. 비슷해 보이는 문법과 결과가 같아지는 조건, 달라지는 조건은 무엇인가?
  4. 작은 샘플 데이터를 이용해 결과를 실수 없이 예측하는 순서는 무엇인가?

학습 목표

  • 관계형 모델의 Relation·Tuple·Attribute·Domain을 설명한다.
  • Super Key부터 Foreign Key까지 포함 관계를 구분한다.

개념 지도

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
업무 사실 → 행과 열 → Key·제약조건 → 관계 연산 → 결과 집합

핵심 내용

관계형 데이터베이스는 데이터를 행과 열로 구성된 릴레이션으로 표현하고, 키와 제약조건으로 데이터의 의미를 지킨다.

관계형 용어테이블 관점
RelationTable
TupleRow
AttributeColumn
Domain컬럼이 가질 수 있는 값의 범위

Super Key는 행을 유일하게 식별하는 속성 집합이다. 그중 불필요한 속성을 제거해 최소성을 만족하면 Candidate Key가 된다. 후보키 중 대표가 Primary Key, 선택되지 않은 후보키가 Alternate Key다. Foreign Key는 다른 테이블의 PK 또는 유일 키를 참조해 관계의 무결성을 유지한다.

관계형 연산의 결과도 다시 릴레이션이 되는 폐쇄성이 SQL 조합의 기반이다. 원하는 결과는 어떤 행을 고르고, 어떤 열을 투영하고, 어떤 관계를 조인할지로 생각하면 이해가 쉽다.

흔한 오해와 주의점

  • 후보키는 유일성뿐 아니라 최소성도 만족해야 한다.
  • PK는 테이블마다 하나지만 여러 컬럼으로 구성될 수 있다.
  • FK 값은 참조 대상과 일치해야 하며, 제약이 허용한다면 NULL일 수 있다.

문항 풀이 보강: 관계형 용어·이름·연산

관계형 모델에서 행은 튜플, 열은 속성, 허용 가능한 값의 범위는 도메인이다. 릴레이션은 중복 튜플이 없는 집합이라는 논리 개념이며 물리 테이블의 저장 순서는 ORDER BY 없이는 보장되지 않는다.

키의 포함 관계

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
Super Key
└─ 불필요한 속성이 없는 Candidate Key
   ├─ 대표로 선택한 Primary Key
   └─ 선택되지 않은 Alternate Key

Foreign Key는 부모의 PK뿐 아니라 유일성이 보장된 후보키를 참조할 수 있다. FK 컬럼은 관계의 선택성과 제약 정의에 따라 NULL을 허용할 수 있다.

이름과 순수 관계 연산

물리 테이블 이름은 업무 의미가 명확하고 표준화된 단수 명사를 사용하며, 공백·특수문자·예약어와 의미를 알 수 없는 약어를 피한다.

순수 관계 연산은 다음 네 가지다.

  • SELECT: 조건에 맞는 행을 선택한다.
  • PROJECT: 필요한 속성을 투영한다.
  • JOIN: 관련 튜플을 연결한다.
  • DIVIDE: “모든 조건을 만족”하는 튜플을 구한다.

합집합·교집합·차집합은 일반 집합 연산이며, 관계형 데이터베이스는 이 연산의 결과도 다시 릴레이션이 되는 폐쇄성을 가진다.

문제에 적용하는 순서

키 문제는 유일성 다음에 최소성을 확인한다. 관계 연산 문제는 행을 고르는지, 열을 고르는지, 테이블을 연결하는지, 모든 항목을 만족하는 대상을 찾는지로 구분한다.

관계형 용어 연결

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
Relation  → Table
Tuple     → Row
Attribute → Column
Domain    → Attribute가 가질 수 있는 값의 집합
Degree    → Column 수
Cardinality → Row 수

관계는 이론적으로 중복 Tuple이 없는 집합이지만 SQL Table은 PK나 Unique Constraint가 없으면 중복 행을 저장할 수 있다. 모델의 Key와 제약조건으로 업무 유일성을 구현한다.

Key 분류 사례

고객 테이블에 고객번호와 이메일이 모두 유일하다고 가정한다.

Key의미
Super Key행을 유일하게 하는 속성 집합고객번호+고객명
Candidate Key최소 Super Key고객번호, 이메일
Primary Key대표로 선택한 후보키고객번호
Alternate Key선택되지 않은 후보키이메일
Foreign Key다른 Relation의 후보키 참조주문.고객번호

고객번호+고객명은 유일할 수 있지만 고객번호만으로 충분하므로 최소성이 없어 Candidate Key가 아니다.

관계 무결성

  • Entity Integrity: PK는 NULL이 아니며 각 행을 유일하게 식별한다.
  • Referential Integrity: FK 값은 부모 후보키에 존재하거나 허용된 NULL이다.
  • Domain Integrity: 타입·범위·형식·코드 규칙을 만족한다.

SQL 작성 전에 한 행의 의미와 Candidate Key를 정하면 Join 중복과 잘못된 GROUP BY를 줄일 수 있다.


결과를 검증하는 순서

  1. 각 Query Block이 만드는 한 행의 의미를 먼저 적습니다.
  2. 조건을 적용하기 전 원본 행과 적용 후 남는 행을 작은 표로 그립니다.
  3. NULL 비교가 TRUE, FALSE, UNKNOWN 중 무엇인지 구분합니다.
  4. 중복 제거, 그룹화, 정렬과 행 제한이 적용되는 순서를 확인합니다.
  5. 데이터가 0건·1건·여러 건일 때도 같은 규칙이 성립하는지 검증합니다.

실무와 시험에서 함께 확인할 항목

  • ORDER BY가 없다면 결과 순서를 가정하지 않습니다.
  • 문자열·숫자·날짜 비교에서는 데이터 타입과 명시적 형변환을 확인합니다.
  • 같은 결과처럼 보이는 SQL도 NULL과 중복이 있을 때 달라질 수 있습니다.
  • 문법을 외우기 전에 샘플 데이터 3~5행으로 결과를 직접 계산합니다.

마지막 점검

  • 작성 순서가 아니라 SQL의 논리적 처리 순서로 결과를 계산합니다.
  • NULL을 0이나 빈 값과 같은 것으로 취급하지 않습니다.
  • ORDER BY가 없는 결과 순서와 DISTINCT 없는 중복 제거를 가정하지 않습니다.
  • 비슷한 문법은 0건·다건·NULL 데이터를 넣어 결과가 정말 같은지 확인합니다.

복습 문제

  1. (사원번호, 사원명)이 유일하지만 사원번호만으로도 유일하면 후보키인가?
  2. 후보키와 대체키의 관계를 설명할 수 있는가?
  3. 샘플 데이터 3행으로 결과를 직접 계산할 수 있는가?
  4. NULL이 포함될 때 결과가 달라지는 지점은 어디인가?