데이터베이스 시스템에는 학생과 인사 필드가 있습니다. PersonnelCardId와 StudentCardId가 있고 기본 키를 만들었습니다. 그런 다음 cardID를 보유한 지불 장치를 보유하고 있으며 외부 키임을 선언했습니다. 그리고 우리는 행을 삽입 할 수 없었고 연구 후에 우리는 외래 키로 두 개의 기본 키를 참조 할 수 없다는 것을 배웠습니다. 그렇다면이 상황을 어떻게 해결할 수 있습니까? 감사.외래 키에 대한 기본 키 참조 두 개
답변
앞에서 설명한 것처럼 외래 키는 동시에 두 개의 다른 테이블을 참조 할 수 없습니다.
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를 참조 할 수 있습니다 ...
PersonnelCard
및
StudentCard
테이블을 결합하는 방법을 찾아테이블.
실제로 우리는 personnel 테이블과 students 테이블을 결합하고 싶지 않지만 우리는 studentCardId와 personnelCardId를 PaymentDevice 필드에 열로 넣어 다른 테이블에 제약을주고 싶다는 또 다른 해결책을 찾았습니다. alter table PaymentDevice add constraint PaymentDevice_con check ((StudentCardID = NOT NULL 및 PersonnelCardId = NULL) 또는 그 반대); 그러나 그것은 작동하지 않는 것 같습니다 그래서 당신은 어떻게 생각하니? 그건 논리적이지 않니? –
@ user1463542'NULL'과 비교할 때,'='...'대신에'IS'를 사용하고 싶습니다. (StudentCardID IS NULL이 아니고 PersonnelCardId가 NULL 임)' –
@ user1463542 'student'와 'personnel' 테이블에서 여전히 새로운'card' 테이블을 만들고'personnel'과'student'가이'card' 테이블에 자신의 FK를 가질 수 있습니까? –
- 1. 테이블 외래 키에 대한 MySQL 외래 키
- 2. 동일한 테이블의 기본 키에 대한 외래 키 참조 이유 이해?
- 3. 기본 키 대신 외래 키 두 개
- 4. 동일한 테이블과 외래 키에 대한 두 개의 기본 키
- 5. 다국어 디자인을위한 데이터베이스. 외래 키에 대한 이중 고유 키 참조
- 6. 동일한 기본 키에 따라 복수의 외래 키
- 7. 외래 키 복합 기본 키
- 8. 외래 키 데이터 삭제 기본 키에 대한 오류가 표시되어야합니다
- 9. 외래 키에 대한 인덱스
- 10. mySQL의 외래 키 참조
- 11. 외래 키에 대한 복합 외래 키 순서를 확인할 수 없습니다.
- 12. 기본 키와 외래 키에 대한 정보 얻기
- 13. 오라클의 모든 외래 키 참조
- 14. 외래 키 참조
- 15. 자체 참조 외래 키
- 16. 외래 키에 대한 필수 속성
- 17. 외래 키에 대한 SQL Server 제약
- 18. 외래 키 참조 업데이트
- 19. 외래 키 비 기본 키
- 20. 기본 키 + 외래 키에 다중 인덱스를 작성하면 성능상의 이점이 있습니까?
- 21. 복합 기본 키 참조
- 22. 기본 키와 외래 키
- 23. 외래 키 참조를 삭제하지 않고 기본 키에 추가
- 24. 대한 설명 - 기본 외래 키 제약 - 이노
- 25. ASP.NET MVC 외래 키에 대한 친숙한 이름보기
- 26. MySQL : 외래 키 참조
- 27. 몽구스 - 외래 키 참조
- 28. 외래 키 참조
- 29. Oracle 기본 키 참조
- 30. 다른 스키마의 테이블에 대한 외래 키 참조
'자식'인 테이블 (예 : 다른 '부모'테이블을 가리키는 외래 키가 있음) ** 반드시 하위 테이블에 일치하는 레코드가 있어야 자식에 삽입 할 수 있습니다. 예 : 귀하가 지불 테이블에 들어가기 전에 직원 및/또는 학생 기록을 작성하십시오. –
Okey, 우리의 문제는 우리가 두 개의 서로 다른 Card id, 하나는 studentCardId, 다른 하나는 personnelCardId이고 다른 하나는 Students and Personnels이고 다른 하나는 primary 키라고 선언 한 것입니다. 그래서 당신의 정의에 따르면, 하나의 테이블에 대해 일치하는 레코드를 추가 할 수 있다면 다른 테이블에서는 실패 할 것입니다. 그렇다면이 문제를 어떻게 해결할 수 있습니까? 우리는 무엇을 바꾸어야합니까? –