一尘不染

SQL中是否需要ID列?

sql

传统上,我总是在SQL中使用ID列(主要是mysql和postgresql)。

但是,我想知道是否真的有必要使每一行中的其余列都具有唯一性。在我的最新项目中,我将“
ID”列设置为主键,但是我从不调用它或以任何方式使用它,因为行中的数据使其具有唯一性,对我来说更有用。

因此,如果SQL表中的每一行都是唯一的,它是否需要一个主键ID表,并且无论有无,蚂蚁性能都会发生变化吗?

谢谢!

编辑/其他信息:让我问这个问题的特定示例是我正在使用的表,用于多对多对多对多表(如果那时仍称其为),它有4个列(加上ID),每列代表一个外部表的ID,并且每一行将始终是数字且唯一的。只允许其中一列为空。

我知道对于普通表来说,ID主键列是一件非常好的事情。但是我对这种特殊的表感觉很浪费空间,并且减慢了添加新行的速度。


阅读 293

收藏
2021-03-17

共1个答案

一尘不染

如果您确实在数据集中确实存在一些可以唯一标识您的行的预先存在的列-则不需要,就不需要额外的ID列。但是,主键 必须是 唯一的(在 所有
情况下),并且不能为空(必须为NOT NULL)。

但是,在我20多年的数据库设计经验中,几乎从来没有这样的情况。看起来唯一的大多数“自然” ID并非如此-
最终。不能保证美国社会保险号是唯一的,大多数其他“自然”键最终几乎都是唯一的-这对于数据库系统来说还不够好。

因此,如果您确实已经在数据中拥有适当的唯一键,请使用它!但是在大多数情况下,只有一个代理ID便可以更轻松,更方便,您可以保证该代理ID在所有行中都是唯一的。

2021-03-17