Pull to refresh

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 как значение поля по умолчанию одновременно для нескольких таблиц, гарантирует сквозную временную цепочку событий разного рода, и при этом обеспечивает простой и безопасный механизм создания уникальных идентификаторов для разных сущностей, не требуя при этом никаких дополнительных накладных расходов.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.