单行摘要表是否应该有主键?

时间:2009-04-07 16:16:47

标签: mysql schema

假设您有一个汇总表,该汇总表只有一行(存储一行关于另一个表的统计信息)。在这种情况下,我正在使用InnoDB,以便我可以更新它以及它意味着包含事务性摘要的表。我应该让这个表有一个主键吗?如果是这样,那么,只是一个总是等于1的tinyint?

7 个答案:

答案 0 :(得分:3)

如果您不提供隐藏的主键,

InnoDB将为您创建一个隐藏的主键。

有时可以更轻松地访问此密钥,如

INSERT
...
ON DUPLICATE KEY UPDATE

可用于更新此表,无论它是否已有值。

是的,只需使用常量1

答案 1 :(得分:2)

我认为你应该,你不知道将来你是否可以使用相同的表来存储其他表的统计数据,这似乎是store'em的好地方,那么你需要识别每一行桌子。

答案 2 :(得分:1)

我会在其上放置一个标识列(我不知道InnoDB的等价物是什么)。这样做无害,如果您需要,可以更容易地选择或删除特定行。

答案 3 :(得分:1)

鉴于大多数其他答案都是“不,你不需要答案”,我将提供魔鬼的辩护答案。

主键约束可确保您不会在应用约束的列中获取具有重复值的行。你说你希望这个表有一行,那么为什么不会你声明约束?它可以帮助防止重复,这是你想要的。

答案 4 :(得分:0)

在这样的情况下,我从不打扰。 PK用于区分其他记录,在这种情况下没有。

答案 5 :(得分:0)

如果您计划扩展此表怎么办?定义一个键可能会有所帮助。同样,这只是一种意见,而不是你的必要条件。

答案 6 :(得分:0)

我现在不介绍PK。如果您决定将此表用于其他记录,只需重构并添加一个新行(正如您可能需要的那样)(过早优化)。添加这样的PK还有一个原因:如果你使用的框架在没有标识记录的PK的情况下无法更新记录。