2010-11-11 112 views
5

我正在試圖找到一個教程,該教程將指導我瞭解基於用戶的自定義字段的工作原理。就像在調查網站上一樣,他們讓用戶創建自定義字段並存儲它們,更重要的是存儲通過這些字段輸入的數據。如何在數據庫中存儲自定義用戶字段

我正在尋找描述如何在數據庫上完成的操作。我遇到了一些麻煩,找到一種方法,一旦用戶將其提取到excel/cvs文件,就不會永久檢索這些數據。

回答

3

Entity-Attribute-Value model通常用於在關係數據庫中處理這種情況。對「EAV模型」的快速搜索會產生比您知道該怎麼處理更多的信息。

+0

'快速搜索「EAV模型」'將有望包含應該避免的建議,除非沒有其他選擇 - 它非常靈活,但不能很好地擴展並且難以查詢。以下是一個案例研究的鏈接:http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/ – 2010-11-11 13:09:07

3

第六範式是實現這一點的正式方式。用3NF表示所有表格,用6NF表示一個或兩個表格,您需要在沒有DDL更改的情況下添加列表。謹慎使用。

EAV是6NF的混蛋之子。那意味着什麼,做這件事的人寫下來,對6NF沒有正式的理解,經常會造成怪誕。

當然,你必須保留好的標準:使用數據類型;聲明性參照完整性(外鍵);不要讓這些獲得任何東西。任何人告訴你必須放棄他們,就好像逃跑一樣。

6NF/EAV速度非常快,使用服務器的設置處理能力沒有障礙。再一次,從任何告訴你必須使用逐行處理或遊標的人,或者不能輕鬆地從行中構建列的人,都要遠離任何人。如果您有特定問題,請再次發帖。

這需要超出SQL的當前能力(控件,DDL);爲了以受控的方式做到這一點,並避免創建不可維護的怪物,您需要一個小目錄來包含元數據。如果你很聰明,你可以使用它生成查詢所需的SQL,從而消除大量的其他手工勞動。

周圍有很多錯誤信息,有些「rep」的人很無知。爲了在技術上取得成功,我們需要準確的信息,而不是神話和恐懼。您可能對最近發佈的帖子感興趣,我嘗試了set the recond straight

0

我們使用3個表格來支持用戶定義的字段。 因此,舉例來說,如果要將此應用到您的調查表,您可以創建:每個自定義屬性

SURVEY_ATTRIBUTE 
- SurveyAttributeId 
- SurveyAttributeName 
- SurveyAttributeType 

SURVEY_ATTRIBUTE_CHOICE 
- SurveyAttributeChoiceId 
- SurveyAttributeChoice 
- SurveyAttributeId 

SURVEY_ATTRIBUTE_VALUE 
- SurveyAttributeValueId 
- SurveyId 
- SurveyAttributeValue 

的SURVEY_ATTRIBUTE表存儲一個記錄。 SURVEY_ATTRIBUTE_VALUE表存儲實際分配給調查的屬性。所以如果一個屬性不適用於servey,則不存儲任何內容。 SURVEY_ATTRIBUTE_CHOICE表存儲'LIST'類型屬性的所有允許選項。

SURVEY_ATTRIBUTE表中的SurveyAttributeType字段用於描述屬性的類型。我們只使用少量的允許類型,如CHAR,DATE,NUMBER,LIST。根據該值,我們的應用程序知道如何處理存儲在SurveyAttributeValue字段中的值。你當然可以將其進一步形式化,以允許更廣泛的範圍,指定最大的場長等等,這一切都取決於你希望給你的最終用戶的自由水平。我們儘可能保持簡單,因爲我們的目標受衆不是數據庫管理員,而是最終用戶,他們通常不關心字段長度等。

您也可以選擇跳過SURVEY_ATTRIBUTE_CHOICE表並將您的允許值存儲在SURVEY_ATTRIBUTE字段中的XML字符串中。這將取決於您要在應用程序中實施的方式。

相關問題