У вас может быть слишком много хранимых процедур? - PullRequest
13 голосов
/ 26 сентября 2008

Есть ли такая вещь, как слишком много хранимых процедур?

Я знаю, что число, которое вы можете иметь, не ограничено, но это какая-то производительность или архитектурная причина не создавать сотни, тысячи ??

Ответы [ 19 ]

2 голосов
/ 26 сентября 2008

Слишком много любой конкретной вещи, вероятно, означает, что вы делаете это неправильно. Слишком много конфигурационных файлов, слишком много кнопок на экране ...

Не может говорить о других СУБД, но приложение Oracle, использующее PL / SQL, должно логически объединять процедуры и функции в пакеты, чтобы предотвратить каскадные аннулирования и лучше управлять кодом.

1 голос
/ 27 сентября 2008

Мой первый большой проект был разработан с помощью Object Relational Mapper, который абстрагировал базу данных, поэтому мы сделали все объектно-ориентированным, и было легче отслеживать и исправлять ошибки, а также было особенно легко вносить изменения, поскольку весь доступ к данным и бизнес-логика были Однако в коде C #, когда дело дошло до сложных задач, система чувствовала себя медленно, поэтому нам пришлось обойти эти вещи или перестроить проект, особенно когда ORM пришлось делать сложные объединения в базе данных.

Сейчас я работаю в другой компании, у которой есть девиз: «наши приложения - это просто оболочка базы данных», и у нее есть свои преимущества и недостатки. У нас действительно быстрые приложения, так как все операции с данными выполняются над хранимыми процедурами, в основном это SQL Server 2005, но когда дело доходит до внесения изменений или исправления в программном обеспечении, становится сложнее, потому что вам приходится менять оба, код на C # и хранимые процедуры SQL, так что все равно, что работать дважды, в отличие от того, когда я использовал ORM, у вас нет рефакторинга или строго типизированных объектов в SQL, Management Studio и других инструментах очень помогают, но обычно вы тратите больше времени на это .

Так что я бы сказал, что это зависит от потребностей проекта, если вы не собираетесь хранить действительно сложные бизнес-данные, чем, может быть, вы вообще можете избежать использования хранимых процедур и использовать ORM, который облегчает жизнь разработчика. Если вы беспокоитесь о производительности и хотите сохранить все ресурсы, чем следует использовать хранимые процедуры, то, конечно, их количество зависит от архитектуры, которую вы проектируете, поэтому, например, если у вас всегда есть хранимые процедуры для операций CRUD, вам потребуется для вставок, один для обновления, один для удаления, один для выбора и один для листинга, так как это наиболее распространенные операции, если у вас есть 100 бизнес-объектов, умножьте эти 4 на это, и вы получите 400 хранимых процедур, чтобы управлять самыми основными операций над вашими объектами, так что да, их может быть слишком много.

1 голос
/ 26 сентября 2008

Как уже говорили другие, это действительно сводится к аспекту управления. Через некоторое время он превращается в поиск иголки в стоге сена. Это тем более актуально, когда существуют плохие стандарты именования ...

1 голос
/ 27 сентября 2008

Нет, пока у вас есть разумные соглашения об именах, актуальная документация и достаточное количество модульных тестов для их организации.

1 голос
/ 26 сентября 2008

Да, у вас может быть слишком много хранимых процедур.

Соглашения об именах могут действительно помочь в этом. Например, если у вас есть соглашение об именах, где у вас всегда есть имя таблицы и InsUpd или Get, довольно просто найти хранимую процедуру right , когда вам это нужно. Если у вас нет какого-то стандартного соглашения об именах, было бы очень легко придумать две (или более) процедуры, которые делают почти одно и то же.

Было бы легко найти пару следующих параметров без стандартизированного соглашения об именах ... usp_GetCustomersOrder, CustomerOrderGet_sp, GetOrdersByCustomer_sp, spOrderDetailFetch, GetCustOrderInfo и т. Д.

Еще одна вещь, которая начинает происходить, когда у вас много хранимых процедур, это то, что у вас будут некоторые хранимые процедуры, которые никогда не используются, а некоторые просто используются редко ... Если у вас нет какого-либо способа отслеживания сохраненных При использовании процедур вы либо получите много неиспользованных процедур ... или, что еще хуже, избавитесь от процедуры, которая, по вашему мнению, никогда не используется, и узнаете впоследствии, что она используется только один раз в год или раз в квартал. (

Джеф

1 голос
/ 26 сентября 2008

Нет, не то, что я знаю. Тем не менее, вы должны иметь хорошее соглашение об именах для них. Например, начинать их с usp_ - это то, что многие люди любят делать (быстрее, чем начинать с sp _).

Возможно, вашими отчетными спроками должны быть usp_reporting_, а вашими бизнес-объектами должны быть usp_bussiness_ и т. Д. Пока вы можете ими управлять, не должно быть проблем с их большим количеством.

Если они становятся слишком большими, вы можете разделить базу данных на несколько баз данных. Это может иметь более логичный смысл и может помочь с размером базы данных и тому подобное.

1 голос
/ 26 сентября 2008

Если у вас много хранимых процедур, вы обнаружите, что привязываете себя к одной базе данных - некоторые из них могут быть нелегко перенести.

Связывание себя с одной базой данных не очень хороший дизайн.

Более того, если у вас есть бизнес-логика в базе данных и на бизнес-уровне, то обслуживание становится проблемой.

0 голосов
/ 26 сентября 2008

Я думаю, что пока вы называете их uspXXX, а не spXXX, поиск по имени будет прямым, так что никаких минусов - хотя вы можете подумать об обобщении процедур, если у вас есть тысячи ...

0 голосов
/ 26 сентября 2008

Вы должны поместить весь этот код куда-нибудь.
Если вы собираетесь использовать хранимые процедуры вообще (я лично одобряю их, но многие этого не делают), то вы можете использовать их столько, сколько вам нужно. По крайней мере, вся логика базы данных находится в одном месте. Недостатком является то, что структура, заполненная хранимыми процессами, не имеет большой структуры.

Ваш звонок! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...