在我们的数据库系统中,我们有学生和人员领域。他们有PersonnelCardId和StudentCardId,我们把它们作为主键。然后我们有一个支付cardID的支付设备,我们宣布它是一个外键。我们不能在这种情况下插入一行,并且在研究之后,我们了解到我们不能将两个主键引用到外键。那么我们如何解决这种情况呢?谢谢。对外键的两个主键引用
回答
正如你所说的,一个外键不能同时引用两个不同的表。根据您目前的架构中,cardID
外键只能引用要么PersonnelCardId
或StudentCardId
...
如果我理解正确的话,你的架构看起来像:
PersonnelCard
----------------
PersonnelCardID - PK
PersonnelCardFields
StudentCard
----------------
StudentCardID - PK
StudentCardFields
PaymentDevice
----------------
PaymentDeviceID - PK
CardID - FK
要解决这个问题,你必须找到一种方法,在PersonnelCard
和StudentCard
表结合...
Card
----------------
CardID - PK
CardType - (Personnel or Student)
CardFields
的FK在PaymentDevice
表,现在可以在新的引用PK表。
实际上,我们不希望将人员和学生表结合在一起,但我们想出了另一个解决方案,即我们将studentCardId和personnelCardId作为列放入PaymentDevice字段,并且想要像那样约束它们,alter table PaymentDevice add constraint PaymentDevice_con检查((StudentCardID = NOT NULL AND PersonnelCardId = NULL),反之亦然);然而,它似乎不工作,所以你怎么看?这不合乎逻辑吗? –
@ user1463542与'NULL'比较时,您需要使用'IS'而不是'='...'(StudentCardID不为NULL且PersonnelCardId为NULL)' –
@ user1463542而不是将'student'和'人员'表,你还可以创建一个新的'卡'表,并且'人员'和'学生'拥有他们自己的FK到这张卡表吗? –
- 1. 一个外键引用不同表的两个主键?
- 2. SQL,两个外键引用另一个表的相同主键
- 3. 创建具有复合主键的表引用两个外键
- 4. 数据建模两个引用相同主键的外键
- 5. POSTGRESQL外键引用两个不同表格的主键
- 6. 一个外键和两个主键
- 7. Mysql外键引用两个列,它们是两个不同表中的主键
- 8. 两个外键作为主键
- 9. 复合主键,外键。引用对象或关键字?
- 10. Laravel将外键引用移动到具有两列的主键?
- 11. A柱作为主键或两个外键为主键
- 12. MySQL查询外键引用主键
- 13. 外键是否总是引用主键?
- 14. SQL:外键引用复合主键
- 15. 对同一表中的主键的外键引用EF6
- 16. 有两个外键约束引用同一个主键,都使用ON UPDATE CASCADE
- 17. 引用相同列的两个外键
- 18. MySQL:引用两个父项的外键
- 19. 由两个外键引用的Oracle列
- 20. 两个外键引用一个表
- 21. 两个外键引用另一个表
- 22. 跨2个表引用2个主键的外键?
- 23. 聚集索引的外键VS主键
- 24. 主键SQL中的两个属性(此密钥的引用外键)
- 25. MySQL的 - 引用一个外键的多种可能的主键
- 26. 两个主键
- 27. 如何将两个主键用于一个外键?
- 28. Grails使用主键和外键显示两个表中的值
- 29. Django两个自引用外键
- 30. 跨多个表引用主键的外键?
任何作为'子'的表(例如,有一个外键指向另一个'父'表)必须在父表中有一个匹配的记录,然后才能插入到子中。例如创建您的人事和/或学生记录之前,你没有进入支付表。 –
Okey,我们的问题是我们有两个不同的Card ID,一个是studentCardId,另一个是名为StudentsCardId的两个不同的表名为Students和Personnels,我们将它们声明为主键。所以根据你的定义,如果我们可以为一个表添加一个匹配的记录,它将失败的另一个表。那么我们该如何解决这个问题呢?我们应该改变什么? –