2012-07-19 37 views
1

我正致力於一個專注於特定利基的社交網站,並且我有關於存儲用戶配置文件信息的問題。雖然我希望用戶能夠存儲諸如性別,職業,喜歡,不喜歡等信息,但我也希望以這種方式來完成這項工作,如果我想在將來添加更多配置文件字段,我可以做如此輕鬆甚至可能通過管理界面。以可擴展和可擴展的方式存儲用戶配置文件字段和信息

這裏是數據庫架構到目前爲止,我已經構建:

用戶

  • ID(PK)
  • 電子郵件
  • 密碼(等)

簡介字段 (這將存儲領域,如「性別」,「職業」,以及什麼類型的輸入期待:文本,列表,複選框,單選按鈕等)

  • ID(PK)
  • FIELD_LABEL
  • is_optional
  • VALUE_TYPE(枚舉:文本,文本區域,列表,下拉菜單,複選框,單選)
  • is_multiple_allowed(僅適用於列表,真的)

個ProfileFields_Presets(這將存儲用於任何給定的ProfileFields條目預設可選值,對於其中存在將條目僅當 VALUE_TYPE是列表,下拉列表,複選框,或無線電)

  • ID(PK)
  • GUID(針對HTML元素ID等)
  • profile_field_id(FK:ProfileFields)
  • SORT_ORDER
  • field_preset(例如「男」, 「女」 性別)

User_ProfileFields(這將存儲關於各種ProfileFields條目用戶輸入)

  • USER_ID(PK,FK:用戶)
  • profile_field_id(PK ,FK:ProfileFields)
  • user_value(不管用戶輸入;這將是一個FK:ProfileFields_Values或文本的用戶鍵入)

資料領域,如「性別」 —其具有使得用戶可以選擇—將實施ProfileFields_Values數據庫(存儲的預置值)的預置值,而字段,諸如「職業」 —其通常開放式—不會。

基本上,我只是想知道這是否足夠。這樣做會不會出現任何問題?

另外,在上面的Users_ProfileFields表中哪個更有效?只有一個* user_value *字段可存儲外鍵ID或自定義輸入?或者將它們分成* user_value_id *和* user_value_text *,其中兩個中的一個總是空的,另一個填充數據?

+1

瞭解有關EAV表的限制和性能影響以及執行報告查詢和其他複雜SQL的難點。您應該儘可能使用正確的關係表,因爲您可以設計正面。當真正需要靈活性時,EAV應該很少被使用。不要在關係數據庫中關閉EAV路由,如果必須使用它,請考慮使用nosql數據庫。 – HLGEM 2012-07-19 22:07:51

+0

嗯...這是什麼...而不是一個ProfileFields_Presets表,我在ProfileFields表中的字段中包含逗號分隔的預設列表?這會是一個更好的方式去做這件事嗎? – TerranRich 2012-07-19 22:21:36

+2

不,逗號分隔的列表更糟糕 – HLGEM 2012-07-19 22:28:14

回答

1

我會保持原樣。我會分開user_value_id然後user_value_text。以User_value_id爲關鍵

相關問題