Чому обмеження застосовуються в базі даних? Чи не буде більш гнучким його вводити в код?
Я читаю книгу для початківців щодо впровадження баз даних, тому я задаю це питання новачкам. Скажімо, я створив базу даних, включаючи цю модель сутності:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Поточні обмеження:
- Зареєстрована особа в системі може бути лише студентом чи працівником.
- Особиста особа вимагає унікальності соціального числа, яке, як ми вважаємо, кожна людина має лише один унікальний (він же є достатньо хорошим первинним ключем). (див. №1)
Пізніше ми вирішуємо зняти число 1: Якщо одного дня коледж вирішить, що Teacher
( Employee
підтип) також може бути Student
, беручи курси у вільний час, набагато складніше змінити дизайн бази даних, який може мати тисячі, мільйони, мільярди, мільйони записів, а не просто зміна логіки в коді: саме та частина, яка не дозволяла людині бути зареєстрованою як студентом, так і працівником.
(Це дуже неймовірно, але я нічого іншого зараз не можу придумати. Мабуть, це можливо).
Чому нас цікавлять правила ведення бізнесу в дизайні баз даних, а не в коді?
№ 1: Примітка через 7 років, приклад із реального життя:
я бачив уряд, де через помилку було видано копії виданих SSN: кілька людей, однакові SSN. Ті, хто розробляв оригінальну БД, безумовно, допустили помилку, не застосовуючи цього обмеження унікальності в базі даних. (а пізніше помилка в оригінальній програмі - кілька додатків, що використовують спільну базу даних, і не погоджуються, куди ставити, перевіряти та застосовувати обмеження? ...).
Ця помилка буде жити в системі, і вся система, розроблена після якої, покладається на базу даних оригінальної системи, на довгі багато років. Читаючи відповіді тут, я навчився застосовувати всі обмеження, якомога більше їх, мудро (а не наосліп) у базі даних, щоб представляти реальний фізичний світ там, наскільки я міг.