Думаю, питання полягає у відповідальності за якість даних.
Відповідь залежить від того, як ви бачите систему.
Якщо ви бачите базу даних як незалежну, виразну та автономну службу окремо від програми, то база даних несе відповідальність за забезпечення послідовності та якості даних, які вона містить. По суті, тому, що ця база даних може використовуватися іншим додатком, тому вона не може покладатися на те, що друге додаток має однакову послідовність та якість поведінки. У цих умовах база даних повинна бути розроблена для викриття API та автономної поведінки. У цьому режимі існують щонайменше два додатки, один з них - це база даних, а другий - програма, що використовує її.
І навпаки, базу даних можна вважати складною формою файлів, яка знаходиться під безпосереднім і повним контролем програми. У цьому сенсі база даних перетворюється на чистий інструмент для серіалізації та навігації по документах. Він може надати деяку розширену поведінку для підтримки запитів та обслуговування документів (як, наприклад, JSON чи XML-інструменти), але знову ж таки цього не потрібно (як це робить більшість файлових потоків). У цьому випадку суто відповідальність програм за підтримку правильного формату та вмісту у файлі. У цьому перегляді є одна програма.
В обох поглядах наступне питання полягає в тому, як підтримувати використання бази даних як фантазійного файлу, або окремої служби. Ви можете досягти цього:
- за допомогою інструментів, які надає платформа бази даних у вигляді таблиць / представлень / збережених процедур / тригерів / тощо ...
- загортання самої бази даних в службу, яку повинні використовувати всі клієнти для доступу до бази даних
- загортання бази даних у бібліотеку, яку повинні використовувати всі клієнти для доступу до даних.
Кожен має свої плюси / мінуси і буде залежати від архітектурних обмежень середовища, в якому працює система.
Незалежно від того, яку точку зору ви вважаєте, завжди перевіряє дані на кордонах.
- Перевірте поля в інтерфейсі користувача, який вводить користувач
- Перевірте запит мережі / API, перш ніж він покине клієнта
- Перевірте запит на мережу / API на сервері, перш ніж робити що-небудь
- Перевірка даних, переданих у бізнес-правила
- Перевірити дані, перш ніж зберігатись
- Перевірте дані після отримання даних із збереження
- так далі і так далі
Скільки валідації на кожному кордоні залежить від того, наскільки ризиковано його не підтвердити.
- множення двох чисел разом?
- ви зрозуміли неправильне число, це проблема?
- викликати процедуру в заданому місці пам'яті?
- Що в цьому місці пам'яті?
- Що станеться, якщо об’єкта не існує або знаходиться в поганому стані?
- використовуючи регулярний вираз на рядок, що містить кандзі?
- Чи може модуль регулярного вираження обробляти unicode?
- Чи може регулярний генекс обробляти unicode?
However, why not perform validation of data on the application side before storing them into the database?
ну ці двоє не є взаємовиключними. Цілком імовірно, ви будете перевіряти різні речі з обох сторін. Хоча перевірки на стороні програми орієнтовані на бізнес, проте перевірки на базі даних більш орієнтовані на дані. Подумайте в базі даних, що подається кількома і різними програмами.