Mysql

這是我的表的正確規範化嗎?

  • July 16, 2020

我想我讓自己感到困惑並使這變得太複雜了。在這一點上,我需要外界的建議。

我有一個 Laravel 7 應用程序,使用者將在其中輸入訂單。每個訂單都有一個客戶。每個訂單都有一個聯繫人。每個客戶有很多聯繫人,但聯繫人只屬於一個客戶。

當使用者輸入訂單並選擇客戶時,另一個選擇欄位會填充與該客戶關聯的聯繫人。

這是我的結構:

訂單表:id customer_id contact_id

客戶表:id 名稱

聯繫人表:id customer_id

這是好還是我需要改變結構?我無法在 Laravel 中建立關係。

我對 Laravel 7 不夠熟悉,無法理解它實現備用鍵/複合鍵的效果如何,但這基本上就是您所描述的: 在此處輸入圖像描述

筆記:

  1. 備用鍵至關重要,因為 Id 本身並不能提供關係模型所要求的唯一性。如果我可以向 Contact 發送一百萬次“客戶 1,Dwayne Johnson”垃圾郵件,則不存在密鑰並且存在規範化錯誤。
  2. 需要復合鍵 (CustomerId, ContactId) 以確保將 CustomerId 正確遷移到 Order
  3. IE 是反轉條目,或非唯一索引。這允許客戶快速搜尋訂單。
  4. ContactId 本身不是唯一的。如果您使用的 ORM 需要在所有內容上都有 Id 列,則需要使 Customer 和 Contact 之間的關係無法辨識。這樣做您將取消在不先加入聯繫方式的情況下檢索客戶訂單的功能。在任何情況下,您都不應在客戶和訂單之間創建關係,因為選擇的聯繫人必須屬於相關客戶,這會引入規範化錯誤。

根據評論修改模型:

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/271076