2012-02-03 32 views
2

我想建立一個系統,管理員可以使用該程序創建表單,並且用戶將數據輸入到這些表單。此外,管理員應該能夠輸入任何字段名稱到他們的表格,甚至可以選擇多項選擇題。 只有我能想出的答案是爲每個生成的表單類型,名稱,選擇等等創建一個巨大的文本塊,從數組或對象序列化它們。 我會將用戶的答案保存在另一個文本塊的序列化數組中,併爲每個數組在陣列中的位置進行分配。保持動態數據庫字段的最佳方式?

有沒有更好的方法來解決這個問題?

+0

我開始被這個愚蠢的標準Q&A格式的東西煩了。我很抱歉,但我需要這方面的信息,這個人至少有一些關於這方面的經驗,而且如果你可能只是稍微調低一點,那麼人們就會幫助我。沒有不必要的討論關於哪個更好,哪些更糟。此外,這可能是其中一位答覆者可能會說'不要用數據庫來做到這一點,這是一種更好的方式'。這對我也很重要。我認爲這個納粹喜歡回答關閉是S.O.的原因。將開始下降。不要像太陽那樣打破一個偉大的社區 – gkaykck 2012-02-28 01:42:55

回答

4

一個EAV data model可能適合你的目的在這裏。請注意,您將爲靈活性付出代價,例如缺乏參照完整性和長時間查詢以檢索數據(每個要返回的屬性需要另一個JOIN)。

0

你可以在數據庫中創建一個名爲「Fields」的表嗎?每個字段都有一個類型和文本。然後還有一個名爲options的表格,其中包含不同的選項文本字段以及指向「fields」表的fk。也可能有一個表格字段表有一個fk。在應用程序的代碼中,您可以查看一個字段並確定是否需要獲取選項。這是一種關係數據庫方法。像Mongo這樣的一些對象數據庫可以處理得更好。

總結:

表:表 柱:Form_ID PK

表:字段 柱:FIELD_ID PK 柱:文本 柱:類型 柱:Form_ID(FK)

表:選項 柱:Option_ID 列:文本 柱:FIELD_ID(FK)

2

有很多方法可以繼續。由於您正在使用關係數據庫,因此一種選擇是查看Entity-Attribute-Value model。實際上,這種方法將您的數據結構從預定義的模式(列)切換到行。這種靈活性有許多缺點,你最終會建立一堆視圖,以更傳統的表格形式呈現一些「旋轉」的數據。

一些關係型數據庫提供的NoSQL型的特點,所以你可能會發現這條道路的解決方案。例如,PostgreSQL的hstore類型允許您將一組鍵值對存儲在一個值中。我意識到你並沒有在你的問題中提到PostgreSQL,但只是你知道那裏有什麼,他們也在爲9.2的本地JSON數據類型和函數套件工作。結合功能索引,這可以提供一些有趣的關係/非SQL混合可能性,而不需要Redis或MongoDB之類的東西。

相關問題