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