關係數據中的支付表
我必須為付款建模一個數據庫表。這些需要有兩個欄位 payment from 和 payment to ,這需要連結到兩個表,一個是 clientA 和 clientB,如下圖所示。
我應該如何在圖中表示 payer_from_id 和 payer_to_id 可以加入 clientA 或 clinetB?
clientA 和 clientB 必須在兩個單獨的表中。
Yo 不能在一個外鍵中引用兩個不同的表,所以場景中的關係不會在數據庫中定義。要使其完全正常工作,您需要添加
$$ payer_from_table $$和$$ payer_to_table $$欄位確實區分了兩者。如果客戶端 #101 在客戶端 A 中是“Moe’s Tavern”,但在客戶端 B 中是“Bob’s Burgers”,則除非您也指定源表,否則無法區分它們。 另一種可能的解決方案是添加 GUID
$$ guid_id $$兩個表的欄位,它應該為每條記錄創建一個唯一標識符,而不管表如何,假設表在同一個數據庫中。您仍然不能同時為兩個表定義外鍵,但您可以索引$$ guid_id $$每個表中的欄位以保持其性能。除非您自己編寫程式碼,否則您不會有級聯刪除之類的東西。 第三種適用於任一方案的選項是創建第三個表,該表使用兩個客戶端表中的數據定期更新。您仍然需要一個表標識符或一個 GUID,以便它們可以共存。然後可以針對組合表定義您的外鍵,在第一種情況下使用複雜鍵,在第二種情況下使用 GUID。
不可能有多個表 FOREING KEY 引用。
我可以向您推薦的最好方法是創建一個繼承模型:為此,您將添加一個通用的 CLIENT 表並在 clientA、B、C、D… 或您可能需要的任何不同表上進行 1 對 1 的引用。 …
但是,您必須確保 clientA 和 B 上沒有重複的 ID。也許在 Client 表上使用一個名為:ClientCategory 的欄位,然後在 INSERT 之前有一個觸發器來檢查類別並將 ID 複製到正確的表中。
該模型應如下所示: