У меня возникли некоторые разногласия с коллегой по этому вопросу.Прежде всего, среда (гарантированная, не изменится):
- SQL Server 2008 R2
- ASP.NET MVC 3
- C #
А теперь сценарий: я работаю над приложением, которое даст пользователям возможность собирать данные от пользователей и сохранять их для последующих отчетов.Методы сбора ввода находятся в различных типах элементов управления, которые они могут разместить на странице.Сбор данных не является проблемой;хранение:
База данных в базе данных
Я придерживаюсь того мнения, что он должен храниться как коллекция пар ключ-значение (в данном примере таблицаResponseItems
):
+----------+----------+----+-----+
|ResponseId|FormItemId|Name|Value|
+----------+----------+----+-----+
Где ResponseId
и FormItemId
образуют первичный ключ, ResponseId
относится к таблице Response
, как таковой:
+----------+------+------+-------------+
|ResponseId|FormId|UserId|SubmittedDate|
+----------+------+------+-------------+
И FormItemId
, относящиеся к таблице FormItem
:
+----------+------+----+-----------------+
|FormItemId|FormId|Type|InstantiationData|
+----------+------+----+-----------------+
Где FormId
совпадает с FormId
в таблице Response
, ссылаясь на таблицу Form
, что не так важно иллюстрировать.
Сериализация XML
В ответ я получаю, что сериализация компонентов формы и ответов как XML имеет больше смысла, так что онтребует меньшего объема в терминах таблиц, оставляя только таблицу форм:
+------+--------+
|FormId|Elements|
+------+--------+
, и все данные экземпляров хранятся в данных XML для каждого элемента формы в Elements
.Затем ответы записываются аналогичным образом:
+----------+------+-------------+----------------+
|ResponseId|UserId|SubmittedDate|ResponseElements|
+----------+------+-------------+----------------+
Короткий вопрос после длинного предисловия
Я думаю, что первая идея более понятна и о ней легче сообщить.Как вы думаете?
В качестве последнего примечания к этому добавлено еще несколько таблиц для обеих сторон, поскольку формы должны быть версионными при каждом редактировании формы пользователем.