Ответственность за реализацию на уровне приложения и СУБД ("уровень базы" и "уровень приложения")

Если ваше приложение использует СУБД, то даже в случае если вы реализуете какие-то проверки на уровне приложения (например, в php-коде) полезно дублировать их на уровне СУБД или вообще полностью делегировать эти проверки возможностям СУБД (если возможно).

Это позволит:

  1. Упростить логику кода приложения (если вы полностью делегируете какие-то задачи на уровень СУБД)
  2. Продублировать ряд проверок (повысить надёжность -- если вы указываете ограничения в схеме БД)

Примеры:

  • Если требуется удалять данные из таблицы связи, после удаления одной из сущностей, между которыми эта связь и описывалась, то можно воспользоваться каскадным удалением устаревших связей в mysql -- эту задачу вообще полностью можно возложить на СУБД, не проводя никаких проверок в приложении.
  • Используйте ограничения базы данных (напр, на уникальность набора значений в рамках таблицы) -- если вдруг в приложении проверка пропустит некорректное значение (из-за неверной реализации логики программистом), то СУБД все равно не даст записать эти данный, создав исключительную ситуацию (аварийное завершение задачи, сообщение об ошибке).

    Для начала вы должны ещё в приложении сделать проверку, прежде чем писать данные, но если есть возможность продублировать эту логику в самой схеме БД (т.е. в коде создания таблиц), то делать это надо обязательно.

Вывод: когда решаете какую-то задачу связанную с логическими ограничениями, или особенностью хранения данных -- для начала выясните: не умеет ли ваша СУБД уже делать то, что вы ещё только собираетесь запрограммировать на уровне приложения.