В каком месте лучше проверять валидацию данных, заносимых в БД?
Как можно ближе к данным, как можно дальше от клиента. Если получится, то средствами СУБД. Если их окажется мало, тогда средствами среднего слоя. В самом крайнем случае - средствами клиента.
Особенно оцените по достоинству, если клиентов к одной системе будет несколько - например, стандартный для рядового пользователя и продвинутый для администратора. Или десктопный для локальной сети и веб-интерфейс для удаленного доступа. Не придется одну и ту же логику реализовывать, а затем поддерживать в нескольких экземплярах. Не говоря уж о таких лазейках, как доступ к данным через родную консоль сервера или тот же Access, которым ограничения клиента совершенно безразличны.
Впрочем, как сказал
Sla, толково написанный клиент может упростить ситуацию. Например, если выбор пола на форме осуществляется радиокнопками "М" и "Ж", это лучше, чем дать возможность ввести произвольную литеру, а затем получить от сервера сообщение об ошибке. Но и в этом случае неплохо, если даже при ошибке клиента нижележащие слои сумеют отфильтровать ошибку и не пропустят заведомо дефектную транзакцию.
P.S. Если писать уж совсем корректную программу, необходимо учесть, что полов в настоящий момент известно уже не два, а четыре, и возможно появление новых. Так что дальновиднее делать выбор из списка.