Mysql
一些使用者可以有固定數量的附加欄位,EAV 與否?
假設我必須儲存關於兩種不同類型的人員角色或職業的數據,即
Consumers
和Merchants
,並且這兩種類型的角色共享一個名為 的基表User
。在這方面,
Merchants
需要有一些額外的欄位,例如CompanyName
,CompanyDescription
。為這些規範設計數據庫的最有效方法是什麼?
- 在桌子上有額外的列
User
。MerchantData
有一個稱為外鍵的額外表UserId
。- 有一個
UserMeta
EAV 表,它允許任何數量的附加值。我目前傾向於選項 2,因為附加欄位是固定的。有沒有我沒有看到的缺點?
正如您已經提到的,由於消費者和商家作為使用者共享一些公共數據,因此它們應該位於單個基表中。
在一些精心計劃和控制的使用下, EAV實施可以成功。但我在您的問題中沒有看到任何暗示EAV解決方案是正確答案的內容。
事實上,隨著您在開發過程中進一步發展,您可能會發現不僅Merchants有一些附加屬性,而且Consumers也有。如果是這樣,您可能需要一個簡單的超類型-子類型模型。
這將為您提供 3 個相關的表,如下所示:
USERS (contains common information) | | ____________|_____________ | | | (details specific to | | a subtype) | Consumers Merchants
如果這對您有用,那麼大部分時間您只會訪問使用者表,但是當您需要有關消費者或商家的其他資訊時,您也希望獲得這些詳細資訊。
這是一種非常簡單的方法,可以避免不必要的數據重複。
對於 EAV 實現的觀點,您可以查看 Aaron Bertrand 的文章,其中解釋了優點和限制。
請注意,在這種情況下,快速變化的需求使 EAV 決策成為一個不錯的選擇。