在仅由外键组成的联结表中(例如下面示例中的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)
。如果是这样,为什么?我认为该表应该没有主键。
答案 0 :(得分:1)
这两列都是外键,因为它们引用了其他表。如果只有Shop
和Supplier
的特定行之间的单个连接可能会退出,您可以使用唯一约束或创建组合主键:
CREATE TABLE ShopSupplier(
ShopID TEXT,
SupplierID TEXT,
PRIMARY KEY(ShopID, SupplierID),
FOREIGN KEY(ShopID) REFERENCES Shop(ShopID),
FOREIGN KEY(SupplierID) REFERENCES Supplier(SupplierID));
然后,两列都是外键并属于主键。
通常,不需要将(纯)联结表的列设置为主键。您可以将其用作禁止重复的约束。