Я поддерживаю собственный ORM, написанный на C #, и в настоящее время у него нет механизма быстрой загрузки. Чтобы повысить производительность, мы решили, что это потребует энергичной загрузки, поэтому нам нужно написать собственный код для поддержки этого.
(Мои коллеги и я не имеем никакого опыта работы с какими-либо инструментами ORM, и, кроме того, по некоторым устаревшим причинам нам не разрешается использовать популярные инструменты, такие как LinqtoSQL, Entity Framework или Nhibernate.)
У меня такой вопрос, какова общепринятая лучшая практика для генерации готовых операторов SQL? Я подумал об этом и придумал два пути -
Предположим, классический пример из 4 таблиц -
CustomerCategory имеет много клиентов
У клиента много заказов
Заказ имеет много OrderDetail
и при условии, что я хочу загружать данные из всех 4 таблиц, и мое условие - где Order.OrderDate между '2008-05-05' и '2008-12-31'
Метод 1 - Я генерирую ОДИН sql для извлечения данных из всех 4 таблиц, используя все внутренние объединения, чтобы получить одну строку для каждой уникальной комбинации первичных ключей каждой таблицы. Я буду применять мое условие Где к этому sql.
Метод 2 - Я генерирую SQL, чтобы сначала получить только данные заказа, и применяю условие «Где» к этому sql, так как Order.OrderDate происходит из таблицы Order.
Затем, основываясь на результатах этого запроса, я узнаю все значения идентификатора заказа, которые мне нужны, поэтому я буду использовать их для получения подробных данных заказа. Я также буду знать все уникальные значения идентификаторов клиентов, которые мне нужны, поэтому я также буду использовать их для извлечения данных из таблицы клиентов, и, наконец, я сделаю то же самое для CustomerCategory. Этот метод потребует всего 4 оператора SQL.
Я вижу, что первый метод более эффективен, но один из моих коллег отметил, что 2-й метод, хотя он использует 4 оператора SQL, легче писать и поддерживать, что я согласен.
Будем весьма признательны за любые мысли по этому поводу.
Спасибо!