2010-08-09 60 views
1

我正在处理一个项目,并且我们一直在创建存储引用的表格作为两列的组合。应该将引用列限制在单个表中吗?

举例:我们有一个'alerts'表,用来向用户传递信息。警报可能涉及许多不同的事情,您可能会收到有关新消息的警报,或者是否有其他用户提及您。这些警报具有不同的类型,并引用不同类型的数据。消息警报应该将用户引导至消息页面,提醒警报应该将用户引导至其他用户页面。

我们使用列alert.type和alert.article并存储type = MESSAGE或type = MENTION和article作为的任何的外键或消息或用户表。这让我感觉像是一种糟糕的设计,将对两个不同表格的引用压缩到同一列中。但是,由于我们的表是InnoDB,所以我有一段艰难的时间来证明这一点。希望我能得到一些专家意见,为什么这是一个好/不好的选择。我认为这种方法可能会导致索引连接的问题,但我真的不知道这一点。

我想其他选项是每个类型的列,这使得表格非常宽,并且充满了空值,我并不介意,但有些会觉得乏味;或每个类型的'孩子'表,这似乎是最正确的,但有点矫枉过正?

干杯,

+0

我同意你的评价:当前的变量引用使得使用真正的外键是不可能的,这对我来说是一种破坏行为。两个可选的外键列或两个连接表都很好。 – bobince 2010-08-09 18:28:44

回答

0

这里有几个原因:

  1. 你不能使用外键,如之前所说的。
  2. 你不能用一个唯一索引(因为消息/用户ID可以在表中,这意味着你可以有重复了Message_ID也被复制......)
  3. ,你必须把它给大家讲解

“充满空值”?可爱。此外,它只会有1/2的空值(一列总会有一个值)。

相关问题