1

데이터베이스 시스템에는 학생과 인사 필드가 있습니다. PersonnelCardId와 StudentCardId가 있고 기본 키를 만들었습니다. 그런 다음 cardID를 보유한 지불 장치를 보유하고 있으며 외부 키임을 선언했습니다. 그리고 우리는 행을 삽입 할 수 없었고 연구 후에 우리는 외래 키로 두 개의 기본 키를 참조 할 수 없다는 것을 배웠습니다. 그렇다면이 상황을 어떻게 해결할 수 있습니까? 감사.외래 키에 대한 기본 키 참조 두 개

+3

'자식'인 테이블 (예 : 다른 '부모'테이블을 가리키는 외래 키가 있음) ** 반드시 하위 테이블에 일치하는 레코드가 있어야 자식에 삽입 할 수 있습니다. 예 : 귀하가 지불 테이블에 들어가기 전에 직원 및/또는 학생 기록을 작성하십시오. –

+0

Okey, 우리의 문제는 우리가 두 개의 서로 다른 Card id, 하나는 studentCardId, 다른 하나는 personnelCardId이고 다른 하나는 Students and Personnels이고 다른 하나는 primary 키라고 선언 한 것입니다. 그래서 당신의 정의에 따르면, 하나의 테이블에 대해 일치하는 레코드를 추가 할 수 있다면 다른 테이블에서는 실패 할 것입니다. 그렇다면이 문제를 어떻게 해결할 수 있습니까? 우리는 무엇을 바꾸어야합니까? –

답변

5

앞에서 설명한 것처럼 외래 키는 동시에 두 개의 다른 테이블을 참조 할 수 없습니다.

PersonnelCard 
---------------- 
PersonnelCardID - PK 
PersonnelCardFields 


StudentCard 
---------------- 
StudentCardID - PK 
StudentCardFields 


PaymentDevice 
---------------- 
PaymentDeviceID - PK 
CardID - FK 

이 문제를 해결하려면, 당신이해야합니다 : 현재 스키마로, cardID 외국 키는 하나 PersonnelCardId 또는 StudentCardId ...

만약 내가 제대로 이해하고, 스키마가 같이 보입니다 참조 할 수 있습니다

Card 
---------------- 
CardID - PK 
CardType - (Personnel or Student) 
CardFields 

FK는 PaymentDevice 테이블에 이제 새로운에 PK를 참조 할 수 있습니다 ... PersonnelCardStudentCard 테이블을 결합하는 방법을 찾아테이블.

+0

실제로 우리는 personnel 테이블과 students 테이블을 결합하고 싶지 않지만 우리는 studentCardId와 personnelCardId를 PaymentDevice 필드에 열로 넣어 다른 테이블에 제약을주고 싶다는 또 다른 해결책을 찾았습니다. alter table PaymentDevice add constraint PaymentDevice_con check ((StudentCardID = NOT NULL 및 PersonnelCardId = NULL) 또는 그 반대); 그러나 그것은 작동하지 않는 것 같습니다 그래서 당신은 어떻게 생각하니? 그건 논리적이지 않니? –

+1

@ user1463542'NULL'과 비교할 때,'='...'대신에'IS'를 사용하고 싶습니다. (StudentCardID IS NULL이 아니고 PersonnelCardId가 NULL 임)' –

+2

@ user1463542 'student'와 'personnel' 테이블에서 여전히 새로운'card' 테이블을 만들고'personnel'과'student'가이'card' 테이블에 자신의 FK를 가질 수 있습니까? –