本例取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_Id
和 LastName
)一起代表表 Persons
的主键。这是正确的吗?
- 为什么有人想要使用多列而不是单列作为主键?
- 给定表中可以有多少列一起用作主键?
最佳答案
你的理解是正确的。
在很多情况下你都会这样做。一个示例是 OrderHeader
和 OrderDetail
之类的关系。 OrderHeader
中的 PK 可能是 OrderNumber
。 OrderDetail
中的 PK 可能是 OrderNumber
AND LineNumber
。如果是这两者中的任何一个,它都不会是唯一的,但两者的组合保证是唯一的。
另一种方法是使用生成的(非智能)主键,例如本例中的OrderDetailId
。但这样你就不会总是那么容易地看到这种关系。有些人喜欢一种方式;有些人喜欢一种方式。有些人更喜欢另一种方式。
关于database-design - 为什么使用多列作为主键(复合主键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2626158/