/*

 * http://sosal.kr/

 * made by so_Sal

 */

 

 

 

 

결혼정보회사 데이터베이스를 설계하면서 Foreign key 제약조건을 걸게 되었는데

 

여기서 phpMyAdmin을 이용하여 남자 회원정보 테이블과 직업테이블간의 제약조건을 예제로

 

외래키 제약조건을 써보고자 합니다~~

 

 

 

 

Foreign key 제약조건을 걸기 위해선 테이블의 스토리지 엔진을 꼭 InnoDB로 설정해주셔야 합니다.

 


 

 

 

테이블을 만들면서 스토리지 엔진을 선택하셔도 되고, 테이블 작업 탭에서 수정가능합니다.

 

남자 회원정보 테이블에는 아래와 같은 Attribute 들이 있습니다.

 


 

 

 

여기서 ID는 Primary key이고, Job, School, Property, Income 등등을 다른테이블과 foreign키로 연동하여

 

데이터베이스를 구축하기로 하였는데, 남성회원정보 테이블과 Income 테이블에 대해서  Foreign key 제약조건을 설정해보겠습니다.

 

Income 테이블에는 아래와 같은 Atrribute 들이 있습니다.

 


 

 

 

 

남성회원정보 Attribute중 하나인 Income을 foreign key로 Income 테이블을 가리켜

 

Income(수입)에 따른 점수(score)를 주기 위해서 지금 제약조건을 설정하려고 합니다.

 

 


 

 

남성회원정보 - 인덱스의 New 버튼을 이용하여 Index를 만들어줍니다.

 

 

 


 

 

인덱스 이름에는 아무렇게나 작성하셔도 좋고,

 

인덱스 종류에는 INDEX를 선택해주고, 칼럼에는 foreign key로 사용할 Attribute를 선택해주시면 됩니다.

 

이제 인덱스를 만들었으니, 실제로 Foreign key를 등록해봅시다.

 

 

 


 

 

 

왼쪽 남성회원 정보에서 인덱스 버튼을 누른 후 우측에 뜨는 테이블에서

 

Relation view를 누르면 아래와 같은 화면이 보입니다.

 

 


 

 

남성정보의 Attribute에 해당하는 Income에 대해서는 실제 Income 테이블의 Income attribute 를 설정해주고

 

Constraint name에 대해서는 마음대로 정해주셔도 됩니다. 저는 Income_foreign_constraint로 했고

 

Delete 할 때, Update 할 때 어떤 방식으로 행동할 지 결정해줄 수 있습니다.

 

 

1. CASCADE : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 함께 변경/삭제됩니다.

 

2. SET NULL : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 참조하고 있는 값은 NULL로 세팅됩니다.

 

3. NO ACTION : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 변경/삭제할 개체만 변경/삭제되고 참조하고 있는 개체는 변동이 없습니다.

 

4. RESTRICT : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 변경/삭제가 취소됩니다.(제한)

 

 

 

 

아래에 완료를 눌러주시면 완료입니다.

 

하지만 Foreign Key로 사용하고있는 테이블의 Attribute끼리 데이터 타입이 다를 경우 Foreign key 제약조건이 설정되지 않을 수 있습니다.

저작자 표시 비영리 변경 금지
신고
Posted by sosal sosal

댓글을 달아 주세요

  1. 2015.05.11 22:15 신고

    유용한 정보 감사합니다. 죄송하지만 하나만 여쭤봐도 되겠습니까?
    phpmyadmin에서 위처럼 1개의 col만 외래키를 지정하는건 되는데,
    2~3개의 col을 외래키로 지정하려하면 위처럼 방법은 없는거 같고,
    sql문으로 작성을 해도 #1215 - Cannot add foreign key constraint 가 뜹니다.
    혹시 다른 방법이 있나요?

    • 2015.05.12 01:10 신고

      phpMyAdmin을 다시 설치해서 해볼 수 없는 상황이라 딥변을 제대로 못드리는점 죄송하네요.

      http://stackoverflow.com/questions/953035/multiple-column-foreign-key-in-mysql

      이렇게 command에서 직접 지정해줄 수 있으니 phpMyAdmin에서도 불가능할것 같진 않아보입니다.
      물론 ENGINE은 InnoDB이구요.