在结表上声明主键是否必需?

时间:2017-11-16 06:40:03

标签: sql

在仅由外键组成的联结表中(例如下面示例中的output reg signed [4:0] y0=0; ),我们是否还必须将这些列声明为DDL create语句中的主键?如果是,那么这样做有什么意义呢?我认为这些不是下面例子中的主键

ShopSupplier

问题:我是否还应为CREATE TABLE Shop ( ShopID TEXT PRIMARY KEY UNIQUE, ShopName TEXT ); CREATE TABLE Supplier ( SupplierID TEXT PRIMARY KEY UNIQUE, SupplierName TEXT ); CREATE TABLE ShopSupplier ( ShopID TEXT, SupplierID TEXT, FOREIGN KEY(ShopID) REFERENCES Shop(ShopID), FOREIGN KEY(SupplierID) REFERENCES Supplier(SupplierID) ); 表声明PRIMARY KEY(ShopID, SupplierID)。如果是这样,为什么?我认为该表应该没有主键。

1 个答案:

答案 0 :(得分:1)

这两列都是外键,因为它们引用了其他表。如果只有ShopSupplier的特定行之间的单个连接可能会退出,您可以使用唯一约束或创建组合主键:

CREATE TABLE ShopSupplier(
  ShopID TEXT,
  SupplierID TEXT,
  PRIMARY KEY(ShopID, SupplierID),
  FOREIGN KEY(ShopID) REFERENCES Shop(ShopID),  
  FOREIGN KEY(SupplierID) REFERENCES Supplier(SupplierID));

然后,两列都是外键并属于主键。

通常,不需要将(纯)联结表的列设置为主键。您可以将其用作禁止重复的约束。