На мій досвід, багато проектів, про які я читав у минулому, не мали визначення баз даних у базі даних, натомість вони визначали їх лише у вихідному коді. Тож мені цікаво, які переваги / недоліки визначають співвідношення між таблицями в базі даних та вихідним кодом? І більш широке питання стосується інших вдосконалених функцій сучасних баз даних, таких як каскад, тригери, процедури ... У моїх думках є деякі моменти:
У базі даних:
Правильні дані з дизайну. Попередити помилки програми, які можуть спричинити недійсні дані.
Скорочуйте зворотну поїздку в мережу до програми під час вставки / оновлення даних, оскільки програма повинна зробити більше запитів, щоб перевірити цілісність даних.
У вихідному коді:
Більш гнучка.
Краще під час масштабування до декількох баз даних, так як іноді це відношення може бути міжбазовим.
Більше контролю над цілісністю даних. База даних не повинна перевіряти кожен раз, коли програма змінює дані (складність може бути O (n) або O (n log n) (?)). Натомість делегується додатку. І я думаю, що обробка цілісності даних у додатку призведе до більш детальних повідомлень про помилки, ніж використання бази даних. Наприклад, коли ви створюєте сервер API, якщо ви визначаєте відносини в базі даних, а щось піде не так (як, наприклад, посилання, яке не використовується), ви отримаєте виняток SQL з повідомленням. Найпростішим способом буде повернути клієнту 500, що існує "внутрішня помилка сервера", і клієнт не матиме уявлення про те, що йде не так. Або сервер може проаналізувати повідомлення, щоб зрозуміти, що не так, що на мою думку - це некрасивий спосіб, схильний до помилок. Якщо ви дозволите програмі це впоратися,
Є ще щось?
Редагувати: як вказує Кіліан, мій погляд на ефективність та цілісність даних дуже помилковий. Тому я змінив, щоб виправити свою думку там. Я цілком розумію, що дозволити базі даних обробляти це буде більш ефективним та надійним підходом. Будь ласка, перевірте оновлене запитання та дайте кілька питань щодо нього.
Редагувати: дякую всім Усі відповіді, які я отримав, вказують, що обмеження / відносини слід визначати в базі даних. :). У мене є ще одне запитання, оскільки це зовсім поза сферою цього питання, я щойно опублікував це як окреме питання: Обробляти помилку бази даних для сервера API . Будь ласка, залиште трохи інформації.