Какие вещи вы не храните в хранимых процедурах?Вопрос о сохраненных процедурах
ответ
Это не вопрос о том, следует ли использовать хранимые процедуры. Это гипотетический вопрос интервью. Интервьюер хочет быть уверенным, что вы понимаете, что SP - это не свалка кода и данных, которые лучше всего подходят в других местах системы.
Разумный ответ может включать в себя следующее:
- данных, такие как константы или клиента конкретной логики никогда не принадлежат ЗЛ.
- Пароли или другие маркеры безопасности никогда не принадлежат SP или коду.
- Комплексная обработка может не подходить для современных довольно примитивных языков SP.
- Бизнес-логика может быть лучше подходит для среднего уровня, а не в SP, из-за различий в выразительности языков, ремонтопригодности, дизайна OO или других факторов.
- Презентационный слой код, вероятно, лучше всего подходит для пользовательского интерфейса, а не для SP.
С такими вопросами интервью, как этот, цель состоит не в том, чтобы определить один правильный правильный или неправильный ответ. Вместо этого у интервьюера есть его идеальный ответ в виду, и ваша задача - определить этот ответ. Если ваш интервьюер является администратором баз данных, управляет группой DBA или, похоже, сильно согласуется с методологией, ориентированной на БД, тогда вы можете попытаться смягчить слабость языков SP и пропустить рекомендацию, чтобы избежать сложной бизнес-логики в базы данных. Есть время и место для этих дебатов, но не во время вашего собеседования!
Select^From Table
Редактировать
Хорошо, что был слегка пресным и язык в обратный ответ.
Вещи, которые вы должны иметь в хранимых процедурах:
Я лично не хранить очень простых запросов внутри хранимых процедур, если этот запрос не называется много. Например, если я вызываю проверку версии базы данных в начале программы, и я возвращаю только одну точку данных в заявлении вроде Select version from DataVersion
. Вероятно, это не то, что вы должны вызывать из хранимой процедуры. Он добавляет небольшой слой обфускации в код, если у вас есть SP, чтобы просто получить только одну точку данных. Это не значит, что если это простой запрос, он не должен находиться внутри хранимой процедуры.
Одиночные запросы, в основном не полезные в хранимой процедуре. Почему вы хотите сохранить то, что вы собираетесь использовать только один раз.
Запросы, которые очень динамичны, которые не работают хорошо в хранимой процедуре. Я потратил много времени на просмотр сложных хранимых процедур, которые можно было бы упростить, если они были перемещены в саму программу. Это очень верно для современных языков, которые поддерживают лучший способ разработки динамических запросов.
Хранимые процедуры сами не хранят данные.
Есть пара интерпретаций «магазина». Один из них должен содержать, например, строковый литерал (например, системные пароли); другой - вставить, как заявление INSERT.Также возможно, что он просто означает «какие вещи вы не должны писать в хранимых процедурах», например, код, который принадлежит прикладному уровню. – Gabe
Хранимые процедуры «определены один раз, используются много раз». Если какие-либо изменения необходимы , необходимо заменить (1 и только один) определение хранимой процедуры . Динамический SQL, Конечно, позволяет любой запрос SQL быть выпущен в любое время. Любое изменение хранимой процедуры мгновенно воздействует на каждый другой программный продукт, отчет, и т. Д. (Внутри или за пределами СУБД) , который прямо или косвенно ссылается на . Не всегда возможно, чтобы точно определял то, что будет иметь эти удары, а также то, что можно сделать без изменений без , что отрицательно скажется на чем-то другом.
Похоже, вы утверждаете * против * повторного использования кода? Кроме того, хранимые процедуры могут содержать динамический SQL (и также иметь уязвимости SQL-инъекций). – RedFilter
Я думаю, что это еще один случай, когда ответ: «это зависит». Прежде всего, реальный вопрос, на который нужно ответить, может быть: «Сколько бизнес-логики я планирую/желаю перейти к базе данных?».
Это связано с тем, что вы могли практически иметь всю свою бизнес-логику в базе данных в хранимых процедурах (sprocs), где ваши sprocs обычно имели бы близкое сопоставление «один к одному» с пользовательским интерфейсом или API вашего приложения. В этом случае у вас, вероятно, есть sprocs с такими именами, как LoginUser
, ValidateSession
, CommitPurchase
и т. Д.
С другой стороны, у вас могут быть ваши sprocs, действующие как тонкий уровень доступа к данным/манипуляции, где реальная бизнес-логика сидит где-то еще в вашей инфраструктуре приложения, а sprocs будет просто набором прославленных операторов CRUD. В таком случае, ваши имена sproc вероятно, будет выглядеть больше как GetListOfUsers
, GetTop100Users
, InsertUser
и т.д.
Существуют различные преимущества и недостатки этих двух подходов, а также целесообразность одного подхода или другого зависит многое на конкретный контекст. Ниже приведены несколько соответствующих должностей Stack Overflow по данной теме:
- Business Logic: Database or Application Layer
- Logic: Database or Application/2 (constraints check)
- Business Logic in Database versus Code?
Теперь, чтобы ваш фактический вопрос, если ваш бизнес-логика будет сидеть в базе данных , вероятно, ничего не должно быть (или не может быть) в хранимой процедуре. С другой стороны, для CRUD-подобных sprocs я думаю, что в них не должно быть ничего, кроме тех случаев, когда это абсолютно необходимо для обеспечения правильности и последовательности данных.
Ваше объяснение цели хранимых процедур как хранения бизнес-логики и хранения CRUD-подпрограмм было полезным, как и ссылки на другие сообщения. – boothinator
- 1. Сведения о сохраненных процедурах
- 2. x86 Сборка - о процедурах
- 3. Вопрос о хранимых процедурах и командах sql в коде
- 4. Мысли о расширенных хранимых процедурах
- 5. Уведомления по электронной почте о сохраненных поисковых запросах, процедурах и рекомендациях по безопасности/производительности и трюках?
- 6. Вопросы о переменных в хранимых процедурах
- 7. Вопрос о
- 8. Вопрос о форме Silverlight Вопрос
- 9. Вопрос о SQL-группировке
- 10. Вопрос о sys.argv (python)
- 11. Вопрос о строковых формах
- 12. Вопрос о Winforms
- 13. Вопрос о семафоре
- 14. Вопрос о peverify ошибок
- 15. Вопрос о конструкторе Singleton
- 16. Вопрос о взаимоотношениях дружбы
- 17. Вопрос о сокетах TCP
- 18. iPhone - вопрос о DrawRect
- 19. простой вопрос о pushViewController
- 20. Вопрос о кодировании JQuery?
- 21. Вопрос о кодировке Mysql
- 22. Вопрос о рубине!
- 23. вопрос о горизонтальном выравнивании
- 24. CSS: вопрос о переключателе
- 25. вопрос о умных указателях
- 26. Вопрос о двойном лицензировании
- 27. 301 вопрос о переадресации?
- 28. Вопрос о CCMenuItemToggle
- 29. Вопрос о вложенных циклах
- 30. Вопрос о компиляторе C#?
Пароль root – Artelius
Молочные продукты. –
Что значит молочные продукты? вы имели в виду точечные продукты? –