MySQL外键到不同的表,具体取决于列

MySQL外键到不同的表,具体取决于列,mysql,Mysql,我不确定这类关系的合适术语,甚至不知道是好是坏。希望我能澄清这个糟糕的标题 我有一个包含以下字段的表: id(pk), type, data(fk) 我希望能够根据“类型”更改数据指向的表。根据类型,可能需要提取不同类型的数据。我基本上是在尝试创建一个变量关系。在MySQL中不能这样做。你需要条件关系 你基本上有三个选择 您可以忽略将这些关系放入数据库 您可以使用插入之前的和更新之前的触发器来强制约束 可以为每种类型的id添加单独的列,并向这些列添加约束 您可以删除键,更改数据类型,然后重新创

我不确定这类关系的合适术语,甚至不知道是好是坏。希望我能澄清这个糟糕的标题

我有一个包含以下字段的表:

id(pk), type, data(fk)

我希望能够根据“类型”更改数据指向的表。根据类型,可能需要提取不同类型的数据。我基本上是在尝试创建一个变量关系。

在MySQL中不能这样做。你需要条件关系

你基本上有三个选择

  • 您可以忽略将这些关系放入数据库
  • 您可以使用插入之前的
    和更新之前的
    触发器来强制约束
  • 可以为每种类型的id添加单独的列,并向这些列添加约束

  • 您可以删除键,更改数据类型,然后重新创建它们。使用外键的目的是什么?@user3056839我试图避免向表中添加与放入表中的所有内容无关的列。所以“typea”可能使用3个公共列,然后有6个不同的列。“Typeb”可能会使用这些相同的公共列,而其余的列则必须使用空值,因为该类型根本不使用这些列。您的用例是什么,@Veo?根据您的需要,2或3可能是更好的选择。基本上我有一个事件表。有所有类型的事件,但是,每种事件类型都有不同的属性。我仍然希望能够在同一个表中列出所有事件,但我不希望有一堆“额外”列,因为它们并不与所有事件相关。所以我认为有条件的关系是可行的,但我不知道这是否可行。那么,你有多个“事件”表?你能把这些合并成一张表吗?我想要一张“事件”表。这就是问题所在。事件1有八个属性,事件2有两个与事件1不同的属性。因此,将它们放在同一个表中会产生10列,事件2有8个空字段,事件1有2个空列。我正试图避免它。@Veo。这可能没什么大不了的。如果8个空值列是
    varchars()
    ,则它们将在每条记录中占用很少的空间。