| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 혼자 공부하는 C언어
- 이것이 자바다
- coding test
- buffer
- 이스케이프 문자
- Selection Sorting
- 메모리구조
- Stack
- Serialization
- Graph
- list 컬렉션
- C 언어 코딩 도장
- 윤성우의 열혈 자료구조
- Algorithm
- datastructure
- 알기쉬운 알고리즘
- JSON
- C programming
- insertion sort
- 윤성우 열혈자료구조
- ㅅ
- s
- stream
- R
- Today
- Total
Engineering Note
[Database] 외래키(Foreign Key) 본문
외래키(Foreign Key)
외래키는 어떤 릴레이션에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키다. 다른 말로, 다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합이 외래키다. 기본키가 아니더라도 투플을 구분할 수 있는 키라면 외래키로 사용할 수 있다.
외래키는 릴레이션간의 관계를 맺어줄 때 사용한다.
인터넷 쇼핑몰 데이터베이스를 통해 알아 보는 외래키
고객 릴레이션
| 고객(고객아이디(PK), 고객이름, 나이, 등급, 직업, 적립급) |
주문 릴레이션
| 주문(주문번호(PK), 주문고객(FK, 고객아이디), 조문제품, 수량, 단가, 주문일자) |
주문릴레이션의 주문 고객 속성이 고객 릴레이션의 고객아이디의 속성을 참조하고 있고, 주문고객 속성은 외래키이다. 이렇게 외래키를 통해 고객 릴레이션과 주문 릴레이션이 관계를 맺어, 주문 릴레이션의 튜플과 연관성이 있는 고객 릴레이션의 튜플을 연결시킬 수 있다. 이때 주문 릴레이션처럼, 외래키를 가진 릴레이션을 참조하는 릴레이션이라하고, 고객 릴레이션 같이 기본키를 가진 릴레이션을 '참조되는 릴레이션'이라고 한다.
학생 상담 데이터베이스를 통해 알아보는 외래키
학생 릴레이션
| 학생(학번(PK), 이름, 학년) |
상담 릴레이션
| 상담(학번(FK), 담당교사(FK), 상담일자, 내용) |
교사 릴레이션
| 교사(교사번호(PK), 이름) |
3개의 릴레이션은 외래키를 이용해 서로의 관계를 표현하고 있다. 상담릴레이션의 학번 속성은 학생 릴레이션의 기본키인 학번 속성을 참조하는 외래키이고, 담당교사 속성은 교사 릴레이션의 기본키인 교사번호 속성을 참조하는 외래키다. 그리고 상담 릴레이션의 기본키는 두 외래키인 학번과 담당교사 속성의 조합으로 구성되어 있다. 이처럼 하나의 릴레이션에는 외래키가 여러 개 존재할 수도 있다. 또, 외래키를 기본키로 구성할 수도 있다.
기본키와 외래키가 함께 정의된 릴레이션(자기 자신이 속한 릴레이션이 기본키를 외래키로 참조)
고객 릴레이션
| 고객아이디 | 고객이름 | 나이 | 등급 | 직업 | 적립금 | 추천고객 |
| appple | 김현준 | 20 | gold | 학생 | 1000 | orange |
| banana | orange | |||||
| carrot | apple | |||||
| orage | null |
위 고객 릴레이션은 고객아이디 속성이 기본키다. 그리고 추천고객 속성은 추천한 고객의 아이디를 의미하므로 같은 길레이션의 고객아이디, 즉 기본키를 참조하는 외래키다. 이처럼 고객 릴레이션은 기본키와 외래키가 하나의 릴레이션에서 표현되며, 이것은 고객 릴레이션이 자신과 관계를 맺고 있음을 의미한다.
참고 자료 : 데이터베이스 개론(김연희, 한빛아카데미)
'Computer Science > Database' 카테고리의 다른 글
| [Database] 트랜잭션과 잠금(MySQL) (0) | 2026.01.01 |
|---|---|
| [Database] 중간테이블은 정규화의 결과다. 확장성은 덤. (0) | 2026.01.01 |
| [Database] 데이터베이스의 트랜잭션 처리 연산 과정 (0) | 2025.12.24 |
| [Database] FLUSH와 COMMIT 차이 (0) | 2025.10.07 |
| [Database] H2 다운로드 및 실행방법과 실행 모드 (0) | 2025.10.07 |