Ответственность за реализацию на уровне приложения и СУБД ("уровень базы" и "уровень приложения")
Primary tabs
Forums:
Если ваше приложение использует СУБД, то даже в случае если вы реализуете какие-то проверки на уровне приложения (например, в php-коде) полезно дублировать их на уровне СУБД или вообще полностью делегировать эти проверки возможностям СУБД (если возможно).
Это позволит:
- Упростить логику кода приложения (если вы полностью делегируете какие-то задачи на уровень СУБД)
- Продублировать ряд проверок (повысить надёжность -- если вы указываете ограничения в схеме БД)
Примеры:
- Если требуется удалять данные из таблицы связи, после удаления одной из сущностей, между которыми эта связь и описывалась, то можно воспользоваться каскадным удалением устаревших связей в mysql -- эту задачу вообще полностью можно возложить на СУБД, не проводя никаких проверок в приложении.
- Используйте ограничения базы данных (напр, на уникальность набора значений в рамках таблицы) -- если вдруг в приложении проверка пропустит некорректное значение (из-за неверной реализации логики программистом), то СУБД все равно не даст записать эти данный, создав исключительную ситуацию (аварийное завершение задачи, сообщение об ошибке).
Для начала вы должны ещё в приложении сделать проверку, прежде чем писать данные, но если есть возможность продублировать эту логику в самой схеме БД (т.е. в коде создания таблиц), то делать это надо обязательно.
Вывод: когда решаете какую-то задачу связанную с логическими ограничениями, или особенностью хранения данных -- для начала выясните: не умеет ли ваша СУБД уже делать то, что вы ещё только собираетесь запрограммировать на уровне приложения.
- Log in to post comments
- 2697 reads