2010-10-19 33 views
2

我有一个表,其中包含两种类型的数据,无论是公司还是员工。对多个表的条件外键

通过“C”或“E”识别数据&存储其主键的列。

那么如何根据包含的数据给出外键&动态地维护参照完整性。

id | referenceid | documenttype 
------------------------------- 
1 | 12   | E 
2 | 7   | C 

现在ID为1行应引用Employee表与PK 12 &一行ID 2应参考公司同台PK 7.

否则我必须做出两个两个不同的表。 有没有其他方法可以实现它。

+0

你的意思是从其他表格中包含“C”或“E”的表格的外键*(如果是这种情况,答案是*不可能*)?或相反亦然?您可以请您勾画您的数据库设计。 – 2010-10-19 06:01:36

+0

相关:http://stackoverflow.com/questions/2002985/mysql-conditional-foreign-key-constraints – 2010-10-19 06:04:06

回答

1

如果你真的想这样做,你可以有两个可为null的列,一个用于公司ID,一个用作员工ID作为外键。

但我宁愿您尝试查看数据库模式设计。

1

将表格标准化会更好 - 为公司和员工创建单独的表格。标准化后,你的表现也会更好。由于公司和员工是独立的实体,所以最好不要重叠。

+0

创建动态外键似乎也不可能 – Anurag 2010-10-19 06:06:27

1

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

  • 对于我来说员工/公司似乎不足以让他们将数据存储在一起。 这将使外键引用也很简单。

但是,如果您确实想要将其存储在一个表中,则保持参照完整性的一种方法是通过触发器。

  • 有一个插入/更新触发,在公司主/员工主检查相应的值取决于柱的含有“C” /“E”

个人价值,我宁愿避免这种作为触发器的逻辑非常难以调试。