DB2 Auto Generated Column / GENERATED ВСЕГДА плюсы и минусы последовательности - PullRequest
4 голосов
/ 22 июня 2009

Ранее мы использовали ' 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 через последовательность.

Ответы [ 4 ]

5 голосов
/ 22 июня 2009

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

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

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

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

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

0 голосов
/ 15 октября 2015

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

0 голосов
/ 15 июля 2009

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

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

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

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

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

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

  • Объект последовательности представляет собой базу данных объект, который не связан ни с кем таблица.
  • Объект последовательности генерирует последовательные значения, которые могут быть использованы в любой оператор SQL или XQuery.
  • Поскольку можно использовать объект последовательности по любому приложению, есть два выражения, используемые для управления поиск следующего значения в указанная последовательность и значение генерируется до утверждения выполняется. ПРЕДЫДУЩАЯ ЦЕННОСТЬ выражение возвращает самое последнее сгенерированное значение для указанного последовательность для предыдущего утверждения в текущем сеансе. Следующий Выражение VALUE возвращает следующий значение для указанной последовательности. Использование этих выражений позволяет одно и то же значение для нескольких Операторы SQL и XQuery в несколько столов.

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

0 голосов
/ 22 июня 2009

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...