gpt4 book ai didi

mysql - 一对多关系

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

首先,我们有以下场景(不完全像这样,但出于保密原因,我不会冒险明确描述该项目),假设一个人可以拥有许多家庭地址,并且显然一个地址属于最多一个人。这几乎是一种一对多的关系,其中有 2 个表(人员和地址),第二个表保存引用所有者的 FK。但遗憾的是我被告知我的系统还应该允许用户首先输入地址,因此人员表中尚不存在 FK。我得出的结论是我必须放弃这个限制。你认为这是一件常见的事情吗?此外,我认为即使没有FK(明确声明)也要保持一致性,如果有人更新人员ID,因为我不希望用户在两个表中都这样做,是否可以创建一个触发器(我正在使用Mysql服务器)会自动更新第二个表(如果该人有地址)?如果是,请提供有关如何编写该内容的任何提示(我不熟悉触发器)

最佳答案

您可以通过创建通常与 M:N 关系关联的中间表,但在地址引用字段上添加唯一性约束来维护 1:N 关系;或者,您可以将地址对人员的引用设为可为空,使其成为可选引用。

<小时/>

[编辑]

来自 MySQL 转储的脚本用以下内容包装其内容:

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS;
SET FOREIGN_KEY_CHECKS=0;
....
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

正如您可能猜到的那样,它会暂时关闭外键检查以允许乱序插入相互依赖的数据。但是,您应该确保导入数据的可信度,因为我相信它在重新打开时不会重新检查数据(因此它可以允许违反 FK 约束的数据持续存在)。

如果您需要能够在用户输入的数据的“人员”之前添加“地址”,那么您又回到了需要可选键或另一个表的原始情况;或者只是不实际保存“地址”信息(而是将其本地保存在数据输入程序中),直到“人员”信息足够/完整。

关于mysql - 一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37737893/

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