我已經有很多年的編程關係數據庫中,但現在所遇到的不尋常的和棘手的問題:動態數據庫/鍵 - 值/實體 - 核心價值Dillemma
我建立,需要有非常的應用快速和容易定義的實體(由用戶)。然後可以創建,更新,刪除這些實體的實例等。
我可以考慮兩個選項。
選項1 - 動態創建的表
第一個選項是寫一個引擎動態地生成的表,將數據插入到這些。然而,這會變得非常棘手,因爲每個查詢還需要是動態的,或者至少動態創建存儲過程等
選項2 - 實體 - 鍵 - 值模式
這是唯一的現實的選擇,我能想到的,在這裏我有5個表結構:
EntityTypes
EntityTypeID INT
EntityTypeName爲nvarchar(50)
實體
ENTITYID INT
EntityTypeID INT
域類型
FieldTypeID詮釋
FieldTypeName爲nvarchar(50),
SQLTYPE INT
FieldValues
ENTITYID INT
FIeldID INT
價值爲nvarchar(MAX)
字段
FieldID INT
字段名爲nvarchar(50)
FieldTypeID詮釋
的 「FieldValues」 表會工作有點像數據倉庫事實表,以及我所有的插入/更新將通過填充一個工作「鍵/值「表值參數並將其傳遞給SPROC(以避免多次插入/更新)。
所有的表都會被嚴重索引,我最終會做很多自連接來獲取數據。
我已經讀了很多關於密鑰/數值數據庫的壞處,但對於這個問題,它似乎仍然是最好的。
現在我的問題!
- 任何人都可以提出另一種方法或模式以外的這兩個選項嗎?
- 將選擇兩個用於中型數據集(100萬行最大)是可行的?
- 是選項2,我可以用有進一步的優化?
任何方向和建議非常感謝!
圍繞一齣戲後,我有蒙戈與蒙戈/ C#庫運行。對於這個特殊的例子,noRM庫有點過於強烈,因爲我將使用諸如db.getCollection(「Contacts」)之類的命令。 感謝pablochan指引我朝着正確的方向前進,並期待noSQL的新冒險! – 2011-12-23 14:05:25