Mysql

一些使用者可以有固定數量的附加欄位,EAV 與否?

  • January 20, 2018

假設我必須儲存關於兩種不同類型的人員角色職業的數據,即ConsumersMerchants,並且這兩種類型的角色共享一個名為 的基表User

在這方面,Merchants需要有一些額外的欄位,例如CompanyName, CompanyDescription

為這些規範設計數據庫的最有效方法是什麼?

  1. 在桌子上有額外的列User
  2. MerchantData有一個稱為外鍵的額外表UserId
  3. 有一個UserMetaEAV 表,它允許任何數量的附加值。

我目前傾向於選項 2,因為附加欄位是固定的。有沒有我沒有看到的缺點?

正如您已經提到的,由於消費者商家作為使用者共享一些公共數據,因此它們應該位於單個基表中。

在一些精心計劃和控制的使用下, EAV實施可以成功。但我在您的問題中沒有看到任何暗示EAV解決方案是正確答案的內容。

事實上,隨著您在開發過程中進一步發展,您可能會發現不僅Merchants有一些附加屬性,而且Consumers也有。如果是這樣,您可能需要一個簡單的超類型-子類型模型。

這將為您提供 3 個相關的表,如下所示:

               USERS (contains common information)
                 |
                 |
     ____________|_____________
     |                        |
     | (details specific to   | 
     |       a subtype)       |
Consumers                Merchants    

如果這對您有用,那麼大部分時間您只會訪問使用者表,但是當您需要有關消費者商家的其他資訊時,您也希望獲得這些詳細資訊。

這是一種非常簡單的方法,可以避免不必要的數據重複。

對於 EAV 實現的觀點,您可以查看 Aaron Bertrand 的文章,其中解釋了優點和限制。

請注意,在這種情況下,快速變化的需求使 EAV 決策成為一個不錯的選擇。

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