我正在做一个项目,我们一直在创建将引用存储为两列组合的表。
例如:我们有一个“警报”表,用于向用户传递信息。警报可以指代许多不同的事物,您可以收到有关新消息的警报,或者其他用户是否提到了您。这些警报具有不同的类型,并引用不同类型的数据。消息提醒应将用户引导至消息页面,提及提醒应将用户引导至其他用户页面。
我们使用 alert.type 和 alert.article 列,并将 type = MESSAGE 或 type = MENTION 和 article 作为外键存储到消息或用户表中。这让我觉得这是一种糟糕的设计,将对两个不同表的引用压缩到同一列中。但是,由于我们的表是 InnoDB,所以我很难证明这一点。希望我能得到一些专家意见,说明为什么这是一个好/坏的选择。我认为这种方法可能会遇到索引连接的问题,但我真的不太了解。
我想其他选项是每个类型一列,这使得表格非常宽,并且充满了空值,我并不介意,但有些人觉得乏味;还是每种类型的“子”表看起来最正确,但有点矫枉过正?
干杯,
最佳答案
这里有几个原因:
- 如前所述,您不能使用外键。
- 您不能使用唯一索引(因为消息/用户 ID 可能在表中重复,这意味着您也可以有重复的 message_ids...)
- 你得给大家解释一下
“全是空值”?可爱的。此外,它只会有 1/2 的空值(一列总是有一个值)。
关于mysql - 引用列是否应该限制在单个表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3442222/