#database-design
#проектирование базы данных
Вопрос:
Я должен спроектировать модель для хранения отчета, который содержит много разделов. Каждый раздел содержит набор вопросов и ответов и несколько таблиц данных.
Я принял несколько проектных решений и хотел проверить, на правильном ли я пути:
- Я не сохранил никаких ссылок на разделы в модели данных. Это хорошо или мне следует хранить ссылки на разделы документа в БД? Я думал о том, чтобы справиться с этим на уровне приложения.
- Я создал каждый вопрос в виде столбца в отличие от разработки общей модели вопросов и ответов. На самом деле, я создал общую модель вопросов и ответов, но решил не использовать ее, поскольку требования в основном известны и будут внесены некоторые минимальные изменения. Текст вопроса может обрабатываться прикладным уровнем, и в БД хранятся только ответы — мне нужны некоторые мнения о том, является ли то, что я здесь сделал, хорошей практикой.
- Является ли хорошей идеей создать объект для каждой логической группировки атрибутов / вопросов? Принцип, которому я следую, заключается в создании объекта для повторяющихся групп атрибутов. Для неповторяющихся атрибутов я создаю их все непосредственно в общем объекте отчета, и это приводит к множеству атрибутов в этом объекте. Я не уверен, хорошо это или плохо с точки зрения дизайна БД. Если мне нужно создать объекты для хранения связанной группы атрибутов, то я могу просто использовать FK для этой сущности, и это выглядело бы более элегантно в модели, но здесь задействовано объединение — какой подход здесь лучше и как мне выбрать один против другого?
Комментарии:
1. Я, вероятно, не стал бы хранить каждый вопрос / ответ в виде столбца. Вы затрудняете добавление / вычитание вопросов, а также сохраняете пустые данные для неотвеченных / незаданных вопросов.
2. Согласен с Мэтью ПК. Хранение каждого Q / A в виде столбца просто приводит к малонаселенным таблицам и рискует сделать ваши записи слишком большими для эффективного доступа. В зависимости от того, насколько длинными могут быть ваши ответы, вы можете быстро достичь практического предела.
3. @Matthew, @Joel — спасибо за ваши комментарии. Размышляя об этом дальше, я также пришел к тому же выводу, который вы оба предложили. У вас есть какие-либо мысли по моему пункту № 3?
Ответ №1:
Вот что я сделал.
Я разработал общую модель вопросов и ответов, которая может поддерживать любое количество вопросов и любую их комбинацию в любом отчете.