我在這個問題上與同事有點不同意。首先,環境(有保證的,不會改變):存儲元數據庫
- SQL Server 2008 R2的
- ASP.NET MVC 3
- C#
而現在,這種情況下:我在一個應用程序上工作,這將使用戶能夠收集用戶的輸入並將其存儲起來用於以後的報告。收集輸入的方法是可以放在頁面上的各種控件。收集數據不是問題;存儲它。
數據庫中的數據庫
我按照它應該被存儲爲鍵值對的集合概念(在這個例子中,一臺名爲ResponseItems
):
+----------+----------+----+-----+
|ResponseId|FormItemId|Name|Value|
+----------+----------+----+-----+
在哪裏ResponseId
和FormItemId
構成主鍵,ResponseId
與Response
表有關,因此:
+----------+------+------+-------------+
|ResponseId|FormId|UserId|SubmittedDate|
+----------+------+------+-------------+
和與一個FormItem
表FormItemId
:
+----------+------+----+-----------------+
|FormItemId|FormId|Type|InstantiationData|
+----------+------+----+-----------------+
哪裏FormId
是一樣的,在Response
表FormId
,引用Form
表,這是不一樣重要說明。
XML序列化
我回來的應答序列化窗體組件和響應的XML更有意義,這樣,它需要在表計少批量,只留下一個形式表:
+------+--------+
|FormId|Elements|
+------+--------+
以及所有實例化數據存儲在Elements
中每個表單元素的XML數據中。響應被進行類似記載:
+----------+------+-------------+----------------+
|ResponseId|UserId|SubmittedDate|ResponseElements|
+----------+------+-------------+----------------+
短期問題後,龍前言
我想到的第一個想法是更清潔和更容易報告。你怎麼看?
作爲最後一點,雙方都有更多的表格,因爲每次用戶編輯表單時都會對錶格進行版本控制。
個人而言,我偏向於XML存儲:) SQL Server 2008很好地處理XML,C#也是如此。對於你想要達到的目標,我認爲XML比數據庫更適合。數據庫只是爲你儲存你的XML ....雖然,我承認偏向於這個觀點。 –
確實,你偏向於此。你也知道這比簡單的佈局複雜得多。 :) – doctorless
是的,我非常清楚項目的複雜性......我期待着看到SO社區的一些建議。 –