Через кілька років питання залишається важливим ...
Просте правило для мене: якщо це логічне обмеження або всюдисущий вираз (одне висловлювання), помістіть його в базу даних (так, зовнішні ключі та обмеження перевірки - це також бізнес-логіка!). Якщо це процедурно, містять петлі та умовні гілки (і насправді їх неможливо змінити на вираз), введіть їх у код.
Уникайте баз даних сміття
Спроби помістити справді всю ділову логіку в код програми, ймовірно, перероджують (реляційну) базу даних у смітник, де реляційний дизайн здебільшого повністю опущений, де дані можуть мати будь-який непослідовний стан, а нормалізація відсутня (часто в основному XML, JSON , CSV тощо, кошики для сміття).
Така логіка лише для додатків, мабуть, є однією з головних причин підйому NoSQL - звичайно з недоліком того, що додаток повинен піклуватися про всю логіку, що вбудовується в реляційну БД протягом десятиліть. Однак бази даних NoSQL більше підходять для такого типу обробки даних, наприклад, документи з даними підтримують неявну "реляційну цілісність" всередині себе. Для реляційних БД це просто зловживання, викликаючи все більше проблем.
Вирази (на основі набору) замість процесуального коду
У кращому випадку кожен запит даних або операцію слід кодувати як вираз, а не процедурний код. Відмінною підтримкою цього є те, коли мови програмування підтримують вирази, такі як LINQ у світі .NET (на жаль, наразі лише запити, ніяких маніпуляцій). Що стосується реляційних БД, то вчили давно віддавати перевагу виразам операторів SQL над процедурними петлями курсору. Таким чином, БД може оптимізувати, робити операцію паралельно чи будь-що, що може бути корисним.
Використовуйте механізми цілісності даних БД
Якщо мова йде про RDBMS з обмеженнями зовнішнього ключа та перевірки, обчислені стовпці, можливо, тригери та перегляди, це місце для зберігання основної логіки бізнесу в базі даних. Правильна нормалізація допомагає зберегти цілісність даних, забезпечити унікальний і чіткий примірник даних. Навіть якщо вам доведеться дублювати його в коді та БД, ці основні механізми цілісності даних не слід опускати!
Збережені процедури?
Збережені процедури в наш час рідко потрібні, оскільки бази даних зберігають складені плани виконання для SQL та використовують їх повторно, коли знову з'являється той самий запит, лише з різними параметрами. Таким чином, аргумент прекомпіляції для SP не є дійсним. Можна зберігати або автоматично генерувати SQL-запити в додатку чи ORM, які знаходять більш заздалегідь складені плани запитів. SQL - мова вираження, якщо ви явно не використовуєте процедурні елементи. Отже, в кращому випадку ви використовуєте кодові вирази, які можна перекласти в SQL.
Хоча сторона програми, включаючи створений ORM, SQL, більше не знаходиться в базі даних, на відміну від збережених процедур, я все ще вважаю це кодом бази даних. Оскільки він все ще вимагає знань про SQL та базу даних (за винятком найпростішої CRUD), і при правильному застосуванні працює значно відрізняється від процедурного коду, який зазвичай створюється мовами програмування, такими як C # або Java.