sql - 为什么 SQL Server 中需要主键,如果不可为空的唯一键可以达到目的
问题描述
如果可以使用不可为空的唯一键来实现唯一标识行的目的,专家能否帮助我理解为什么我们需要 sql 表中的主键。
解决方案
本身不需要主键。但它在概念上的作用与唯一索引不同。
主键标识一行。唯一索引只是确保没有重复。SQL 引擎可以根据这些信息优化查询。此外,默认情况下,许多 RDMS 将基于主键创建聚集索引。
您只能有一个主键,并且列不能为空。您可以有多个唯一索引,并且它们可以包含可为空的列。
如果你想要(虽然那将是一个糟糕的设计,所以你不应该)你可以有一个没有主键的表,它有一个唯一的索引。
这是逻辑数据库建模和物理数据库设计/实现之间的一种脱节——从逻辑上讲,实体(表)应该有一个唯一标识每个实例(行)的主键。实际上,您可以自由地使用您的数据库系统做您想做的事情。
推荐阅读
- python-3.x - 与权重梯度相比,线性回归中的偏差梯度仍然很小,并且没有正确学习截距
- r - 当我知道一个 R 对象的类时,我可以直接调用相应的方法吗?
- python-3.x - 需要从列中获取特定数据并使用 Python 和 Pandas 将它们转置到行
- typescript - 使用打字稿在“字符串”参数上出错
- postgresql - 我可以使用 AWS Cloudformation 模板在 AWS Aurora(Postgres 风格)中创建和修改表吗?
- javascript - Apexcharts Vue.js 更新系列不显示索引0
- linkedin - 扩展“使用 LinkedIn 登录”插件的数据访问权限
- delphi - Delphi 自定义 TImage 组件 - 组件中的 MouseEnter、MouseLeave
- laravel-backpack - 如何使用用户的时区作为默认值创建隐藏输入
- python - Pytorch Conv1D 为 ConvTranspose1d 提供不同的大小