Я пытаюсь преобразовать таблицу, чтобы начать использовать естественные ключи вместо суррогатных ключей, поэтому прежде чем объяснять, что я пытаюсь сделать, я объясню, как настроена база данных.
-- FOO_BAR TABLE
id NUMBER(10) PRIMARY KEY, -- A sequence and a trigger is set up to this column.
uuid CHAR(36) UNIQUE
Я пытаюсь сделать следующее:
- Столбец
id
должен быть удален; - Столбец
uuid
должен быть первичным ключом; - Должен быть создан новый столбец с именем
creation_order
, и он должен иметь те же значения, что и id
, но это не будет первичный ключ.
Таким образом, после миграциитаблица должна выглядеть следующим образом:
-- FOO_BAR TABLE
creation_order NUMBER(10) UNIQUE GENERATED AS IDENTITY,
uuid CHAR(36) PRIMARY KEY
Проблема, которая заставила меня создать этот вопрос, заключается в том, что я использую H2, и я должен попытаться создать сценарии миграции, максимально совместимые с SQL, поскольку Oracle позволяет мне,и поскольку GENERATED AS IDENTITY
является чистым SQL и теперь поддерживается Oracle DB, я должен попытаться придерживаться этого.
Итак, мой первый вопрос:
В H2 яне может следовать этому подходу, так как GENERATED AS IDENTITY
всегда будет неявно создавать ограничение PRIMARY KEY
, так какуказано в Документация по базе данных H2 :
Столбцы идентификатора и автоинкремента - это столбцы с последовательностью по умолчанию.Столбец, объявленный как столбцы идентификаторов, неявно является столбцом первичного ключа этой таблицы (в отличие от столбцов с автоинкрементом).
Так что для H2 мне нужно использовать AUTO_INCREMENT
.
Я искал документацию по Oracle DB и не нашел никакой информации о первичных ключах для типа идентификации, означает ли это, что Oracle GENERATED AS IDENTITY
работает так же, как H2 AUTO_INCREMENT
?
И если ответ положительный и GENERATED AS IDENTITY
отличается для каждой базы данных, кто-нибудь имеет представление о том, как использовать один и тот же сценарий миграции для обеих баз данных, или это невозможно?
Спасибо!