sql - SQL 中是否需要 ID 列?

标签 sql primary-key

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

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

那么,如果SQL表中的每一行都是唯一的,它是否需要一个主键ID表,有没有一个 Ant 的性能变化?

谢谢!

编辑/附加信息:
让我问这个问题的具体示例是我用于多对多对多对多表的表(如果我们当时仍然称其为),它有 4 列(加上 ID)每一个都代表一个外部表的ID,每一行都是数字且唯一的。只允许其中一列为空。

我知道对于普通表,ID 主键列是一件非常好的事情。但是我对这个特定的表有一种感觉,它只会浪费空间并减慢添加新行的速度。

最佳答案

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

然而,在我 20 多年的数据库设计经验中,这几乎从来都不是真的。大多数看似独一无二的“自然”ID 最终并非如此。美国社会安全号码不能保证是唯一的,大多数其他“自然”键最终几乎都是唯一的——这对于数据库系统来说还不够好。

因此,如果您的数据中确实有一个合适的、唯一的键 - 使用它!但在大多数情况下,只有一个可以保证在所有行中都是唯一的代理 ID 会更容易、更方便。

关于sql - SQL 中是否需要 ID 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6488663/

相关文章:

mysql错误内连接

javascript - 如何避免在 postgres 数据库中插入空值

mysql - 外键的字段类型可以与引用的主键不同吗?

python - Django 复杂查询

mysql - 获取用户 ID w.r.t 到发件人的行数

mysql - SQL : Select all field without duplicate data

sql - 两列作为主键还是一列作为 PK + 索引?

mysql - 主键索引自动

primary-key - 在sybase中使用auto_increment主键创建表,截断表后主键不为零

MySQL:自动递增组合键