引用列是否应限制在单个表中?

时间:2010-08-09 16:46:05

标签: mysql optimization schema reference

我正在开发一个项目,我们一直在创建将引用存储为两列组合的表。

示例:我们有一个“警报”表,用于向用户提供信息。警报可以引用许多不同的内容,您可以收到有关新消息的警报,或者其他用户是否提及过您。这些警报具有不同的类型,并引用不同类型的数据。消息警报应该将用户引导到消息页面,提醒警报应该将用户引导到其他用户页面。

我们使用列alert.type和alert.article并存储type = MESSAGE或type = MENTION和article作为 消息或用户表的外键。这让我感觉很糟糕,将两个不同表格的引用压缩到同一列。但是,由于我们的表是InnoDB,因此我很难证明这一点。希望我能得到一些专家意见,为什么这是一个好/坏的选择。我认为这种方法可能会引入索引连接的问题,但我真的对此不太了解。

我猜其他选项是每个类型的一个列,这使得表格相当宽,并且充满了空白,我并不介意,但有些人觉得乏味;或者每种类型的'子'表似乎最正确,但有点矫枉过正?

干杯,

1 个答案:

答案 0 :(得分:0)

以下是一些原因:

  1. 你不能使用外键,如前所述。
  2. 您不能使用唯一索引(因为消息/用户ID可能在表中重复,这意味着您也可能有重复的message_ids ...)
  3. 你必须向每个人解释
  4. “满满的空”?可爱。此外,它只会是1/2的空值(一列总是有一个值)。