2

我已经创建了具有 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)
);

谁能解决?或者至少给我一个替代方案?

4

1 回答 1

0

您的数据结构不太合理。如果你有地址,你怎么知道主人是谁?供应商还是客户?解决此问题的一种方法是:

OwnerOrCustomer char(1) not null,  /* has values O or C */
OwnerId int,
CustomerId int,

也就是说,将值存储在单独的字段中。

解决这个问题的更复杂的方法是有一个新的概念,称为“实体”或“组织”或类似的东西。这将为供应商和客户(以及,谁知道,合作伙伴和潜在客户以及竞争对手)提供一个 ID。对于id供应商和客户来说,他们之间确实是EntityId不同的。

我应该补充一点,这样的数据结构相当罕见。在大多数公司中,客户数据库与供应商数据库相当独立,并且没有单一的统一地址表。您可能会考虑这是另一种选择,尤其是在供应商往往是公司而客户往往是个人的情况下。组织地址与个人地址具有不同的特征。

于 2013-05-26T13:41:41.383 回答