一对多关系

时间:2016-06-09 23:44:17

标签: mysql sql triggers

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

1 个答案:

答案 0 :(得分:1)

您可以通过创建通常与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约束的数据持续存在)。

如果您需要添加"地址"之前"人"用户输入的数据,然后你回到需要可选键或另一个表的原始情况;或者只是没有真正保存"地址" info(但在数据输入程序中将其保存在本地)直到" person"信息足够/完整。