Везде, где вы решите поместить проверку перед вставкой в базу данных, вы должны ловить эти вещи.
Процесс проверки должен проходить в одном месте и только в одном месте. В зависимости от структуры вашего приложения:
- Это процедурный или объектно-ориентированный?
- Если объектно-ориентированный, то используете ли вы шаблон Active Record, Gateway или Data Mapper для обработки сопоставления вашей базы данных?
- Есть ли у вас доменные объекты, которые отделены от уровня абстракции базы данных?
Тогда вам нужно будет решить, где разместить эту логику в вашем приложении.
В моем случае, доменные объекты содержат логику проверки и функции с сопоставителями данных, которые фактически выполняют функции вставки и обновления базы данных. Поэтому, прежде чем я попытаюсь сохранить информацию в базе данных, я подтверждаю, что есть допустимые значения.