Является ли многозначный параметр хранимой процедуры просто плохой практикой?
У меня странное отвращение к передаче нескольких параметров идентификатора в одну хранимую процедуру. Например, это выглядит просто неправильно:
GetMyObject (ListofIDs, OtherParam1, OtherParam2,...)
Я понимаю, КАК это сделать (правильно, если я должен).. но я не чувствую, что должен это делать. Я чувствую, что это побеждает цель хранимой процедуры / подпрограммы "получить элемент". Я чувствую, что должен построить свои SP для поддержки соответствующих параметров фильтра. Если у моего звонящего есть список идентификаторов, разве они не должны вызывать sp столько раз?
Помогите?
1 ответ
Процедура "получить элемент по идентификатору" никогда не должна возвращать более одного объекта, потому что это не имеет абсолютно никакого лингвистического смысла.
Процедура "получить предметы по идентификаторам"? Конечно, если у вас есть достойный вариант использования, и он будет использоваться достаточно часто.
Но в большинстве случаев, да, вместо процедуры, возвращающей несколько элементов по идентификатору, вам нужна процедура, которая возвращает элементы на основе параметров фильтрации, соответствующих приложению (например, "дать мне все транзакции с 8 января на сумму более 10 долларов США").
Кстати, иногда диапазон идентификаторов (например, все от 5 до 10) - это совершенно правильный набор фильтров!
Между прочим, это не обязательно проблема MySQL или SQL в целом. Практически любой вид API запросов к наборам данных на любом языке представит эти же самые вопросы дизайна, и их ответы обычно будут очень похожи.