在这些模型中(下),由于我不是数据库设计专家,因此在创建此应用程序时遇到了设计问题,因此我想就此问题采取一些专家意见。让我解释一下这个问题。
如您所见,有一个SaleItem模型,其中包含product_id作为外键。现在的问题是..
如果用户删除SaleItem表中存在的产品,则将引发完整性违规问题或某种方式,如果我们允许删除产品,则产品关系将中断,我们将无法运行查询与产品有关。
如果用户将产品名称从A更新为B或更改了价格,则为
将影响已售物品。
我尽力解释了这种情况,但是如果有什么遗漏,请在评论中问我。
谢谢
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)