1. 슈퍼키
슈퍼키 = 튜플을 유일하게 구분할 수 있는 모든 속성 또는 속성 조합
쉽게 말하면 한 행을 구분할 수만 있으면 슈퍼키임.
예시:
| 학번 | 주민번호 | 이름 | 학과 |
|---|---|---|---|
| 01 | 111111 | 김철수 | 전산 |
| 02 | 222222 | 박민지 | 보안 |
슈퍼키가 될 수 있는 것:
학번
주민번호
학번 + 이름
학번 + 학과
주민번호 + 이름
학번 + 주민번호
왜냐하면 학번이나 주민번호가 들어가면 어쨌든 학생을 구분할 수 있기 때문임.
단, 슈퍼키는 최소성을 따지지 않음.
학번 + 이름
이건 학번만 있어도 구분 가능한데 이름이 붙어 있음.
그래도 구분은 가능하니까 슈퍼키는 맞음.
정리:
슈퍼키 = 유일성만 만족하면 됨
최소성은 만족해도 되고, 안 해도 됨
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 KEY | UNIQUE 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 가능 | 참조할 대상이 아직 없을 수도 있음 |
| UNIQUE | O 가능 | MySQL에서는 NULL 여러 개 가능 |
| UNIQUE NOT NULL | X | NOT NULL을 걸었기 때문 |
중요:
UNIQUE만 걸면 MySQL에서는 NULL이 여러 개 들어갈 수 있음
기본키처럼 쓰려면 UNIQUE NOT NULL을 같이 걸어야 함
오늘 한 내용 최종 관계
슈퍼키 = 유일성 만족
후보키 = 유일성 + 최소성 만족
기본키 = 후보키 중 대표로 선택한 것
대체키 = 후보키 중 기본키로 선택되지 않은 것
외래키 = 다른 테이블의 기본키를 참조하는 키
포함 관계:
슈퍼키 ⊃ 후보키 ⊃ 기본키
대체키 관계:
대체키 = 후보키 - 기본키
외래키는 별도 개념:
외래키 = 다른 테이블과 연결하는 참조 키
시험용 한 줄 암기
슈퍼키: 유일하게 구분만 되면 됨
후보키: 슈퍼키 중 최소성까지 만족
기본키: 후보키 중 대표로 선택
대체키: 후보키 중 기본키로 선택 안 된 것
외래키: 다른 릴레이션의 기본키를 참조
진짜 짧게 외우면:
슈퍼키 = 구분 가능
후보키 = 구분 가능 + 군더더기 없음
기본키 = 대표 후보키
대체키 = 탈락한 후보키
외래키 = 다른 테이블 연결키
먼저 보호자나 사용자가 앱에 집 주소를 미리 등록합니다.
노인이 산책 중 길을 찾기 어려울 때 앱에서 집으로 가기 버튼을 누르면, 현재 위치에서 집까지 가는 가장 쉬운 길을 안내합니다.
앱은 큰 글씨, 화살표, 음성 안내를 통해 사용자가 복잡한 지도를 보지 않아도 길을 따라갈 수 있게 도와줍니다.
만약 사용자가 길을 오래 찾지 못하거나 같은 장소에 계속 머무르면 보호자에게 현재 위치가 전달되어 도움을 받을 수 있습니다.
즉,
집 주소 등록 → 산책 중 길 헷갈림 → 집으로 가기 버튼 선택 → 큰 글씨·음성 안내 → 보호자 위치 알림
순서로 작동합니다.