Как хранить историю продуктов и цен в базе данных продуктов Django?
В проекте Django у меня есть одна таблица продуктов DB, содержащая различные поля, включая поля product mspr и current_price. Для каждого продукта в базе данных поле current_price периодически автоматически обновляется, чтобы обнаружить изменения.
Моя проблема заключается в том, что я хочу также хранить исторические данные о цене каждого продукта при каждом изменении, но я не уверен, как реструктурировать эту текущую однотабличную БД продуктов ниже.
class Product(models.Model):
name = models.CharField(max_length=250)
manufacturer = models.CharField(max_length=250)
msrp = models.DecimalField(null=True, max_digits=10, decimal_places=2)
current_price = models.DecimalField(null=True, max_digits=10, decimal_places=2)
# and other product data fields
Я уверен, что мне нужно создать вторую таблицу, поэтому в БД будет две таблицы, как показано ниже. Но кроме курса по БД, который я проходил много лет назад в колледже, у меня нет большого опыта в создании баз данных, поэтому, пожалуйста, кратко объясните, как будет работать отношение первичный/внешний ключ только для этого случая использования на примере ниже. Это должно быть отношение один (продукт) ко многим (производственные исторические изменения цен), правильно?:
class Product(models.Model):
name = models.CharField(max_length=250)
manufacturer = models.CharField(max_length=250)
# and other product data fields
class ProductPrice(models.Model):
msrp = models.DecimalField(null=True, max_digits=10, decimal_places=2)
current_price = models.DecimalField(null=True, max_digits=10, decimal_places=2)
price_change_date = models.DateTimeField()
product = models.ForeignKey(Product, on_delete=models.CASCADE)
Кроме того, в моей текущей структуре БД с одной таблицей я обновляю (.update()) поле current_price напрямую каждый раз, когда текущая цена изменяется в коде Django. Как это будет работать с новой структурой БД в плане добавления изменений цены и даты в таблицу ProductPrice каждый раз, когда изменяется текущая цена?