Events, World news, Мир IT

Sequence как инструмент для реализации бизнес-логики

Sequence является общепринятой, и от этого, вполне очевидной функциональностью любых СУБД, реализовывая такие привычные механизмы обеспечения целостности, как уникальный ключ внутри таблицы.

Рассмотрим некоторые другие возможности, которые даёт этот «недорогой», с точки зрения потребления ресурсов СУБД, механизм.

Один из вариантов применения Sequence для «внешней» бизнес-логики.
Положим, есть некий аналог социальной или любой другой подобной, сети, где пользователи генерируют различные по своей природе события.

Например, сообщения друг другу, публичные высказывания, подписывания на других пользователей, статусы, и любые другие публичные формы контента.

При необходимости отслеживать разного рода сущности в единой временной последовательности, где требуется сквозная уникальность каждого события, а использование наносекунд как уникальных идентификаторов является по тем или иным причинам недопустимым, единственным решением остаётся применение одного Sequence для генерации значения в разных таблицах.

Тогда, к примеру, создаётся последовательность sq_event_id, и для разных сущностей, например, Comment и Like, создаются соответствующие поля Comment.event_id и Like.event_id, в которых Default значением указывается nextval(‘sq_event_id’).

При необходимости, можно выстроить индекс по этим полям, а у каждого пользователя сохранять тот event_id, который он «видел» в прошлый раз (User.viewed_event_id).

Теперь, когда требуется оперативно сформировать контент из последних произошедших изменений для пользователя, достаточно запросить из Like и Comment лишь те event_id, которые Больше последнего сохранённого в User.viewed_event_id.

СУБД при этом задействует соответствующие индексы по Like.event_id и Comment.event_id, если Пользователь заходил настолько недавно, чтобы план запроса посчитал выгодным использование индексов по сравнению с полным просмотром таблиц.

Таким образом, использование одного и того же Sequence как значение поля по умолчанию одновременно для нескольких таблиц, гарантирует сквозную временную цепочку событий разного рода, и при этом обеспечивает простой и безопасный механизм создания уникальных идентификаторов для разных сущностей, не требуя при этом никаких дополнительных накладных расходов.

Добавить комментарий