Нормально ли использовать несколько sql запросов чтобы заполнить модель?
Здравствуйте.
Есть класс сущности, данные для сущности нужно брать из нескольких таблиц. Например это сущность записи в блоге, контект нужно брать из одной таблицы, а seo данные из другой.
Допустимо и нормально ли использовать несколько sql запросов чтобы достать все нужные данные или лучше уместить все в один запрос?
NubasLol, Максим Тимофеев, Ох чую, что сейчас начнётся холивар, но позвольте с вами не согласиться. То что вы говорите имеет отношение только к ActiveRecord. Если же говорить, например о Repository, то там вполне возможно собирать модель из нескольких таблиц БД. А есть категории моделей, который вообще могут быть не связанными ни с одной таблицей, например модель поставки рандомизированных данных. Короче всё сильно контексто-зависимо.
Lander, согласен. Много нюансов. Но ответ дал исходя из конкретной задачи и исходя из того, что раз топикстартер задает такой вопрос, то ему нужно, что-то простое в понимании и реализации. А тут AR самое оно. Но полностью согласен с Вашим "фе".
Да это не "фе". :) Просто подумал что раз человек задаёт подобные вопросы, то он ещё не очень хорошо разбирается в тонкостях. И увидев совет "Одна таблица - одна модель" он будет его везде применять, даже есть оно не нужно будет. Хотя в контексте данного вопроса прям про блог и сео-данные вы с NubasLol абсолютно правы!
Все ситуативно. Если много разных запросов, и их надо выполнить, то лучше все в один и разом отправить и получить единый ответ, чем последовательно долбить сервер запросами по одному. Особенно если SQL сервер стоит не локально.
$res = query("
SELECT * FROM TableA
SELECT * FROM TableB
....
");
fetch($res); // tableA rows
next($res); // switch to next result
fetch($res); // tableB rows
Существенно лучше - в 1 запрос.
Это значительно влияет на производительность.
Есть класс сущности, данные для сущности нужно брать из нескольких таблиц.
Для реляционных СУБД сие не является проблемой.
Вы можете написать запрос так, что СУБД сама объединить данные из разных таблиц и отдаст вам всё, что вам нужно - в одном запросе.
в один запрос 2 модели можно получить, а не мешать разные данные в одной
Разные таблицы запросто могут содержать данные одной-единственной модели.
Я вам даже больше скажу - как правило это так и есть. Если, конечно, вы не с совсем уж примитивными вещами имеете дело.
один запрос не всегда выгоднее выполнить, чем n запросов. вопрос не в количестве, а в стоимости.
Если ты не можешь корректно дать оценку, то лучше, все же, стремиться к одному.
В подавляющем большинстве случаев - именно один объединенный и быстрее.