Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 单行汇总表应该有主键吗?_Mysql_Schema - Fatal编程技术网

Mysql 单行汇总表应该有主键吗?

Mysql 单行汇总表应该有主键吗?,mysql,schema,Mysql,Schema,假设您有一个只包含一行的汇总表(存储关于另一个表的统计数据行)。在本例中,我使用的是InnoDB,这样我就可以更新它以及它要包含事务摘要的表。我应该让这个表有一个主键吗?如果是这样的话,什么,只是一个总是等于1的极小值?在这种情况下,我从不麻烦。PK用于区别于其他记录,在这种情况下没有记录。我想你应该这样做,你不知道将来是否可以使用同一个表来存储其他表的统计数据,这似乎是一个存储它们的好地方,然后您需要标识表中的每一行。如果您计划扩展此表,该怎么办?定义一个键可能会有一些意义。再说一次,这只是一

假设您有一个只包含一行的汇总表(存储关于另一个表的统计数据行)。在本例中,我使用的是InnoDB,这样我就可以更新它以及它要包含事务摘要的表。我应该让这个表有一个主键吗?如果是这样的话,什么,只是一个总是等于1的极小值?

在这种情况下,我从不麻烦。PK用于区别于其他记录,在这种情况下没有记录。

我想你应该这样做,你不知道将来是否可以使用同一个表来存储其他表的统计数据,这似乎是一个存储它们的好地方,然后您需要标识表中的每一行。

如果您计划扩展此表,该怎么办?定义一个键可能会有一些意义。再说一次,这只是一种观点,对你来说不是必要的。

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

InnoDB
将为您创建一个隐藏的主键,如果您不提供主键

有时访问此密钥会更容易,因为

INSERT
...
ON DUPLICATE KEY UPDATE
可用于更新此表,无论它是否已具有值


是的,只要使用一个常量
1

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

我将提供一个魔鬼代言人的答案,因为大多数其他答案都是“不,你不需要。”


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

您可以随时使用ALTER TABLE添加新字段。在InnoDB中,它是一个自动增量列。总体思路是:不,您不需要一个,但要小心不要得到两个相同的记录。哈,这不是优化。虽然我很惊讶没有下意识的回答:“每个桌子都需要一个主键!”。