database-design - 为什么使用多列作为主键(复合主键)

标签 database-design relational-database primary-key ddl database-table

本例取from w3schools

CREATE TABLE Persons
(
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)

我的理解是,两列(P_IdLastName)一起代表表 Persons 的主键。这是正确的吗?

  • 为什么有人想要使用多列而不是单列作为主键?
  • 给定表中可以有多少列一起用作主键?

最佳答案

你的理解是正确的。

在很多情况下你都会这样做。一个示例是 OrderHeaderOrderDetail 之类的关系。 OrderHeader 中的 PK 可能是 OrderNumberOrderDetail 中的 PK 可能是 OrderNumber AND LineNumber。如果是这两者中的任何一个,它都不会是唯一的,但两者的组合保证是唯一的。

另一种方法是使用生成的(非智能)主键,例如本例中的OrderDetailId。但这样你就不会总是那么容易地看到这种关系。有些人喜欢一种方式;有些人喜欢一种方式。有些人更喜欢另一种方式。

关于database-design - 为什么使用多列作为主键(复合主键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2626158/

相关文章:

php - 数据库表设计困境,复选框一大堆?

有很多行的数据库表 - 正确使用

mysql - 我需要一些可以在一列中保留多个值的设计

fluent-nhibernate - 流利的NHibernate主键约束命名约定

mysql - MySQL自动增量问题

mysql - 将子子项中的外键添加到 "super parent"- 是否有更好的方法如 View ?

database-design - 多表或多模式

c# - 可感知时间/更新的集合的枚举器

mysql - 动态内容类型:一个表包含许多列,或者每个表包含一个表?

mongodb - 可以使用 MongoDB 制作关系数据库吗?