Является ли многозначный параметр хранимой процедуры просто плохой практикой?

У меня странное отвращение к передаче нескольких параметров идентификатора в одну хранимую процедуру. Например, это выглядит просто неправильно:

GetMyObject (ListofIDs, OtherParam1, OtherParam2,...)

Я понимаю, КАК это сделать (правильно, если я должен).. но я не чувствую, что должен это делать. Я чувствую, что это побеждает цель хранимой процедуры / подпрограммы "получить элемент". Я чувствую, что должен построить свои SP для поддержки соответствующих параметров фильтра. Если у моего звонящего есть список идентификаторов, разве они не должны вызывать sp столько раз?

Помогите?

1 ответ

Решение

Процедура "получить элемент по идентификатору" никогда не должна возвращать более одного объекта, потому что это не имеет абсолютно никакого лингвистического смысла.

Процедура "получить предметы по идентификаторам"? Конечно, если у вас есть достойный вариант использования, и он будет использоваться достаточно часто.

Но в большинстве случаев, да, вместо процедуры, возвращающей несколько элементов по идентификатору, вам нужна процедура, которая возвращает элементы на основе параметров фильтрации, соответствующих приложению (например, "дать мне все транзакции с 8 января на сумму более 10 долларов США").

Кстати, иногда диапазон идентификаторов (например, все от 5 до 10) - это совершенно правильный набор фильтров!

Между прочим, это не обязательно проблема MySQL или SQL в целом. Практически любой вид API запросов к наборам данных на любом языке представит эти же самые вопросы дизайна, и их ответы обычно будут очень похожи.

Другие вопросы по тегам