gpt4 book ai didi

mysql - 一个外键引用不同表的两个主键?

转载 作者:行者123 更新时间:2023-11-29 03:39:13 25 4
gpt4 key购买 nike

我创建的数据库的表地址具有 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,它们之间是不同的。

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

关于mysql - 一个外键引用不同表的两个主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16759693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com