我正在創建一個允許用戶創建輸入模式的數據輸入應用程序。動態數據輸入值存儲
我的第一個版本只是爲每個條目模式創建了一個表,每個條目跨越單個或多個列(對於複雜類型)具有適當的數據類型。這允許「快速」查詢(對於小數據集,因爲我沒有對所有列進行索引)以及簡單同步,其中數據條目分佈在多個數據庫上。
雖然我對此解決方案並不滿意,唯一有利的就是簡單... 我只能存儲固定數量的列。我需要在所有列上創建索引。我需要在模式更改上重新創建表。
我的一些關鍵設計審覈規定是:
- 非常快速的查詢(使用簡單的領域特定的查詢語言)
- 寫操作並不一定要快
- 許多併發用戶
- 模式將經常變化
- 模式可能包含數千列
- 數據條目可能分佈且ne編輯syncronization。
- 優先考慮的MySQL和SQLite-- DB2和Oracle等數據庫不存在問題。
- 使用.NET /單聲道
我一直在思考了幾個可能的設計,但他們都不似乎是一個不錯的選擇。
解決方案1:聯合表,包含Type列和每個類型一個可爲空的列。
這可以避免連接,但會明確地使用很多空間。
解決方案2:鍵/值存儲。所有值都以字符串形式存儲並在需要時進行轉換。
也使用了很多空間,當然,我討厭不得不將所有東西都轉換爲字符串。
解決方案3:使用xml數據庫或將值存儲爲xml。
沒有任何經驗,我會覺得這很慢(至少對於關係模型,除非有一些非常好的xpath支持)。 我也想避免一個xml數據庫,因爲應用程序的其他部分更適合作爲關係模型,並且能夠加入數據很有幫助。
我不禁認爲有人已經解決了(一些),但我無法找到任何東西。不知道要搜索什麼...
我知道市場調研公司正在爲他們的調查問卷做這樣的事情,但是很少有開放源代碼實施,而我發現的實際上並不完全符合法案。
PSPP有很多我想到的邏輯;原始列類型,許多列,許多行,快速查詢和合並。太糟糕了,它不適用於數據庫..當然...我不需要99%的提供的功能,但很多東西沒有包括在內。
我不確定這是否是正確的地方去問這樣一個設計相關的問題,但我希望這裏有人有一些提示,知道任何現有的工作,或者可以指點我一個更好的地方來問這樣一個問題。
提前致謝!
http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/ 靈活性成本太高,無法正常工作。您需要的大多數數據可以在沒有靈活性功能的情況下進行定義。只能非常謹慎地使用Key/Value存儲,不要將其作爲設計的基礎。沒有人願意像他們所說的那樣靈活性,如果它干擾性能和數據完整性(而且會),那麼他們就不需要它。如果它使用戶界面更難使用(它會),那麼他們討厭使用該應用程序。 每個客戶實際上可能只有3或4件他們需要定製的東西。 – HLGEM 2010-06-25 21:06:05