在我的工作(利用我的一些编程技能的非编程工作)中,我被要求从我们外包的定制程序的 SQL 数据库中生成一份报告。
在查看表格时,我发现其中许多都有多个字段分配为 PK,这是为什么呢?与串行数字 ID 相比,这有什么优势?
在我的工作(利用我的一些编程技能的非编程工作)中,我被要求从我们外包的定制程序的 SQL 数据库中生成一份报告。
在查看表格时,我发现其中许多都有多个字段分配为 PK,这是为什么呢?与串行数字 ID 相比,这有什么优势?
数据的完整性。键是指防止重复数据进入数据库的唯一性约束。键有助于确保数据库中的事实可以正确地识别为它们应该描述的真实世界对象或概念。实际上,并非所有内容都可以或应该由单个列中的单个属性标识。
注意:具有多个属性的键不是多个键。它仍然只是一个键(称为复合键)。
它被称为复合键。如果order_no
是表中的主键,Order
并且表Order_Item
中的订单中分配给每个订单项目的唯一序列号,即所有订单都有以序列号 1 开头的项目,那么 Order_Item 的主键将是order_no, item_sequence_no
。
将此与生成的主键进行对比Order_Item
:您仍然需要对order_no, item_sequence_no
. 如果您考虑查询,您可能会发现更多依赖于复合键。
业务相关密钥和系统生成密钥在技术上分别称为域密钥和代理密钥。c2 wiki对此进行了很好的讨论。
有时,表中的多个值将形成一个自然主键,而不是代理、自动生成的主键。
这样做的一些优点是,如果这些多个值唯一标识一条记录,那么 PK 会强制执行唯一性,并且在 MS SQL Server 中,默认情况下,PK 也将是表上的聚集索引。
这取决于用作 PK 的表和列。
如果问题表是用于多对多关联的连接表,那么您可以使用来自外键列的复合主键(因为它们的组合在连接表中是唯一的)并且不会有额外的合成主键需要。
其他示例是自然键,当现有列值的某些组合可用于唯一引用表中的一行时(例如,人的名字和姓氏)。它们用得不多,因为大多数这样的候选自然键都没有所需的属性(也就是说,它们不是唯一的或不可变的)。