Лучшая практика - оба. База данных должна нести ответственность за обеспечение того, что ее собственное состояние является действительным, и программа должна гарантировать, что она не передает мусор в базу данных.
Недостатком является то, что вам приходится писать больше кода, и у вас есть минимальные дополнительные накладные расходы времени выполнения - ни одна из этих причин обычно не дает веских причин не делать этого.
Преимущество состоит в том, что база данных обеспечивает низкоуровневую достоверность, но программа может помочь пользователю вводить достоверные данные гораздо лучше, чем просто путем возврата ошибок из базы данных - она может вмешиваться раньше и предоставлять подсказки пользовательского интерфейса (например, некорректное окрашивание) текстовые поля красного цвета, пока они не будут заполнены правильно и т. д.)
- edit (дополнительная информация добавляется из комментариев) -
Во многих случаях разумным подходом является написание валидатора, управляемого данными, на каждом конце и использование общего файла данных (например, XML) для проверки. Если спецификация для проверки изменяется, вам нужно только отредактировать файл описания, и оба конца проверки будут обновлены синхронно. (без изменения кода).