1. 슈퍼키

슈퍼키 = 튜플을 유일하게 구분할 수 있는 모든 속성 또는 속성 조합

쉽게 말하면 한 행을 구분할 수만 있으면 슈퍼키임.

예시:

학번주민번호이름학과
01111111김철수전산
02222222박민지보안

슈퍼키가 될 수 있는 것:

학번
주민번호
학번 + 이름
학번 + 학과
주민번호 + 이름
학번 + 주민번호

왜냐하면 학번이나 주민번호가 들어가면 어쨌든 학생을 구분할 수 있기 때문임.

단, 슈퍼키는 최소성을 따지지 않음.

학번 + 이름

이건 학번만 있어도 구분 가능한데 이름이 붙어 있음.

그래도 구분은 가능하니까 슈퍼키는 맞음.

정리:

슈퍼키 = 유일성만 만족하면 됨
최소성은 만족해도 되고, 안 해도 됨

2. 후보키

후보키 = 슈퍼키 중에서 최소성을 만족하는 키

즉 조건은 2개임.

유일성 + 최소성
조건뜻
유일성한 행을 유일하게 구분 가능
최소성필요 없는 속성이 없어야 함

예시:

학번
주민번호

둘 다 학생을 유일하게 구분할 수 있고, 더 뺄 속성도 없음.

그래서 후보키임.

하지만:

학번 + 이름

이건 슈퍼키는 맞지만 후보키는 아님.

왜냐하면 학번만 있어도 되는데 이름이 붙어 있어서 최소성이 없음.

정리:

후보키 = 기본키가 될 수 있는 후보
후보키 = 유일성 + 최소성 만족

3. 기본키

기본키 = 후보키 중에서 대표로 선택한 키

후보키가 여러 개 있을 수 있음.

예를 들어 학생 테이블에서:

후보키: 학번, 주민번호

둘 다 학생을 구분 가능함.

그런데 설계자가 그중 하나를 대표로 고름.

기본키: 학번

그러면 학번이 이 테이블의 공식 대표 식별자가 됨.

MySQL에서는 이렇게 설정함.

CREATETABLE Student (
  student_idINTPRIMARYKEY,
  rrnVARCHAR(20)UNIQUENOTNULL,
  nameVARCHAR(20)
);

여기서:

student_id = 기본키
rrn = 대체키 역할

기본키의 특징:

중복 불가
NULL 불가
테이블의 공식 대표 식별자
다른 테이블에서 참조할 기준이 됨

중요한 점:

기본키는 후보키 중 하나임
기본키도 슈퍼키임

관계:

슈퍼키 ⊃ 후보키 ⊃ 기본키

4. 대체키

대체키 = 후보키 중에서 기본키로 선택되지 않은 나머지 키

예시:

후보키: 학번, 주민번호
기본키: 학번

그러면:

대체키: 주민번호

반대로 기본키를 주민번호로 정하면:

대체키: 학번

중요한 점:

대체키는 슈퍼키 중 나머지가 아님
대체키는 후보키 중 나머지임

예를 들어:

학번 + 이름

이건 슈퍼키지만 대체키가 아님.

왜냐하면 후보키가 아니기 때문임.

공식처럼 외우면:

대체키 = 후보키 - 기본키

5. 외래키

외래키 = 다른 릴레이션의 기본키를 참조하는 키

쉽게 말하면 테이블끼리 연결하려고 가져온 키임.

예시:

교수 테이블

교수번호교수명
1한다맨
2유선생

여기서:

교수번호 = 교수 테이블의 기본키

학생 테이블

학번학생명교수번호
01김시원1
02박아름1
03김한수2

여기서 학생 테이블의 교수번호는 학생을 구분하는 키가 아님.

학생 테이블의 교수번호는 교수 테이블의 교수번호를 참조함.

학생 테이블의 교수번호
→ 교수 테이블의 교수번호 참조

그래서:

학생 테이블의 교수번호 = 외래키
교수 테이블의 교수번호 = 기본키

외래키의 목적:

테이블끼리 연결
데이터 중복 줄이기
참조 무결성 유지

PRIMARY KEY vs UNIQUE

오늘 헷갈렸던 핵심.

UNIQUE NOT NULL이랑 PRIMARY KEY 차이

구분PRIMARY KEYUNIQUE NOT NULL
중복불가능불가능
NULL불가능불가능
개수테이블당 기본키 제약은 1개여러 개 가능
역할공식 대표 식별자중복 방지용
외래키 참조보통 기본 참조 대상참조 가능하지만 대표는 아님

핵심:

UNIQUE NOT NULL = 중복 X + NULL X
PRIMARY KEY = 중복 X + NULL X + 테이블의 공식 대표키

즉 기능만 보면 비슷하지만, 의미가 다름.

PRIMARY KEY = 대표 신분증
UNIQUE = 중복 금지 스티커

예시:

CREATE TABLE Student (
  student_id INT PRIMARY KEY,
  rrn VARCHAR(20) UNIQUE NOT NULL,
  name VARCHAR(20)
);

뜻:

student_id = 이 테이블의 공식 대표키
rrn = 중복되면 안 되는 대체키
name = 일반 속성

NULL 가능 여부

키NULL 가능?이유
슈퍼키X유일하게 구분해야 하니까
후보키X슈퍼키 + 최소성이라서
기본키X후보키 중 대표라서
대체키X후보키 중 기본키 아닌 것이라서
외래키O 가능참조할 대상이 아직 없을 수도 있음
UNIQUEO 가능MySQL에서는 NULL 여러 개 가능
UNIQUE NOT NULLXNOT NULL을 걸었기 때문

중요:

UNIQUE만 걸면 MySQL에서는 NULL이 여러 개 들어갈 수 있음
기본키처럼 쓰려면 UNIQUE NOT NULL을 같이 걸어야 함

오늘 한 내용 최종 관계

슈퍼키 = 유일성 만족
후보키 = 유일성 + 최소성 만족
기본키 = 후보키 중 대표로 선택한 것
대체키 = 후보키 중 기본키로 선택되지 않은 것
외래키 = 다른 테이블의 기본키를 참조하는 키

포함 관계:

슈퍼키 ⊃ 후보키 ⊃ 기본키

대체키 관계:

대체키 = 후보키 - 기본키

외래키는 별도 개념:

외래키 = 다른 테이블과 연결하는 참조 키

시험용 한 줄 암기

슈퍼키: 유일하게 구분만 되면 됨
후보키: 슈퍼키 중 최소성까지 만족
기본키: 후보키 중 대표로 선택
대체키: 후보키 중 기본키로 선택 안 된 것
외래키: 다른 릴레이션의 기본키를 참조

진짜 짧게 외우면:

슈퍼키 = 구분 가능
후보키 = 구분 가능 + 군더더기 없음
기본키 = 대표 후보키
대체키 = 탈락한 후보키
외래키 = 다른 테이블 연결키

먼저 보호자나 사용자가 앱에 집 주소를 미리 등록합니다.

노인이 산책 중 길을 찾기 어려울 때 앱에서 집으로 가기 버튼을 누르면, 현재 위치에서 집까지 가는 가장 쉬운 길을 안내합니다.

앱은 큰 글씨, 화살표, 음성 안내를 통해 사용자가 복잡한 지도를 보지 않아도 길을 따라갈 수 있게 도와줍니다.

만약 사용자가 길을 오래 찾지 못하거나 같은 장소에 계속 머무르면 보호자에게 현재 위치가 전달되어 도움을 받을 수 있습니다.

즉,

집 주소 등록 → 산책 중 길 헷갈림 → 집으로 가기 버튼 선택 → 큰 글씨·음성 안내 → 보호자 위치 알림

순서로 작동합니다.