代码之家  ›  专栏  ›  技术社区  ›  Dwarf Vader

SQL-(外键?)对表名称的约束?

  •  0
  • Dwarf Vader  · 技术社区  · 8 年前

    我很好奇这样的事情是否可能,是否合理。 我在表中有一列,叫做 ref_table 它指向当前条目所涉及的表。比如说,在桌子上 table_people ,则, Person ID 1是客户 人员ID 3是一名员工 ref_tables 将显示“table\u客户端”和“table\u员工”。通过PHP保持这些值的有效性应该没有问题,但是通过SQL实现这些值的一些方法是什么呢?

    我尝试使用INFOROMATION\u模式的外键约束对其进行测试:

    FOREIGN KEY `people_constraint_tables` (`ref_table`)
          REFERENCES `INFORMATION_SCHEMA`.`COLUMNS`(`COLUMN_NAME`)
          ON DELETE RESTRICT
          ON UPDATE RESTRICT
    

    因为它不起作用,所以没有必要对它进行改进。似乎有一种方法可以让它发挥作用,但显然这是一个肮脏的骗局。

    你会用触发器吗?你会这么做吗?有MySQL经验的人告诉我这是否合理,我想知道。非常感谢。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Gordon Linoff    8 年前

    MySQL没有轻松做到这一点的功能。其他数据库则通过生成的列或表继承来实现。

    我会用触发器来执行此操作吗?是的,也不是。如果我必须用一个表来实现这一点,并且我必须使用MySQL,并且我想引入关系完整性,那么触发器就是最好的选择。别无选择。

    但实际上,我只需要为每种引用类型创建一个不同的表。这有一点开销(就部分填充的表而言)。对于某些应用程序,单个引用表非常方便(想到国际化)。但一般来说,我会坚持使用标准方法,即为每个具有正确声明的外键关系的实体创建一个单独的表。