-
4장 2.2 외래 키 지원데이터베이스/Real MySQL 8.0 2022. 8. 14. 22:35
키에 대한 설명을 먼저 읽고 오시면 좋습니다.
[Real MySQL 8.0] - 4장 2.1 프라이머리 키에 의한 클러스터링 인덱스
외래 키(Foreign Key)
이전 글에서 여러 특별한 키가 있다고 말씀드렸습니다.
외래 키는 관계형 데이터베이스에서 매우 중요한 개념이기 때문에 자세하게 설명하고 넘어가겠습니다.
외래 키는 다른 테이블을 참조하기 위해 사용하는 키입니다.
예를 들어보겠습니다.
영화사에서 회원을 관리하기 위한 데이터베이스를 만들었습니다.
회원 테이블
사용자 ID(PK) 멤버십 등급 현재 포인트 총 관람 횟수 예매한 영화 제목 1 실버 10000 포인트 10번 토르 : 러브 앤 썬더 2 골드 30000 포인트 47번 범죄도시 2 척 보기에는 문제가 없어 보이는 데이터베이스입니다.
하지만 어떤 사람이 지인과 같이 보기 위해 여러 티켓을 예매한다면 어떻게 해야 할까요?
사용자 ID는 프라이머리 키(PK)이기 때문에 레코드를 추가할 수 없습니다.
그렇다면 회원만 관리하는 테이블과 예매한 영화를 관리하는 테이블(이하 영화 테이블)을 분리하여 만들어야겠습니다.
회원 테이블
사용자 ID(PK) 멤버십 등급 현재 포인트 총 관람 횟수 1 실버 10000 포인트 10번 2 골드 30000 포인트 47번 영화 테이블
사용자 ID(PK) 예매한 영화 제목 1 토르 : 러브 앤 썬더 2 범죄도시 2 자세히 보니 영화 테이블의 ID가 아직 PK입니다.
아직 추가 예매를 할 수 없겠네요.
이럴 때 필요한 것이 외래 키입니다.
영화 테이블
사용자 ID(FK) 예매한 영화 제목 1 토르 : 러브 앤 썬더 1 토르 : 러브 앤 썬더 2 범죄도시 2 2 범죄도시 2 2 범죄도시 2 2 범죄도시 2 1번 사용자는 친구와 같이 보나 보네요.
2번 사용자는 가족이 모여 영화를 관람하는 모양입니다.
영화 테이블의 사용자 ID는 이 테이블에서 생성한 것이 아닙니다.
회원 테이블에서 '참조'해온 값입니다.
다시, 회원 테이블을 참조하여 회원 테이블의 PK인 사용자 ID를 이용해
영화 테이블에 회원 정보가 있는 것처럼 보여주고 있습니다.
그런데 왜 PK를 참조해야 할까요?
만약 멤버십 등급을 외래 키로 삼는다면 누가 누구인지 구별할 수가 없겠죠.
따라서 외래 키는 프라이머리 키처럼 고유해야만 사용이 가능합니다.
InnoDB도 이러한 외래 키를 지원합니다. (MyISAM은 지원하지 않음)
대신 외래 키를 사용할 때는 PK-FK 테이블 간의 관계 유지 때문에 자원을 소모하게 되고,
예상치 못한 데이터 변경이 일어날 수 있기 때문에 조심해서 사용해야 합니다.
'데이터베이스 > Real MySQL 8.0' 카테고리의 다른 글
4장 2.1 프라이머리 키에 의한 클러스터링 인덱스 (0) 2022.08.14 4장 1.9 트랜잭션 지원 메타데이터 (0) 2022.08.11 4장 1.8 스레드 풀 (0) 2022.08.11 4장 1.6-7 쿼리 실행 구조 및 쿼리 캐시 (0) 2022.08.11 4장 1.4-5 플러그인 및 컴포넌트 (0) 2022.08.10