Проблема проектирования схемы точки продаж в приложении Django - PullRequest
0 голосов
/ 06 октября 2018

Из этих моделей (ниже) у меня возникла проблема проектирования при создании этого приложения, так как я не являюсь экспертом в области проектирования баз данных, поэтому я подумал о том, чтобы высказать некоторое мнение эксперта по этому вопросу. Позвольте мне объяснить эту проблему.

Как видите, существует модель SaleItem, которая содержит product_id в качестве внешнего ключа.Теперь возникают следующие проблемы:

  1. Если пользователь удалит продукт, который присутствует в таблице SaleItem, то это вызовет проблему нарушения целостности или каким-то образом, если мы разрешим удалить продукт, тогда отношение продукта будетперерыв, и мы не сможем выполнять запросы, относящиеся к продукту.

  2. Если пользователь обновляет имя продукта с А на В или меняет его цену, то
    будет влиять наПроданные предметы.

Я изо всех сил пытался объяснить сценарий, но если что-то осталось, спросите меня в комментариях.

Спасибо

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...