我在这个问题上与同事有点不同意。首先,环境(有保证的,不会改变):存储元数据库
- 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社区的一些建议。 –