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