sql - 复合主键的最佳实践是什么?
问题描述
我有一个表,其中我将两列作为复合主键。现在我有一个困惑。
假设我有一个如下表:
ColA ColB
X NULL
X NULL
“X NULL”和“X NULL”这两个行都是 PRIMARY KEY 的组合。
那么,这种插入可能吗?因为 NULL 值不同,因此这两行都应该代表新的数据组合。
请说清楚。
解决方案
主键具有三个属性:
- 键(组合)唯一标识每一行。
- 没有组件的键可以
NULL
。 - 一张表只有一个主键。
因此,根据此定义,您不能将两列声明为主键。
一般来说,我不提倡复合主键。我建议对表使用自动递增的主键(语法因数据库而异)。
数字标识符的一个很好的特性是它捕获表中值的插入顺序。此外,许多数据库通过主键对数据进行聚类,导致insert
s 和update
s 上出现碎片。
推荐阅读
- c# - .NET Core Worker 服务宿主作为 Windows 服务(使用 Coravel 进行任务调度)
- r - 如何将行附加到公式摘要的输出?
- android - Flutter Doctor 无法识别我的 ANDROID_SDK 环境变量
- android - EditText 允许在以编程方式更改 inputType 后进行任何操作
- docker - 检查 docker 连接以获取用户和密码
- vb.net - 如何制作复合用户控件 VB.NET
- python - 我如何确定一个列表中的项目是否大于另一个列表中的项目?
- javascript - 隐藏溢出的css绝对位置动画
- sed - sed 查找字符串,打印所有内容,直到下一个模式
- javascript - JSON.parse().replace() 提供与 str.replace() 不同的结果