SQL 참조키 [ Foreign - key ] 외래키. 그리고 제약조건
- 프로그래밍 정보
- 2010. 2. 9.
반응형
DB 의 SQL 에는 기본키 [ PRIMARY KEY ] 가 있고
또 참조키 [ FOREIGN KEY ] 라는게 있다
참조키는 말 그대로 참조하는 키를 명시하는 것이다
읽기전에 손가락 한번 클릭~ >_<
고마워요 ~ Chu ~ ♥
좀 더 자세히 알아 보자면,
참조키는 유일할 필요가 없다 => 실제로 유일하지 않은 경우가 많음
참조키의 값으로는 부모 테이블에 존재하는 키의 값만을 넣을 수 있다 => 참조 무결성
참조키를 사용하여 부모 테이블의 유일한 값을 참조한다. ( 예를들어, 부모테이블의 기본키를 참조 )
참조키의 값이 부모테이블의 기본키일 필요는 없지만 유일해야 한다.
참조키의 값으로는 부모 테이블에 존재하는 키의 값만을 넣을 수 있다 => 참조 무결성
참조키를 사용하여 부모 테이블의 유일한 값을 참조한다. ( 예를들어, 부모테이블의 기본키를 참조 )
참조키의 값이 부모테이블의 기본키일 필요는 없지만 유일해야 한다.
정도가 있겠다....
딱히 큰 문제는 없을듯 하다
그냥 참조키 선언 후에 참조하고 싶은 테이블의 기본키를 참조해버리면 끝이니까...
참조키 생성하는 법
CRAETE TABLE 테이블명 (
칼럼1, 타입,
칼럼2, 타입,
칼럼3, 타입
FOREIGN KEY ( 칼럼3 )
);
이렇게 하면 칼럼3이 현재 테이블의 참조키가 된다
CRAETE TABLE 테이블명 (
칼럼1, 타입,
칼럼2, 타입,
칼럼3, 타입
FOREIGN KEY ( 칼럼3 )
);
이렇게 하면 칼럼3이 현재 테이블의 참조키가 된다
헌데, 참조키 생성시엔 제약조건을 명시 하는걸 권고하고 있다...
참조키 생성시의 제약조건 명시법
CRAETE TABLE 테이블명1 (
칼럼1, 타입,
칼럼2, 타입,
칼럼3, 타입,
CONSTRAINT 참조할 테이블명_참조할 키 이름_fk ,
FOREIGN KEY (칼럼3),
REFERENCES 참조할 테이블명 (참조할 칼럼명)
);
여기서 CONSTRAINT 문이 제약조건 인데
참조키가 어느 테이블을 참조하는지, 그리고 키 이름, 제약조건은 참조키라고 명시하고 있다
하지만 이건 선택사항 이므로 넣지 않아도 무방하다.
( fk 는 FOREING KEY 의 약자 )
CRAETE TABLE 테이블명1 (
칼럼1, 타입,
칼럼2, 타입,
칼럼3, 타입,
CONSTRAINT 참조할 테이블명_참조할 키 이름_fk ,
FOREIGN KEY (칼럼3),
REFERENCES 참조할 테이블명 (참조할 칼럼명)
);
여기서 CONSTRAINT 문이 제약조건 인데
참조키가 어느 테이블을 참조하는지, 그리고 키 이름, 제약조건은 참조키라고 명시하고 있다
하지만 이건 선택사항 이므로 넣지 않아도 무방하다.
( fk 는 FOREING KEY 의 약자 )
직접 한번 해보죠 그럼 ㅎㅎㅎ
test2_table 이라는 테이블을 생성하고,
기본키로는 test2_id , 그리고 참조키로는 test2_fk 라는 칼럼을 지정했고,
참조키가 참조하는 값은 REFERENCES 에 명시된 test_table 의 id 값을 참조합니다.
테이블 스키마를 보면 좀 더 이해가 빠르지 싶어 한글로 만들었음;;;
이제 테이블 2개가 연결되어 있습니다.
얼마후에 포스팅 할 조인과 서브쿼리, 뷰 같은 유용한 경우에
많이 사용되므로 테이블을 원자적으로 최소한 쪼갠 후에,
여러 테이블로 관리하면 검색도 편하고 관리도 쉽다는거!!
원자적으로 쪼갠다고 하니, 이해가 어렵겠지만,,,,,
다음엔 이해를 위해 정규형을 알아보죠 ㅎㅎ
반응형