MySQL Foreign key 개념 및 예제 다뤄보기
* Foreign key
등장배경 ? 정보의 중복 저장 방지 !
작성자 정보가 중복해서 저장되면
① 메모리 낭비 문제와
② 작성자 정보 변경 시 결함 문제가 발생할 수 있다.
작성자 테이블 생성:
작성자 정보를 저장하기 위한 별도의 테이블을 생성
이 테이블은 작성자 번호와 작성자 이름, 작성자 메일, 작성자 사진 정보를 저장
다른 테이블에서 작성자 번호 사용:
다른 테이블에서 작성자 정보를 저장할 때,
작성자 번호를 참조하여 작성자 테이블과 연결.
예를 들어, "게시글" 테이블에서 작성자 정보를 저장하는 경우,
작성자 번호를 Foreign key로 사용하여 작성자 테이블과 관련시킨다.
작성자 정보 중복 제거:
작성자 정보 중복을 제거하고 작성자 테이블에서 각 작성자의 정보를 유일하게 관리
작성자 이름, 작성자 메일, 작성자 사진 정보는
작성자 번호를 통해 관련된 테이블에서 참조할 수 있음
* Foreign key 등장배경 (중복컬럼. 가변 개수의 데이터)
등장배경 ? 중복 컬럼을 해결하기위해 !
게시글마다 첨부 파일의 갯수가 달라서 컬럼 영역이 낭비된다 !
* Foreign key 등장배경 (중복컬럼. 가변 개수의 데이터)
① 게시글에 첨부하는 파일 개수만큼만 메모리 사용
② 첨부파일 갯수의 제한이 없다
## FK(foreign key) 제약 조건 설정
- 다른 테이블의 데이터와 연관된 데이터를 저장할 때 무효한 데이터가 입력되지 않도록 제어하는 문법이다.
- 다른 테이블의 데이터가 참조하는 데이터를 임의의 지우지 못하도록 제어하는 문법이다.
- 그래서 데이터의 무결성(data integrity; 결함이 없는 상태)을 유지하게 도와주는 문법이다.
다른 테이블의 PK를 참조하는 컬럼으로 선언한다.
alter table 테이블명
add constraint 제약조건이름 foreign key (컬럼명) references 테이블명(컬럼명);
alter table test2
add constraint test2_bno_fk foreign key (bno) references test1(no);
예시1 )
다른 테이블의 데이터와 연관된 데이터를 저장할 때 무효한 데이터가 입력되지 않도록 제어하는 문법이다.
test1에 있는 no5를 삭제하려고해도 삭제할 수 없다 !
왜냐하면 test2에 참조하고 있기 때문에 Forign key가 이를 방지한다.
예시2 )
다른 테이블의 데이터와 연관된 데이터를 저장할 때 무효한 데이터가 입력되지 않도록 제어하는 문법이다.
test2에 'x.gif'를 삽입하려고해도 할 수 없다 !
왜냐하면 test1에 참조되지 않은 값을 삽입하려하고 있기 때문에 Forign key가 이를 방지한다.