Из этих моделей (ниже) у меня возникла проблема проектирования при создании этого приложения, так как я не являюсь экспертом в области проектирования баз данных, поэтому я подумал о том, чтобы высказать некоторое мнение эксперта по этому вопросу. Позвольте мне объяснить эту проблему.
Как видите, существует модель SaleItem, которая содержит product_id в качестве внешнего ключа.Теперь возникают следующие проблемы:
Если пользователь удалит продукт, который присутствует в таблице SaleItem, то это вызовет проблему нарушения целостности или каким-то образом, если мы разрешим удалить продукт, тогда отношение продукта будетперерыв, и мы не сможем выполнять запросы, относящиеся к продукту.
Если пользователь обновляет имя продукта с А на В или меняет его цену, то
будет влиять наПроданные предметы.
Я изо всех сил пытался объяснить сценарий, но если что-то осталось, спросите меня в комментариях.
Спасибо
class Product(models.Model):
class Meta:
db_table = 'product'
name = models.CharField(max_length=255, blank=False, null=False)
franchise = models.ForeignKey(Franchise, default=None, on_delete=models.DO_NOTHING)
category = models.CharField(max_length=255, default=None, blank=False, null=False)
supplier = models.CharField(max_length=255, default=None, blank=False, null=False)
company = models.CharField(max_length=255, default=None, blank=False, null=False)
purchase_price = models.DecimalField(max_digits=10, decimal_places=2)
sale_price = models.DecimalField(max_digits=10, decimal_places=2, blank=False, null=False, default=None)
discount = models.DecimalField(max_digits=10, decimal_places=2, default=0)
units_in_stock = models.IntegerField(blank=False, null=False)
manufacture_date = models.DateField(blank=False, null=False)
expire_date = models.DateField()
product_code = models.CharField(max_length=20,unique=True, blank=True, null=True)
class Sale(models.Model):
class Meta:
db_table = 'sales'
franchise = models.ForeignKey(Franchise, on_delete=models.DO_NOTHING)
amount = models.DecimalField(max_digits=20, decimal_places=2, default=0)
paid = models.DecimalField(max_digits=20, decimal_places=2, default=0)
discount = models.DecimalField(max_digits=20, decimal_places=2, default=0)
balance = models.DecimalField(max_digits=20, decimal_places=2, default=0)
class SaleItem(models.Model):
class Meta:
db_table = 'sale_items'
sale = models.ForeignKey(Sale, on_delete=models.CASCADE)
product_id = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.IntegerField(blank=False, null=False, default=None)
total_price = models.DecimalField(max_digits=20, decimal_places=2, default=0.00)