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

标签 mysql optimization schema reference

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

例如:我们有一个“警报”表,用于向用户传递信息。警报可以指代许多不同的事物,您可以收到有关新消息的警报,或者其他用户是否提到了您。这些警报具有不同的类型,并引用不同类型的数据。消息提醒应将用户引导至消息页面,提及提醒应将用户引导至其他用户页面。

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

我想其他选项是每个类型一列,这使得表格非常宽,并且充满了空值,我并不介意,但有些人觉得乏味;还是每种类型的“子”表看起来最正确,但有点矫枉过正?

干杯,

最佳答案

这里有几个原因:

  1. 如前所述,您不能使用外键。
  2. 您不能使用唯一索引(因为消息/用户 ID 可能在表中重复,这意味着您也可以有重复的 message_ids...)
  3. 你得给大家解释一下

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

关于mysql - 引用列是否应该限制在单个表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3442222/

相关文章:

php - 如何解决共享主机上 PHP/MySQL 中的 CWE-259(硬编码密码)?

mysql - 我该如何优化这个 MySQL 查询?

javascript - 通过性能 api 测量站点加载时间

java - 无法通过使用 Jsprit 向服务提供时间窗口来获得正确的优化路线

javascript - 为什么在 Mongoose 模式中嵌套对象?

xml - XSD key /keyref : hierarchical key structure

scala - 如何使用 GenericRecordBuilder 设置记录数组

mysql - 选择查询 zend 框架 2 的顺序和限制

java - 插入时缺少记录

php - 由于 PHP 函数,While 循环只执行一次