簡體   English   中英

一對多關系

[英]One to many relationship

首先,我們有以下情況(並非完全類似,但出於機密原因,我不會冒險明確描述該項目),假設一個人可以有很多家庭住址,而一個地址最多只能屬於一個人。 這幾乎是一對多的關系,其中有2個表(“人”和“地址”),第二個表包含一個引用所有者的FK。 但是可悲的是,我被告知我的系統還應該允許用戶首先輸入地址,因此Person表中尚不存在FK。 我得出的結論是,我只需要取消該約束即可。 你覺得這很平常嗎? 此外,我認為即使沒有FK(顯式聲明),也可以保持一致性,如果有人更新了Person 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約束的數據得以保留)。

如果需要使用用戶輸入的數據在“人員”之前添加“地址”的能力,那么您就回到了需要可選鍵或另一個表的原始情況; 或者只是在“人”信息足夠/完整之后才實際保存“地址”信息(而是將其保存在數據輸入程序中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM