В настоящее время я создаю систему ETL для загрузки хранилища данных из транзакционной системы. Фактором моей таблицы фактов является уровень транзакции. Чтобы не загружать дублирующиеся строки, я поместил первичный ключ в таблицу фактов, который является идентификатором транзакции.
Я столкнулся с проблемой отмены транзакций. В транзакционной базе данных это выполняется через статус, который я выбираю, и я могу определить, выполняется ли транзакция, или выполнить откат, чтобы я мог загрузить аннулирование. грести на складе. Однако строка обращения будет иметь тот же идентификатор транзакции, и поэтому я получаю нарушение первичного ключа.
Сейчас я решил эту проблему, отменив первичный ключ, поэтому транзакция с идентификатором 1 будет платежом, а транзакция с идентификатором -1 (только на складе) будет сторнировать.
Я рассмотрел альтернативу генерации столбца BIT, где 0 - нормальное значение, а 1 - обратный, с последующим назначением PK идентификатора транзакции и столбца BIT.
Мой вопрос: это хорошая практика, и кто-нибудь еще сталкивался с чем-то подобным? Для справки, это система обработки платежей, поэтому значения не будут изменены, поэтому будут происходить только транзакции и откаты.