0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: субд, базы данных, системы управления базами данных, антипаттерны, генерирование идентификаторов, сквозной идентификатор</p>
1
<p>Теги: субд, базы данных, системы управления базами данных, антипаттерны, генерирование идентификаторов, сквозной идентификатор</p>
2
<p>Хочу поговорить о довольно распространённой ошибке, с которой сталкиваются даже опытные разработчики. Например, в проекте нужно сделать<strong>сквозной идентификатор</strong>для нескольких таблиц.</p>
2
<p>Хочу поговорить о довольно распространённой ошибке, с которой сталкиваются даже опытные разработчики. Например, в проекте нужно сделать<strong>сквозной идентификатор</strong>для нескольких таблиц.</p>
3
<p>Не буду описывать весь спектр вариантов. Однако худшее, что можно придумать -сделать<strong>view</strong>, в котором будут объединены все эти таблицы, а потом при генерации нового<strong>идентификатора</strong>делать выборку вида:</p>
3
<p>Не буду описывать весь спектр вариантов. Однако худшее, что можно придумать -сделать<strong>view</strong>, в котором будут объединены все эти таблицы, а потом при генерации нового<strong>идентификатора</strong>делать выборку вида:</p>
4
<p>Затем, например, прибавлять к полученному результату 1 или ваш шаг изменения номера.</p>
4
<p>Затем, например, прибавлять к полученному результату 1 или ваш шаг изменения номера.</p>
5
<p><strong>К каким проблемам может привести такая, на первый взгляд, простая, а значит, возможно, и наиболее эффективная идея?</strong></p>
5
<p><strong>К каким проблемам может привести такая, на первый взгляд, простая, а значит, возможно, и наиболее эффективная идея?</strong></p>
6
<p>Смотрите, как только ваше приложение дорастёт до небольшой конкуретности запросов на вставку, для которых нужно будет генерировать новые идентификаторы, вы увидите неприятные последствия своего решения: 1) у вас могут возникнуть дубликаты идентификатора; 2) если вы сделали защиту от дубликатов, могут возникнуть ошибки при попытке вставить одинаковый идентификатор.</p>
6
<p>Смотрите, как только ваше приложение дорастёт до небольшой конкуретности запросов на вставку, для которых нужно будет генерировать новые идентификаторы, вы увидите неприятные последствия своего решения: 1) у вас могут возникнуть дубликаты идентификатора; 2) если вы сделали защиту от дубликатов, могут возникнуть ошибки при попытке вставить одинаковый идентификатор.</p>
7
<h2>Какие есть варианты?</h2>
7
<h2>Какие есть варианты?</h2>
8
<p>Для генерации сквозного идентификатора лучшим выбором будет<strong>использование последовательности</strong>. Во многих СУБД (например, PostgreSQL, Oracle, MS SQL) для этого предусмотрен отдельный объект. Работа с такими объектами поддерживается на уровне СУБД и существуют специальные средства получения нового элемента, так что вы будете надёжно защищены от ситуации, когда параллельные запросы, вдруг, получают одинаковый следующий идентификатор.</p>
8
<p>Для генерации сквозного идентификатора лучшим выбором будет<strong>использование последовательности</strong>. Во многих СУБД (например, PostgreSQL, Oracle, MS SQL) для этого предусмотрен отдельный объект. Работа с такими объектами поддерживается на уровне СУБД и существуют специальные средства получения нового элемента, так что вы будете надёжно защищены от ситуации, когда параллельные запросы, вдруг, получают одинаковый следующий идентификатор.</p>
9
<p><em>Узнать больше можете на наших<a>курсах по СУБД</a>. Набор в группу уже начался, не пропустите!</em></p>
9
<p><em>Узнать больше можете на наших<a>курсах по СУБД</a>. Набор в группу уже начался, не пропустите!</em></p>
10
10