Эффективная структура базы данных MySQL для динамического создания форм - PullRequest
2 голосов
/ 01 февраля 2011

Я создаю приложение в Codeigniter, которое позволит любому, без входа в систему, создать форму для заполнения, используя различные типы ввода (используя текстовые поля, выпадающие списки, флажки и т. Д.).Эта форма может содержать от 1 до 100 вопросов, и когда она будет заполнена, она будет отправлена ​​по электронной почте другому лицу, которое затем заполнит ее на сайте.

Сначала я настроил базу данных MySQL, аналогичную этой записи , с несколькими различными таблицами, всего с несколькими столбцами.Затем я проиндексировал и использовал внешние ключи для связывания информации.

С тех пор я изменил и настроил свою базу данных следующим образом, поэтому я делаю меньше запросов:

Document
  id, name, email, recipientname, recipientemail, document name
Document Questions
  document_id, question_id, question, type, comments

Имеетбольше таблиц с меньшим количеством столбцов, но больше запросов более эффективно, чем сейчас?Я понимаю, что нормализация играет роль, но в какой степени вы снижаете производительность, делая ваши таблицы такими маленькими?

1 Ответ

1 голос
/ 09 февраля 2011

С точки зрения нормализации есть вещи, которые вы могли бы сделать для дальнейшей нормализации ваших данных (получатели могли бы иметь свою собственную сущность и типы), но это не всегда самый оптимальный способ доступа к вашим данным.

Например, если вы разделите вашу проблему на 4 разных объекта (типы могут быть просто ENUM):

Documents
Document Questions
Recipients
Types

Затем, чтобы получить одну форму для вашего приложения, вы должны выполнить запрос с несколькими объединениями. Если вы используете MyISAM, все четыре таблицы будут заблокированы до завершения запроса. Запросы с плохими объединениями и плохими индексами могут стать очень медленными.

Лучшей альтернативой было бы выполнение четырех отдельных запросов к базе данных (добавление индексов относительно самых распространенных запросов, которые вы выполняете) для извлечения ваших данных, таким образом таблицы будут заблокированы в течение более короткого периода времени.

Я знаю, что это крайний пример, но я бы больше сконцентрировался на оптимизации вашего индекса и нашел бы хороший баланс между нормализацией и производительностью.

Подводя итог, иногда полностью нормализованные данные означают снижение производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...