DB2 Автоматически генерирует столбец / ГЕНЕРИРУЕТ ВСЕГДА плюсы и минусы последовательности

StackOverflow https://stackoverflow.com/questions/1026936

  •  06-07-2019
  •  | 
  •  

Вопрос

Раньше мы использовали 'ГЕНЕРИРУЕТСЯ ВСЕГДА' для генерации значений первичного ключа.Но теперь предлагается вместо использования 'GENERATED ALWAYS' использовать последовательность для заполнения значения первичного ключа.Как вы думаете, что может быть причиной такого изменения?Это просто вопрос выбора?

Более ранний код:

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER         NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE),
.
.
);

Теперь есть

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER ),
.
.
);

теперь при вставке сгенерируйте значение для TAB_P через последовательность.

Это было полезно?

Решение

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

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

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

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

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

Другие советы

Вероятно, это может быть для обработки идентификаторов в случае большого количества удалений в таблице.

Например: в случае идентичности, если ваши идентификаторы 1 2 3

Теперь, если вы удалите запись 3, ваша таблица будет иметь 1 2

И тогда, если вы вставите новую запись, идентификаторы будут 1 2 4

В отличие от этого, если вы не используете столбец идентификаторов и генерируете идентификатор с помощью кода, то после удаления для новой вставки вы можете вычислить идентификатор как max (id) + 1, поэтому идентификаторы будут в порядке 1 2 3

Я не могу думать ни о какой другой причине, почему столбец идентификаторов не должен использоваться.

Вот что я нашел на сайте publib:

Сравнение столбцов и последовательностей IDENTITY

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

Столбец идентификаторов имеет следующие характеристики:

  • Столбец идентификации может быть определен как часть таблицы только при создании таблицы.Как только таблица создана, вы не можете изменить ее, чтобы добавить столбец идентификации.(Однако существующие характеристики столбца идентификации могут быть изменены.)
  • Столбец идентификации автоматически генерирует значения для одной таблицы.
  • Когда столбец идентификации определяется как всегда генерируется, используемые значения всегда генерируются диспетчеры базы данных.Приложениям не разрешается предоставлять свои собственные значения во время модификации содержимого таблицы.

Объект последовательности имеет следующие характеристики:

  • Объект последовательности - это объект базы данных, который не привязан ни к одной таблице.
  • Объект последовательности генерирует последовательные значения, которые можно использовать в любом операторе SQL или Xquery.
  • Поскольку объект последовательности может использоваться любым приложением, существует два выражения, используемых для управления поиском следующего значения в указанной последовательности, и значение, сгенерированное до выполненного оператора.Предыдущее выражение значения возвращает наиболее недавно сгенерированное значение для указанной последовательности для предыдущего оператора в текущем сеансе.Следующее выражение значения возвращает следующее значение для указанной последовательности.Использование этих выражений позволяет использовать одно и то же значение для нескольких операторов SQL и Xquery в нескольких таблицах.

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

Я не знаю, почему кто-то когда-либо использовал столбец идентификации, а не последовательность. Последовательности выполняют то же самое и гораздо более просты. Столбцы идентификаторов представляют собой гораздо большую проблему, особенно если вы хотите выполнять выгрузку и загрузку данных в другие среды. Я не буду вдаваться во все различия, поскольку эту информацию можно найти в руководствах, но я могу вам сказать, что администраторы баз данных должны почти всегда участвовать в работе, когда пользователь хочет перенести данные из одной среды в другую, когда таблица с идентификатором участвует, потому что это может запутать пользователей. У нас нет проблем при использовании последовательности. Мы разрешаем пользователям обновлять любые объекты схемы, чтобы они могли изменять свои последовательности, если это необходимо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top