Я высоко ценю ваш вопрос, так как я глубоко убежден, что правила по умолчанию должны быть реализованы на стороне кода, а не на стороне базы данных, и это по очень простой причине: когда пользователи являются теми, кто инициирует Изменения базы данных (INSERTS, SELECTS и UPDATES), эти изменения должны интегрировать все бизнес-правила, а значения по умолчанию в основном являются бизнес-правилами:
- Нет счета без номера счета
- Строка счета-фактуры отсутствует без количества, а ноль или ноль недопустимы
- Нет входящей почты без даты получения
- и т.д.
Мы решили несколько лет назад избавиться от всех этих артефактов «на стороне базы данных», таких как «не ноль», «(не) разрешать пустые строки» и другие приемы «значения по умолчанию», и это прекрасно работает , Аргументы в пользу значения по умолчанию в основном относятся к своего рода принципу «безопасности» («делайте это на стороне базы данных, потому что вы забудете об этом на стороне кода / ваш язык для этого не создан / это легче сделать») на стороне базы данных "), что не имеет никакого смысла, если вы решили не реализовывать какое-либо значение по умолчанию на стороне базы данных: просто проверьте, правильно ли реализованы ваши бизнес-правила при отладке.
За последние 2 года никто в команде никогда не думал об объявлении значения по умолчанию в таблице. Я предполагаю, что наш младший стажер даже не знает о чем-то, что называется "значением по умолчанию".
РЕДАКТИРОВАТЬ: перечитывая некоторые ответы здесь, мой последний комментарий: сделайте это с любой стороны, будь то БД или код, но сделайте свой выбор и сделайте это только с одной стороны! Нет ничего более опасного, чем иметь такие элементы управления с обеих сторон, потому что в конечном итоге (1) вы никогда не узнаете, действительно ли обе стороны реализуют одно и то же правило, а это означает, что (2) проверка правил будет означать проверку обеих сторон, что может реально стать беспорядком! Наихудшая ситуация, конечно, когда одна часть работы выполняется на стороне базы данных (т.е. правила, которые были определены при создании базы данных), а другая часть (то есть новые идентифицированные правила) выполняется на стороне клиента ... кошмар ....