У меня проблема с дизайном базы данных и отношениями, и меня интересуют возможные циклические ссылки.
Чтобы привести пример, у Джека есть в запасе Лекарства A, B и C. Лекарства A и B имеют AI_ active_redredient, а лекарство C имеет AI2 active_ingredient.
Джек идет к врачу, который прописывает ему AI1. Для объекта «Рецепт» безразлично, принимает ли он лекарство А или Б.
Вот пример кода:
class ActiveIngredient(models.Model):
...
class Medicine(models.Model):
quantity = models.IntegerField()
active_ingredient = models.ForeignKey("ActiveIngredient", on_delete=models.CASCADE)
class Person(models.Model):
...
class PersonStock(models.Model):
customer = models.ForeignKey("Person", on_delete=models.CASCADE)
medicine = models.ForeignKey("Medicine", on_delete=models.CASCADE)
expiration_date = models.DateField()
class Prescription(models.Model):
...
quantity = models.IntegerField()
Какое лучшее решение для моделирования этих отношений?
Изменение рецепта на это:
class Prescription(models.Model):
...
customer = models.ForeignKey("Person", on_delete=models.CASCADE)
active_ingredient = models.ForeignKey("ActiveIngredient", on_delete=models.CASCADE)
quantity = models.IntegerField()
Мне кажется неправильным, если учесть, что класс PersonStock уже связывает человека и лекарство.