Как правильно настроить шаблон Entity Attribute Value в django?
У меня есть модель продукта:
class Product(models.Model):
title = models.CharField(max_length=255)
description = models.TextField(null=True, blank=True)
category = models.ForeignKey('Category', on_delete=models.CASCADE)
price = models.FloatField()
discount = models.IntegerField() # stands for percentage
count = models.IntegerField()
priority = models.IntegerField(default=0)
brand = models.ForeignKey('Brand', on_delete=models.SET_NULL, null=True, blank=True)
tags = models.ManyToManyField(Tag, blank=True)
def __str__(self):
return self.title
Теперь я хочу реализовать паттерн entity attribute value, поскольку разные продукты могут иметь разные характеристики. Я понял традиционный способ EAV. Но я прочитал в Википедии, что в postgresql есть тип столбцов jsonb, и это позволяет повысить производительность в тысячу и более раз по сравнению с традиционным дизайном таблиц EAV. Моя база данных в postgresql. Так как же лучше всего реализовать EAV (или динамические отношения набора с атрибутами)? Должен ли я просто добавить, например:
class ProductVariant(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
specifications = models.JSONField()
А также я хочу обрабатывать цену и количество (на складе) по-разному для каждого варианта, допустим, есть 10 туфель с размером 10 и цветом красный, цена которых 100 долларов, и 2 туфли с размером 9 и цветом синий, цена которых 120 долларов.