В соответствии с Widor, но я могу также добавить:
В идеале ваше приложение должно быть структурировано таким образом, чтобы существовал отдельный уровень данных, который отделяет остальную часть вашего кода от базы данных и логику его реализации.
В системах с высоким трафиком вы в идеале захотите ограничить объем данных, передаваемых назад и вперед между базой данных и вашим кодом, поэтому проверка данных должна выполняться вашим слоем данных ПЕРЕД передачей их в вашу базу данных. Именно здесь вы можете вызвать значимое исключение для вашей бизнес-логики.
Данные объекта, представленные слоем данных, не должны иметь никакого отношения к тому, что фактически хранится в базе данных или в ней. Например, он может представлять класс объектов данных, который на самом деле представляет собой совокупность данных, хранящихся в нескольких таблицах.
Сам уровень данных может быть структурирован таким образом, что он может обрабатывать различные реализации базы данных.
В прошлом я использовал фабричный шаблон, который позволял мне переключаться между SQL, базами данных MySQL, хранилищем файлов XML и скомпилированными тестовыми данными в соответствии с требованиями во время выполнения без необходимости перекомпиляции.
редактировать
Уровень данных вашего приложения - это интерфейс между кодом вашего приложения, например, бизнес-логика и графический интерфейс, и ваша база данных.
Бизнес-логика вызовет уровень данных для обновления базы данных вашей строкой.
В вашем примере слой данных содержит вашу функцию обновления.
Вы можете проверить строку, обрезать ее, если она слишком длинна, а затем обновить базу данных (например, с помощью вызова хранимой процедуры или прямой записи) внутри этой функции.
В действительности у вас будет много строк, которые должны быть ограничены одной и той же длиной, поэтому желательно, чтобы проверка выполнялась отдельной функцией для сохранения дублирующего кода.
Также вы можете проверить / усечь строку и уведомить об этом пользователя / вызывающий код без записи данных в базу данных.
По сути, это выполняется кодом уровня данных вашего приложения, который, например, может быть инкапсулирован в библиотеке классов / dll и не оставлен в базе данных для обработки или бизнес-логики (кроме как для реагирования на любое событие / ответ на ошибку). покормили).