MySql 외래키(Foreign Key)

 

DBMS(DataBase Management System)는 데이터를 일관성있게 관리할 수 있도록 테이블에 다양한 제약 조건들을 설정할 수 있도록 한다.
외래키(Foreign Key)는 DBMS에서 테이블에 설정하는 하나의 제약 조건 중 하나로 효율적인 테이블 구조를 만들기 위해 반드시 다룰 줄 알아야 한다.

send me email if you have any questions.


외래키(Foreign Key) 제약조건 추가

제약조건 정리글을 참조.

외래키(Foreign Key) 유용성

공지사항 테이블

user_id header body files
testuser 제목1 본문1 file1.jpg
testuser 제목2 본문2 file2.jpg
testuser 제목3 본문3 file3.jpg

위와 같은 공지사항의 정보를 저장하는 테이블이 있다 가정했을 때, testuser가 게시글을 작성할 수록 user_id 즉, 게시글의 작성자에 대한 정보는 중복데이터로 누적되게 된다.
이러한 테이블구조를 규모가 큰 서비스에 적용한다면 중복되는 데이터는 엄청날 것이다.

유저정보 테이블

user_id pwd age sex
testuser xxx 20 male
user xxx 21 female
uuser xxxx 22 male

위처럼 user들의 정보를 담은 테이블이 따로 있다 가정했을 때, 공지사항 테이블의 user_id를 외래키(Foreign Key)로 설정하고 유저정보 테이블의 user_id를 참조하도록 하면 데이터중복이 없으면서 문제없이 데이터를 저장, 관리할 수 있다.

외래키(Foreign Key) 역할

  • 외래키는 두개의 테이블을 연결해주는 연결 다리 역할을 한다. 기본키(Primary Key)가 중복된 데이터가 하나의 테이블에 삽입되는 것을 방지하는 역할을 하는데 외래키 역시 비슷하게 문제를 방지하는 역할을 수행한다. 외래키는 새롭게 추가되는 행에서 외래키에 해당하는 값이 외래키가 참조하는 테이블에 존재하는지를 체크한다.
    예를 들어, 위의 공지사항 테이블에 새로운 데이터를 넣고자 할때 외래키에 해당하는 user_id가 아직 가입하지 않은 사용자의 정보면 DBMS 는 에러를 발생시켜서 해당 데이터 삽입을 막는다. 이는 테이블 내에 저장되어있는 데이터가 항상 참조하는 값이 있다는 것을 보장해주는 역할을 합니다.