一个外键引用了不同表的两个主键?
我创建了数据库的表地址拥有owner_id引用到不同的表的两个主键,但给出错误错误“无法更新子行:外部ke约束失败”
这是我的桌子的结构
CREATE TABLE Address
(
OwnerID VARCHAR(5) NOT NULL,
Line1 VARCHAR(40),
City VARCHAR(40),
Postcode VARCHAR(4),
AddressType INT,
PRIMARY KEY (OwnerID, AddressType),
FOREIGN KEY (AddressType) REFERENCES AddressType(AddressType),
FOREIGN KEY (OwnerID) REFERENCES Supplier(SupplierID),
FOREIGN KEY (OwnerID) REFERENCES Customer(CustomerID)
);
谁能解决? 或至少给我一个替代?
你的数据结构不太合理。 如果你有地址,你怎么知道业主是什么? 供应商还是客户? 解决这个问题的一个方法是:
OwnerOrCustomer char(1) not null, /* has values O or C */
OwnerId int,
CustomerId int,
也就是说,将值存储在单独的字段中。
解决这个问题的更复杂的方法是拥有一个叫做“实体”或“组织”或类似的新概念。 这将为供应商和客户(以及知道的合作伙伴和潜在客户以及竞争对手)提供一个ID。 客户的供应商id
实际上是一个EntityId
,在它们之间是不同的。
我应该补充说,这样的数据结构相当罕见。 在大多数公司中,客户数据库与供应商数据库相当分离,并且没有单一的综合地址表。 你可能会认为这是另一种选择,特别是如果供应商倾向于是公司,而顾客往往是个人。 组织的地址与个人地址具有不同的特征。
链接地址: http://www.djcxy.com/p/65885.html上一篇: One foreign key referenced to two primary keys of different tables?