Mysql 多个表的条件外键

Mysql 多个表的条件外键,mysql,foreign-keys,Mysql,Foreign Keys,我有一个表,其中包含两种类型的数据,一种是公司数据,另一种是员工数据 通过“C”或“E”来标识该数据&存储该数据主键的列 那么,如何根据包含的数据给出外键并动态维护引用完整性呢 id | referenceid | documenttype ------------------------------- 1 | 12 | E 2 | 7 | C 现在,id为1的行应该引用pk为12的员工表,id为2的行应该引用pk为7的公司表 否则我就得为

我有一个表,其中包含两种类型的数据,一种是公司数据,另一种是员工数据

通过“C”或“E”来标识该数据&存储该数据主键的列

那么,如何根据包含的数据给出外键并动态维护引用完整性呢

id | referenceid  | documenttype 
-------------------------------
1  | 12           | E 
2  | 7            | C 
现在,id为1的行应该引用pk为12的员工表,id为2的行应该引用pk为7的公司表

否则我就得为这两个人做两张不同的桌子。
有没有其他方法可以实现这一点。

最好是规范化表格-为公司和员工创建单独的表格。在标准化之后,您还可以获得更好的性能。由于公司和员工是独立的实体,最好不要重叠。

就个人而言,我会选择两个不同的表格选项

  • 员工/公司似乎非常清晰,我不想将他们的数据存储在一起。 这将使外键引用也变得简单明了
但是,如果您确实希望仍将其存储在一个表中,则维护引用完整性的一种方法是通过触发器

  • 具有一个Insert/Update触发器,该触发器根据包含“C”/“E”的列的值检查公司主数据/员工主数据中的适当值

就我个人而言,我更愿意避免这样的逻辑,因为触发器是出了名的难以调试。

如果您真的想这样做,您可以有两个可为空的列,一个用于CompanyId,另一个用于EmployeeId,用作外键


但是我希望您尝试检查数据库架构设计。

您是指从包含
C
E
的表中找到其他表的外键(如果是这种情况,则答案不可能)?反之亦然?请你画出你的数据库设计。相关:创建动态外键似乎也是不可能的