Наличие вашего уровня данных для обеспечения согласованности данных через ограничения помогает гарантировать, что ваши данные остаются согласованными и обеспечивает дешевую проверку ошибок во время выполнения в вашем приложении.
Если вы считаете, что ограничения бесполезны, у вас либо небольшая / не критическая система, либо вы упускаете огромную возможность улучшить качество вашей системы. Это не может быть преуменьшено.
Возможны следующие варианты: выбор другой СУБД, переосмысление собственной системы метаданных или ручное управление ограничениями. Ручное управление в запросах без системы метаданных быстро становится невозможным для правильного обслуживания и аудита, поскольку сложность схемы / системы растет и излишне усложняет развивающуюся схему.
Моя рекомендация - выбрать другую СУБД.
Проверка согласованности намного сложнее, чем вы думаете. Например, MySQL использует согласованность чтения транзакций, что означает, что значения, по которым вы проверяете, могут не совпадать со значениями в области другой транзакции. Схематичность согласованности для одновременного доступа очень трудно понять правильно, если она не привязана напрямую к уровню данных.
Когда все сказано и сделано, даже при скромных усилиях, приложенных к ручной проверке, вероятным результатом будет то, что вы все равно сможете управлять грузовиком в поворотах, которые вы не рассмотрели или допустили ошибку в формирования.
На ваш вопрос NOT NULL ... Очевидные требования к полям данных являются хорошей отправной точкой. Вот несколько вещей, которые следует учитывать при определении обнуляемости столбцов.
Это дает гарантию, которая может быть очень полезна при написании запросов. Различные объединения могут использовать условия NULL, чтобы показать несоответствие строки таблицы отдельно от значения NULL, которое нельзя предположить, если условие допускает пустые значения. (Если разрешены значения NULL, совпадение может означать, что строка не соответствует или строка соответствует, но значение столбца равно нулю.)
Использование NOT NULL также помогает определить правила для простых запросов, соответствующих значениям. Поскольку вы не можете сказать «КОГДА value1 = value2», если и value1, и value2 равны NULL, результат оценки по-прежнему ложен.