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