Насколько широко распространена практика использования хранимых процедур/функций sql?
Истина. Создание запросов с помощью Active Record позволяет вам управлять ими в коде приложения.
Каковы преимущества и недостатки использования хранимых процедур?
Плюсы: Вы можете скрыть сложную логику запроса из кода приложения.
Против: вам необходимо создать и выполнить миграцию, если вы хотите переписать процедуру.
See this example on hiding logic in a database view, also applicable to procedures.
Pros Пример:
Вы должны выбрать все отели с имеющимися между start_time
и end_time
номеров. В каждом отеле есть total_rooms (целочисленный атрибут), hotel_times (организация, определяющая часы работы отеля) и некоторые заказы (организация, определяющая пользователя, который забронировал номер в отеле). Некоторые отели большие и предлагают ежедневные заказы. Другие отели небольшие и предлагают почасовые бронирования. Вы спрашиваете пользователя, когда он хочет забронировать, что может быть либо датой, либо датой со временем.
Это связано с некоторыми объединениями и подзапросами и создаст большую уродливую часть кода активной записи. Вместо этого вы можете написать процедуру и назвать его так:
Hotel.find_by_sql ['SELECT * FROM hotels_available_between(?, ?)', start_time, end_time]
Заверните его в рамки и получить больше рубиново-иш:
class Hotel < ActiveRecord::Base
scope :available_between, -> start_time, end_time do
find_by_sql ['SELECT * FROM hotels_available_between(?, ?)', start_time, end_time]
end
end
Hotel.available_between start_time, end_time
Я понимаю, что этот поток 4 года и 1 день назад, но хранимые процедуры «медленны для записи и более трудно меняются» - это полная ошибка. Конечно, я наткнулся на эту тему, потому что я тоже .Net парень, который должен обновить очень старый рубин на сайте rails. Мое предположение - хранимая процедура в БД, а не в Rails. Если это в Rails, я уступлю и скажу, что вы, вероятно, правы. Но SP в БД так же просто, как и получается. – Grandizer