代码之家  ›  专栏  ›  技术社区  ›  Nayan Wadekar

多个表的条件外键

  •  4
  • Nayan Wadekar  · 技术社区  · 15 年前

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

    通过“c”或“e”来标识该数据,以及存储该数据主键的列。

    因此,如何根据所包含的数据授予外键,并动态维护引用完整性。

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

    现在,ID为1的行应该引用具有pk 12的员工表,ID为2的行应该引用具有pk 7的公司表。

    否则,我得为两张桌子做两张不同的桌子。 有没有其他方法来完成它?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Xint0    15 年前

    如果您真的想这样做,您可以有两个可以为空的列,一个列用于CompanyID,另一个列用于充当外键的EmployeeID。

    但我希望您尝试检查数据库模式设计。

        2
  •  1
  •   Anurag    15 年前

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

        3
  •  1
  •   Jagmag    15 年前

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

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

    但是,如果您仍然希望将它存储在一个表中,维护引用完整性的一种方法是通过触发器。

    • 具有一个插入/更新触发器,根据包含“c”/“e”的列的值检查公司主数据/员工主数据中的适当值。

    就我个人而言,我更喜欢避免像触发器这样的逻辑,因为它们很难调试。