У меня есть таблица в базе данных, в которой хранятся товары для покупки (назовем таблицу Product). Необходимо отслеживать изменения каждого продукта. У меня есть 2 идеи для управления версиями записей.
Сначала необходимо создать новую запись в Product, скопировав продукт и переопределив поля, которые отличаются, и сохранить ссылку в записи для более старой и более новой версии. В этом случае запись в таблице Product доступна только для чтения, за исключением поля, в котором указано, заархивирован ли продукт или нет.
Второй - создание 2 таблиц: Product и ArchivisedProduct. Записи Продукта доступны для редактирования, но для каждого изменения создается новая запись в ArchivisedProduct, в которой хранятся только различия (поэтому, кроме идентификатора, все поля могут быть обнуляемыми), а поля таблиц содержат ссылки друг на друга.
Делать Вы знаете какой-нибудь инструмент, который может управлять этим процессом и хорошо работает с Node.js, Prisma, PostgreSQL и Apollo? Для такого использования рекомендовался winston / papertrail, но когда я читаю документы, создается впечатление, что он создает только журналы.
Примерная структура базы данных для большей очистки: 1-й пример:
type Product {
id: Int! @id
name: String!
price: Float!
archived: Boolean!
productVersionIds: [Product]!
}
2-й пример:
type Product {
id: Int! @id
name: String!
price: Float!
archivisedProductIds: [ArchivisedProduct]! @relation(name: "ProductToArchiva")
}
type ArchivisedProduct {
id: Int! @id
name: String
price: Float
product: Product! @relation(name: "ProductToArchiva")
}