Mysql
這是我的表的正確規範化嗎?
我想我讓自己感到困惑並使這變得太複雜了。在這一點上,我需要外界的建議。
我有一個 Laravel 7 應用程序,使用者將在其中輸入訂單。每個訂單都有一個客戶。每個訂單都有一個聯繫人。每個客戶有很多聯繫人,但聯繫人只屬於一個客戶。
當使用者輸入訂單並選擇客戶時,另一個選擇欄位會填充與該客戶關聯的聯繫人。
這是我的結構:
訂單表:id customer_id contact_id
客戶表:id 名稱
聯繫人表:id customer_id
這是好還是我需要改變結構?我無法在 Laravel 中建立關係。
我對 Laravel 7 不夠熟悉,無法理解它實現備用鍵/複合鍵的效果如何,但這基本上就是您所描述的:
筆記:
- 備用鍵至關重要,因為 Id 本身並不能提供關係模型所要求的唯一性。如果我可以向 Contact 發送一百萬次“客戶 1,Dwayne Johnson”垃圾郵件,則不存在密鑰並且存在規範化錯誤。
- 需要復合鍵 (CustomerId, ContactId) 以確保將 CustomerId 正確遷移到 Order
- IE 是反轉條目,或非唯一索引。這允許客戶快速搜尋訂單。
- ContactId 本身不是唯一的。如果您使用的 ORM 需要在所有內容上都有 Id 列,則需要使 Customer 和 Contact 之間的關係無法辨識。這樣做您將取消在不先加入聯繫方式的情況下檢索客戶訂單的功能。在任何情況下,您都不應在客戶和訂單之間創建關係,因為選擇的聯繫人必須屬於相關客戶,這會引入規範化錯誤。
根據評論修改模型: