当我不需要主键时,是否可以不使用主键

时间:2009-11-20 15:30:02

标签: sql database-design primary-key normalization

如果我不需要主键,我应该不在数据库中添加一个主键吗?

12 个答案:

答案 0 :(得分:40)

您确实需要主键。你还不知道。

答案 1 :(得分:13)

主键唯一标识表中的行。

它被索引和/或聚集的事实是一个物理实现问题,与逻辑设计无关。

你需要一张桌子才有意义。

答案 2 :(得分:3)

如果您不需要主键,请不要使用主键。我通常需要主键,所以我经常使用它们。如果您有相关的表,您可能需要主键和外键。

答案 3 :(得分:2)

是的,但只是在相同的意义上,如果您不打算发生意外,可以不使用安全带。也就是说,当你需要它时,为一个巨大的利益支付是一个很小的代价,即使你认为你不需要它,你将来的可能性很大。区别在于你很多更有可能需要主键,而不是发生车祸。

您还应该知道,如果您不这样做,某些数据库系统会为您创建主键,因此您无法根据引擎中的内容节省那么多。

答案 4 :(得分:2)

不,除非你能找到一个例子,“如果table_x没有主键,那么这个数据库会好得多。”

如果不需要性能,数据完整性和规范化,您可以争论永不使用主键。可能不需要安全和备份/恢复功能,但最终,你穿上你的大男孩裤子并加入数据库实现的真实世界。

答案 5 :(得分:1)

是的,表格应始终具有主键...除非您不需要唯一标识其中的记录。 (我喜欢做出绝对的陈述并立即与之相矛盾)

您何时不需要唯一标识表中的记录?几乎从不。对于像审计日志表这样的事情,我之前已经这样做了。不会更新或删除的数据,也不会受到任何限制。基本结构化的日志记录。

答案 6 :(得分:0)

这在很大程度上取决于你不确定自己的需要。如果您有任何疑问,请添加一个 - 稍后您会感谢自己。一个指标,表明您存储的数据是否可以在一个点上与数据库中的其他数据相关联。

我能想到的一个用例是一个日志记录类型的表,在其中你只需要一个接一个地转储一个条目(以便以后正确处理它们)。如果您要存储足够的数据来过滤相关消息(如日期),那么您可能不需要主键。当然,为此使用RDBMS是值得怀疑的。

答案 7 :(得分:0)

我不知道。我使用了几个表,其中只有一行和一列。将始终只是一行和一列。没有外键关系。

为什么我会在上面放一个主键?

答案 8 :(得分:0)

主键主要是正式定义以帮助引用完整性,但是如果表非常小,或者不太可能包含唯一数据,则它是不必要的开销。 在表上定义索引通常可用于暗示主键而不正式声明主键。 但是,您应该考虑定义主键对于开发人员和模式生成或SQL Dev工具非常有用,因为元数据有助于理解,并且某些工具依赖于此来正确定义模型中的主/外键关系。 / p>

答案 9 :(得分:0)

你应该总是有一个主键,即使它只是在ID上。也许NoSQL就是你所追求的(只是问)?

答案 10 :(得分:0)

嗯...

关系数据库中的每个表都需要一个主键。如前所述,主键是唯一标识记录的数据......

如果你有一个连接2个不同表的N-M表,你可能没有“ID”字段,但是你可以通过你加入的两列中的值唯一地识别记录。 (复合主键)

拥有没有主键的表是违反第一个普通表单的,并且在关系数据库中无关

答案 11 :(得分:0)

主键始终有助于查询性能。因此,如果您需要使用“密钥”查询“外键”,或者用作查找,那么是,请使用外键。