Бизнес-логика в базе данных против кода?

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

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


person senfo    schedule 24.09.2009    source источник
comment
Я администратор базы данных. Логика DATA должна быть в базе данных. То, как вы манипулируете структурами базы данных для выполнения действий, требуемых функциональностью, ДОЛЖНО БЫТЬ сохранено в базе данных. Когда вы объединяете эти действия в более крупную серию процессов (бизнес-логику), ЭТО можно объединить в приложении.   -  person Guy    schedule 25.09.2009
comment
ИТ-менеджеры - это проблема. Они злоупотребляют администраторами баз данных, ожидая от них участия в разработке системы. Администраторы баз данных просто используют имеющийся под рукой инструмент. Я разработчик полного стека. Я очищал логику данных в течение многих лет и убедил своего работодателя запретить хранимые процедуры для бизнес-процессов после извлечения электронных таблиц Excel из сотен запросов, один из которых отфильтровал ФИНАНСОВЫЕ ДАННЫЕ. Обработка относится только к приложениям, интерфейс которых предоставляет пользователю контроль и информацию. Другими словами, SP предназначены для работы с базой данных, а не для ввода пользовательских данных.   -  person RBJ    schedule 17.04.2020


Ответы (16)


Я стараюсь серьезно ограничить свою бизнес-логику в БД только процессами, которые должны выполнять множество запросов и обновлений для выполнения одной операции приложения. Некоторые могут возразить, что даже это должно быть в приложении, но я предпочитаю снизить количество операций ввода-вывода, если это возможно.

Базы данных отлично подходят для CRUD, но если они раздуваются логикой:

  1. It becomes confusing where the logic is,
  2. Typically databases are a silo and do not scale horizontally nearly as well as the app servers.
  3. t_sql/PLsql is hard to read and procedural in nature
  4. You forfeit all of the benefits of OOAD.
person Matt Wrock    schedule 24.09.2009
comment
T-SQL и другие варианты SQL могут быть трудными для чтения, но я бы считал их декларативными, а не процедурными - курсоры являются одним исключением. - person Scott Lawrence; 24.09.2009
comment
Как тогда вы обрабатываете транзакции? Например: Допустим, мне нужно создать новый Заказ в моей системе. Бизнес-сценарий в этом случае потребует от системы: задокументировать заказ, отправить электронное письмо клиенту (добавить строку в таблицу emailQueue) и - (это сложная часть), если order.type = 1 - ›обновить table1 иначе обновить table2. Все это должно быть в одной транзакции. Вы бы исправили это на уровне бизнес-логики и обработали бы транзакции в коде или переместили бы все это в базу данных? - person Uri Abramson; 21.11.2013
comment
@UriAbramson Я бы не хотел ждать завершения каждого из этих процессов. Итак, я бы, вероятно, использовал здесь служебную шину и для каждого имел бы транснациональную очередь. Я бы не стал помещать это в базу данных. Базы данных должны быть предназначены только для сохранения данных. Мое мнение. - person Scott Adams; 27.11.2013
comment
t_sql / PLsql трудно читать - на основании чего? Это просто код. Я мог бы подумать, что Objective-C трудно читать, но другой человек может подумать, что это самый интуитивно понятный язык со времен нарезанного хлеба. Означает ли это, что Objective-C трудно читать? Нисколько. Язык - это просто инструмент, это просто синтаксис. Вы можете написать плохой код PL / SQL, так же как вы можете написать плохой код C #. Но в любом случае виноват не язык, а человек, написавший код. Сложен ли язык для чтения, в основном зависит от вашего знакомства с ним. - person dcp; 23.01.2014
comment
Это очень честно. Прошло 4 года с момента публикации этого ответа. Самая большая вещь, которую я запомнил, - это опасность превращения БД в сервер приложений. Трудночитаемый выпуск не такой уж и большой. - person Matt Wrock; 23.01.2014
comment
Я не обязательно согласен с ответом. Как вы определяете здесь логику? Это просто набор вычислений и выводов? или процесс, который его переплетает? Приложение представляет собой простой уровень представления, и времена толстых клиентов с тяжелой логикой на стороне приложения прошли. Кроме того, единичные массовые операции, вызываемые из приложения, могут иметь серьезные проблемы с производительностью либо во время логики, либо во время запроса БД / вставок / обновлений / удалений, и настройка стороны БД будет намного проще и эффективнее, чем настройка логики стороны приложения. - person AnBisw; 08.08.2014
comment
В дополнение к этому, приложения все больше переходят к асинхронной обработке, при которой пользователь выполняет операцию A в пользовательском интерфейсе и переходит к операции B, но операция A по-прежнему выполняется асинхронно в фоновом режиме, не заставляя пользователя ждать, пока завершится процесс. Эффективная реализация такого асинхронного поведения практически невозможна при полной бизнес-логике, кодированной исключительно на уровне приложения. - person AnBisw; 08.08.2014
comment
@dcp Итак, вы говорите, что, например, brainfuck так же легко читать, как java, когда вы к нему привыкнете? - person Kaur Kase; 21.06.2017
comment
@Kaur Kase - Я говорю, что язык - это инструмент, и важно то, насколько хорошо вы его используете. Легкость чтения - это скорее вопрос знакомства с языком и его синтаксисом, а это приходит со временем. Однако самый важный вывод заключается в том, что плохой программист напишет плохой код на любом языке. Вы можете посадить плохого водителя в Ferrari, и он все равно останется плохим водителем. То же самое и с программированием. Написание хорошего кода - это функция программиста, а не языка. - person dcp; 21.06.2017

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

person Community    schedule 27.06.2012
comment
это правда. Я также работал над очень сложным приложением и вложенной базой данных, более половины бизнес-логики которой находится в базе данных. Если бы я хотел поместить условия и логику в класс или библиотеку, это было бы кошмаром, и это дало бы доступ конечному пользователю для почти доступа. другие вещи, например Auth, ACL, сравнения, ... - person Fury; 14.01.2014
comment
И приз за краткий ответ на этот вопрос получает ... - person Jason Glover; 04.03.2014
comment
Давайте посмотрим, что тестирование и отладка занимают 1% из 1% времени, связанного с жизнью запроса к базе данных, так что да, оптимизация для этого. Какая глупая идея. Может быть, если бы вы все время работали с базой данных, вам не было бы так сложно отлаживать и тестировать. Я, конечно, не знаю; т. То, что что-то не похоже на то, к чему вы привыкли, не является причиной не использовать это, если это лучший инструмент для работы. - person HLGEM; 27.08.2015
comment
Может быть, если бы вы работали с базой данных все время ... - звучит так, будто вы признаете, что у вас есть только один инструмент, и это молоток. Может быть, просто, может быть, при построении логически сложных систем некоторые люди предпочитают обеспечивать правильность поведения, а не скорость выполнения. Понятия не имею, правильно ли это, но это быстро! - person ; 14.03.2017

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

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

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

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

person HLGEM    schedule 24.09.2009
comment
Да, данные могут поступать из более чем одного приложения, но это не означает, что вы должны поместить логику в базу данных. Что плохого в наличии другого уровня над базой данных, через который должны проходить все приложения? Это причина создания многоуровневой системной архитектуры. Если вы хотели импортировать большие объемы данных в качестве данных, зачем предполагать, что это будет сделано прямо в базу данных? Приложение массового импорта может быть разработано с использованием уровня сервиса, который затем будет направлять эти данные через тот же уровень бизнес-логики ... - person Andy McCluggage; 25.09.2009
comment
... Наличие нескольких слоев означает, что вы можете избежать чрезмерной нагрузки на один слой. Базы данных предназначены только для сохранения данных. - person Andy McCluggage; 25.09.2009
comment
Все, что я могу сказать, это то, что вы никогда не тратили месяцы на исправление плохих данных из таких плохих проектов. У меня есть. Базы данных предназначены не только для сохранения данных. - person HLGEM; 25.09.2009
comment
Нет ничего плохого в правильно структурированном, многоуровневом дизайне. Вы явно, как и большинство, имели дело с некоторыми особенно плохими проектами. Я тоже был там, и это никогда не наводило меня на мысль, что поместить всю бизнес-логику в базу данных - это хорошая идея. Фактически, самые большие и самые непостижимые беспорядки, которые я видел, были там, где это БЫЛО сделано. - person Andy McCluggage; 30.09.2009
comment
+1 по поводу SP, обеспечивающих лучшую безопасность. - person Rob Garrison; 06.10.2009
comment
@HLGEM - мне очень понравился твой ответ. Я полностью согласен с тем, что бизнес-правила должны быть в базе данных. Что касается точки зрения Энди о написании среднего уровня, что произойдет, когда этот язык среднего уровня станет устаревшим? Например, что, если средний уровень был написан на VB6 8 лет назад? Что вы собираетесь делать сейчас, чтобы перевести его на более удобный для сопровождения язык? Переписать все? Если бы вы поместили бизнес-правила в базу данных, они были бы там, и их можно было бы легко поддерживать годами. 20 лет назад никто не использовал Java, но многие использовали Oracle. - person dcp; 12.12.2013
comment
По иронии судьбы, именно этот сценарий бизнес-правил, написанных на VB6, происходит в известном мне проекте одной конкретной компании. Итак, угадайте, что они сейчас делают? Переписывание всех бизнес-правил в Drools (движок на основе правил Java). Если бы они с самого начала поместили эти правила в базу данных, то все, что они переписали бы, - это код внешнего интерфейса, а не бизнес-правила, что является наиболее важной частью. У Тома Кайта есть отличный пост по этому поводу: asktom.oracle.com/pls/apex/ - person dcp; 12.12.2013
comment
@dcp А что делать, если ваша база данных устареет? Тот же аргумент, что и вы против устаревших языков среднего уровня ... Допуская, что языки баз данных служат дольше, чем многие языки программирования, придерживаться чего-то только потому, что вы не хотите ничего менять, просто теряет все инновации, которые были созданы с помощью годы, когда вы ютитесь в этом углу. Моя основная проблема с бизнес-логикой базы данных заключается в том, что она почти никогда не СУХАЯ, поэтому одно изменение потребует от вас пройти все, чтобы убедиться, что все работает ... - person Populus; 23.01.2014
comment
@Populus - я использую Oracle с 1992 года, примерно с того времени начал использовать Sybase (теперь SQL Server). DB2 существует даже дольше. В вашем профиле указано, что вы отвечаете на множество вопросов PHP. Вы писали PHP-код в 1992 году? Сомневаюсь, потому что тогда его не было. Так же как и C #, Java, Objective-C или большинство популярных языков того времени. Но Oracle существовала, как и PL / SQL. Дело в том, что если бы вы поместили свою бизнес-логику в PL / SQL в 1992 году, эта логика все еще работала бы сегодня и не устарела бы. Что, если вы поместите ту же бизнес-логику в Powerbuilder? - person dcp; 23.01.2014
comment
@Populus - несколько лет назад я написал статью, в которой подробно рассмотрел эту тему. см. раздел передовой практики здесь: goo.gl/Y9wzMn Цитата Тома Кайта лучше всего резюмирует это: В реляционном мире уже более 20 лет (и, вероятно, в большинстве объектных реализаций) упорно работает сама база данных. Интерфейсы данных меняются почти ежегодно, и при этом приложения, в которых вся безопасность (и бизнес-логика) встроены внутри себя, а не в базу данных, становятся препятствиями, преградами на пути к будущему прогрессу. - person dcp; 23.01.2014
comment
Это одна из священных войн Usenet. Разделение вашей логики между БД и приложением часто приводит к путанице (разработчик приложения не может видеть волшебство, происходящее в БД, и быть уверенным, что среди нас есть волшебники) и усложняет развертывание. Теоретически это может быть очень хорошо. На практике это ужасно поддерживать и поддерживать. - person Bwooce; 07.04.2014
comment
все источники новых данных или изменений данных подчиняются правилам - это имеет смысл, если вы разрешаете или требуете несколько разных потребителей базы данных. В большинстве случаев, когда вы открываете свою базу данных только через API среднего уровня, можно переместить логику в API. Кроме того, создание современного потребителя базы данных на основе ORM - кошмар, если простая операция UPDATE может нанести удар по вашему инструменту ORM неожиданными побочными эффектами обновления / вставки / удаления других записей, возврата ошибок проверки и т. Д. И т. Д. - person JustAMartin; 29.11.2019

Вы используете термин «бизнес-логика» довольно расплывчато.

Его можно интерпретировать как включающее в себя обеспечение ограничений данных (также называемых «бизнес-правилами»). Обеспечение их соблюдения однозначно относится к периоду.

Это также может быть истолковано как включающее такие вещи, как «если приходит новый клиент, то в течение недели мы отправляем ему приветственное письмо». Попытка протолкнуть такие вещи на уровень данных, вероятно, будет большой ошибкой. В таких случаях драйвером для «создания нового приветственного письма», вероятно, должно быть приложение, которое также запускает вставку новой строки клиента. Представьте себе, что каждая новая вставка строки базы данных вызывает новое приветственное письмо, а затем внезапно мы берем на себя управление другой компанией и должны интегрировать клиентов этой компании в нашу собственную базу данных ... Ой.

person Erwin Smout    schedule 25.09.2009
comment
Этот ответ наиболее проницателен. - person Pacerier; 07.12.2014
comment
Да, я думаю, что этот вопрос требует ответов на разных уровнях. Я полностью согласен с тем, что ограничения данных должны выполняться схемой. - person wobbily_col; 23.03.2016

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

person Joe    schedule 24.09.2009

Пару раз я вставлял «логику» в sprocs, потому что CRUD мог происходить более чем в одном месте. Под «логикой» я бы сказал, что это на самом деле не бизнес-логика, а скорее «логика целостности». Это может быть то же самое - может потребоваться некоторая очистка, если что-то удаляется или обновляется определенным образом, и если это удаление или обновление может происходить из более чем одного инструмента с разными базами кода, имеет смысл поместить его в процесс, который они все б / у.

Кроме того, иногда «линия бизнес-логики» бывает довольно размытой. Возьмем, к примеру, отчеты - они могут полагаться на хранимые процедуры или представления, которые инкапсулируют «разум» о значении схемы для бизнеса. Как часто вы видели операторы CASE и тому подобное, которые «делают что-то» на основе значений столбцов или других критериев? Может быть истолковано как бизнес-логика и все же, вероятно, принадлежит БД, где его можно оптимизировать и т. Д.

person n8wrl    schedule 24.09.2009
comment
Хорошая мысль ... Я действительно делал подобные вещи в прошлом. - person senfo; 24.09.2009

Я бы сказал, что если «бизнес-логика» означает поток приложения, пользовательский контроль, операции по времени и вообще «ведение бизнеса», то это должно быть на уровне приложения. Но если это означает убедиться, что независимо от того, как вы копаетесь в данных, они всегда имеют смысл и представляют собой разумное, несамоконфликтное целое, тогда проверки для обеспечения соблюдения этих правил проходят в БД, абсолютно, без вопросов. Всегда есть много способов поместить данные в БД и манипулировать ими, когда они там окажутся. Не во все эти способы встроена «бизнес-логика». Вы обнаружите, что сеанс SQL в БД через окно DOS при обращении в службу поддержки в 3 часа ночи очень либерален в том, что он позволяет, например! Если в базе данных нет логики, чтобы убедиться, что ВСЕ изменения данных имеют смысл, вы можете быть уверены, что данные со временем будут очень, очень испорчены. А поскольку ценность системы определяется данными, которые она хранит, это значительно снижает окупаемость инвестиций.

person Simon Oliver    schedule 30.07.2012

Две веские причины для помещения бизнес-логики в базу данных:

  • Он защищает вашу логику и данные от дополнительных приложений, которые могут получить доступ к базе данных, которые не реализуют подобную логику.
  • Проекты баз данных обычно переживают уровень приложений, и это сокращает объем работы, необходимой при переходе к новым технологиям на стороне клиента.
person dpbradley    schedule 24.09.2009
comment
Если у вас есть какая-то целостность данных или другая бизнес-логика в базе данных, вы полностью исключите ее из уровня бизнес-логики? Или вы его дублируете? (Например, проверка допустимости значения перед вводом в БД, даже если сама БД не позволяет вам его ввести?) - person Edan Maor; 24.09.2009
comment
База данных предназначена для сохранения данных. Если вы поступили так, как вы рекомендовали, вы строите на неудачу. Дополнительные приложения, которым требуются те же данные, должны контролироваться способом доступа к ним, а не самим уровнем данных. Тоже не делайте этого и не говорите: «Ох уж эти элементы управления базой данных», которые предназначены для того, чтобы подвергнуть себя огромным оплошностям. Более того, конструкции баз данных переживают приложения, потому что их слишком сложно изменить. Вот почему вы хотите вкладывать в них как можно меньше. Чем больше логики вы связываете со своими данными, тем больше вам придется работать, когда что-то меняется. - person Ty.; 24.09.2009
comment
@Edan - дублирование логики может иметь смысл в некоторых случаях, когда оно улучшает производительность за счет сохранения сетевых циклов к / от серверной части. У вас все еще есть подстраховка в конце - person dpbradley; 24.09.2009
comment
@Ty - Возможно, мы оба могли бы указать на примеры из опыта, подтверждающие наше мнение, но как только вы дойдете до достаточно сложных приложений с сотнями таблиц и высокой скоростью транзакций, к которым обращаются десятки приложений, которым необходимо обмениваться данными, я возьмите мою логику на задний план. - person dpbradley; 25.09.2009
comment
@dpbradley Это вопрос, который вы должны отредактировать в своем сообщении. Представление. В зависимости от природы данных и способа доступа к ним иногда может потребоваться дополнительная логика на сервере базы данных из соображений производительности. Однако очень сложная система, к которой обращаются десятки приложений, должна делать это постоянно. Очень сложно обеспечить эти опасения на уровне базы данных, и я бы очень осторожно пытался это сделать без очень веских причин. - person Ty.; 25.09.2009
comment
Оба эти утверждения совершенно неверны. Вы явно упустили суть. - person Jack; 02.12.2009
comment
@ Джек - объяснишь? Пожалуйста, опубликуйте свой ответ на вопрос, если у вас есть контрапункт. - person dpbradley; 02.12.2009

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

person Gratzy    schedule 24.09.2009

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

person Yaniv C    schedule 18.05.2011

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

person Byron Whitlock    schedule 24.09.2009

Основная причина использования базы данных для выполнения работы заключается в том, что у вас есть единая точка контроля. Часто разработчики приложений повторно используют или переписывают фрагменты кода в разных частях приложения. Даже если предположить, что все они работают точно так же (что сомнительно), при изменении бизнес-логики приложение необходимо проверить, перекодировать, перекомпилировать. Если параметры не изменятся, в этом не будет необходимости, если бизнес-логика хранится только в базе данных.

person Rap    schedule 24.09.2009

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

person Mr. Will    schedule 24.09.2009

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

Если развертывание вашего приложения затруднено и у вас нет сервера приложения, изменение BL в хранимых процедурах является наиболее эффективным способом развертывания изменений.

person Austin Salonen    schedule 24.09.2009
comment
несколько человек в этом потоке отметили, что проще обновлять / развертывать изменения в БД. Мне не нравится этот аргумент. Если сложно развернуть приложение, ответ - не переносить часто изменяемую логику в БД, а исправить механизм развертывания! Я работаю в крупном финансовом учреждении, и у меня есть множество финансовых приложений, как на компьютере, так и в Интернете. Каждый из них может быть развернут в мгновение ока без заметных простоев. Можно использовать такие методы, как сине-зеленые выпуски, или приложения, которые проверяют наличие обновлений при запуске. - person Mark Jones; 08.01.2015

Я думаю, что специально для старых приложений, над которыми я работаю (Банковское дело), ​​где бизнес-логика огромна, почти невозможно выполнить всю эту бизнес-логику на уровне приложения, а также это большой удар по производительности, когда мы помещаем эту логику на уровень приложения. где количество выборок в базу данных больше, приводит к большему использованию ресурсов (больше объектов Java, если это сделано на уровне Java) и проблемам с сетью и забывает про производительность.

person santosh    schedule 23.07.2010

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

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

person Ben    schedule 26.12.2012
comment
Это очень необоснованное и анекдотическое утверждение. - person senfo; 29.12.2012
comment
Забавно, что: оглядываясь назад на мой комментарий несколько лет назад, я все еще работаю над старой системой. И сейчас я собираюсь пересобрать его новую версию. Однако я все еще в той же ситуации. Я не имею в виду, что нет способа довести выполнение логики до уровня приложения. Я имею в виду, что не знаю, как это сделать в моем случае, возможно, из-за моих ограничений. Мне очень приятно, если кто-то может меня научить. - person Ben; 16.02.2015
comment
Мое основное требование: обновить только одну строку, но из-за множества ограничений выполнение проверки будет проходить через многие тысячи строк, которые отфильтрованы из таблиц с десятками миллионов записей. После этого будут обновлены многие тысячи строк. Неограниченная древовидная структура - person Ben; 16.02.2015