Mysql 多个表的条件外键
我有一个表,其中包含两种类型的数据,一种是公司数据,另一种是员工数据 通过“C”或“E”来标识该数据&存储该数据主键的列 那么,如何根据包含的数据给出外键并动态维护引用完整性呢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的公司表 否则我就得为
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
的表中找到其他表的外键(如果是这种情况,则答案不可能)?反之亦然?请你画出你的数据库设计。相关:创建动态外键似乎也是不可能的