2014-10-16 1 views
0

사이의 제약 SQL에서 새로운 오전 및 아주 기본적인 질문이 있습니다.SQL - FK

동일한 외부 테이블을 가리키는 여러 개의 FK가있는 SQL 테이블에서 FK? 테이블간에 규칙을 부과하는 제약 조건을 만들 수 있습니까?

표 1은 이름과 사람 이름 (PK) 그룹의 성별, 성별

표 2 동료 사명의 그룹을 포함 : 여기

는 내가 뭘하려고 오전의 예 방 번호로.

두 번째 테이블에서 FK를 제한하면 동일한 성별의 사람 만이 (가) 특정 성별의 사람과 연관되도록 할 수 있습니다. 방?

이러한 시나리오를 처리하는 더 좋은 방법이 있습니까?

감사합니다.

+0

방 구성원의 성별을 확인하는 사용자 지정 함수를 작성한 다음 방의 테이블에 제약 조건을 추가하여 해당 함수를 호출 할 수 있습니다. 예를 들어 [이 질문] (http://stackoverflow.com/questions/2588072/how-do-i-create-a-multiple-table-check-constraint)을 참조하십시오. – Blorgbeard

답변

-1

객실의 4 명에 대해 별도의 열을 갖고 있지 않습니다. 그 대신에 한 명의 이름 열과 한 개의 열과 그룹으로 룸을 구성하여 4 명의 구성원을 얻은 다음 성별을 확인합니다. 솔루션을 계속하려면 트리거를 추가하여 삽입에 실패하지 않으면 성별이 같은지 확인하십시오.

참고 :이 트리거는 한 번에 하나의 행만 삽입하는 경우에만 작동합니다.

트리거 Production.tr_ForeignTable_gender가
[ForeignTable] ON
INSERT AFTER
있듯이
@@ ROWCOUNT = 0 RETURN IF BEGIN CREATE;
SET NOCOUNT ON; (10), @ Gender2 varchar (10), @ Gender3 varchar (10), @ Gender2 varchar) Gender3의 VARCHAR (10)

선택 @@ 이름 1 = 이름 1 @ NAME2 = NAME2 @ NAME3 = NAME3 @ NAME4 = NAME4
삽입

에서

선택 Gender1 @ = 성별 에서 [PrimaryTable] 여기서 NAME = @ 이름 1

선택 Gender2 = 성별 @ [PrimaryTable] 여기서 이름 = @N 행 ame2

선택 [PrimaryTable]에서 Gender3 = 성별 @ 어디 이름 = @ NAME3

선택 [PrimaryTable]에서 Gender4 = 성별 @ 어디 이름 = @ NAME4

@ Gender1 경우! = @ Gender2 또는 @ Gender2! = @ Gender3 또는 @ Gender3!= @ Gender4
BEGIN
쓰루 50000, '성별이 같을 수 없습니다', 0;
끝;
끝;
GO