Пользовательская стратегия отчетности MySQL - PullRequest
0 голосов
/ 08 февраля 2012

У нас есть приложение PHP / MySQL, где пользователи могут создавать свои собственные «базы данных», которые могут стать довольно сложными.В MySQL он структурирован как набор таблиц свойств с такими столбцами, как record_id, field_id и field_value.Мне хорошо известны плюсы и минусы такой структуры, поэтому, пожалуйста, учтите, что она не меняется.

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

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

Например, рассмотрим базу данных «Люди», в которой у каждого человека может быть несколько контактов и несколько адресов.С помощью нашего пользовательского поиска легко перечислить, например, всех людей, родившихся в США.Но я также хочу отобразить все контакты и адреса для каждого человека в наборе результатов.

Я вижу два возможных решения:

  1. Один запрос SQL с несколькими JOIN заявления для получения всех данных.В этом случае у меня может быть несколько строк для каждого человека, в зависимости от того, сколько у них контактов и адресов, и мне придется иметь дело с этим в цикле PHP, который отображает (или организует) результаты.Боюсь, что это может оказаться слишком сложным, учитывая, что в отчете может быть неограниченное количество блоков информации (от одного до нескольких) (в моем примере у меня только два, адреса и контакты).

  2. Для каждого человека выполнить 'n' дополнительных запросов, по одному для каждого блока данных от одного до нескольких.В моем примере это будет один запрос для контактов, а другой - для адресов.Такой подход может привести к огромному количеству запросов для создания всего отчета.

Я знаю, что оба подхода имеют свои недостатки, но есть ли «рекомендуемый» способ продолжитьтакие ситуации?

1 Ответ

1 голос
/ 08 февраля 2012

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

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

...