Я давно кодирую формы ASP.NET внутри веб-приложений.Как правило, в большинстве веб-приложений есть пользователь, который входит в систему, выбирает форму для заполнения и отвечает на вопросы, чтобы ваша таблица выглядела следующим образом
Table: tblInspectionForm
Fields:
inspectionformid (either autoint or guid)
userid (user ID who entered it)
datestamp (added, modified, whatever)
Question1Answer: boolean (maybe a yes/no)
Question2Answer: int (maybe foreign key for sub table 1 with dropdown values)
Question3Answer: int (foreign key for sub table 2 with dropdown values)
Если я не ошибаюсь, она соответствует как второй, так и третьей нормальным формам.Вы не храните имена пользователей в таблицах, просто идентификаторы.Вы не сохраняете выпадающие значения или значения «да / нет» в Q-3, а просто идентификаторы других таблиц.
Однако ЕСЛИ все вопросы имеют одинаковый тип данных (предположим, что Q1 или Q1 также не являются целыми числами), которые ссылаются на один и тот же внешний ключ (например, форма, содержащая 20 вопросов, все по шкале от 1 до 10 или имеющие одинаковые ответы на выбор), было бы лучшесделать что-то вроде этого?
so .. Table: tblInspectionForm
userid (user ID who entered it)
datestamp (added, modified, whatever)
... and that's it for table 1 .. then
Table2: tblInspectionAnswers
inspectionformid (composite key that links back to table1 record)
userid (composite key that links back to table1 record)
datastamp (composite key that links back to table1 record)
QuestionIDNumber: int (question 1, question 2, question3)
QuestionAnswer: int (foreign key)
Это не относится только к формам, которые имеют одинаковые типы ответов для одной формы.Может быть, ваша форма имеет 10 из этих 1-10 оценок (int), 10 булевых вопросов, а затем 10 произвольных. Вы можете разбить ее на три таблицы.
Недостатком будет то, что при сохраненииформа, вы делаете 1 звонок на каждый вопрос в вашей форме.Положительным моментом является то, что если у вас много ночных интеграций или репликаций, которые извлекают ваши данные, если вы решите добавить новый вопрос, вам не нужно вручную изменять какие-либо репликации для источников данных отчетов или что-либо еще, предназначенное для чтения./ запросить данные формы.Если у вас изначально было 20 вопросов, и вы внедрили в свое приложение изменение, добавляющее 21-е, оно автоматически будет включено во все внешние репликации, источники данных, отчеты, которые запрашивают эти данные.Другое преимущество состоит в том, что если у вас ДЕЙСТВИТЕЛЬНО ДОЛГО (это часто случается в сфере недвижимости, когда у вас есть формы проверки с сотнями вопросов, которые выходят за пределы 8 КБ для строки таблицы), вы не столкнетесь с проблемами.
Был бы такой сценарий когда-либо предпочтительным способом сохранения данных формы?