多个表的条件外键

时间:2010-10-19 05:57:25

标签: mysql foreign-keys

我有一个表格,其中包含两种类型的数据,无论是公司还是员工。

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

那么如何根据所包含的数据提供外键呢?动态维护参照完整性。

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

现在,带有id 1的行应该引用带有pk 12&的Employee表。 id为2的行应该使用pk 7引用Company表。

否则我必须为两者制作两个不同的表。 还有其他方法可以实现它。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

  • 员工/公司似乎足够明显,我不想将他们的数据存储在一起。 这将使外键引用也很直接。

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

  • 有一个插入/更新触发器,用于检查公司主/员工主数据中的相应值,具体取决于包含'C'/'E'的列的值

就个人而言,我宁愿避免这样的逻辑,因为众所周知,触发器很难调试。