我们的数据库模式设计存在问题,我想找出最简洁的解决方法。这三个模型在这些简化的 Django 模型类中定义:
class Animal(Model):
name = CharField()
infusion_rate = FloatField()
infusate = ForeignKey(Infusate) # but with specific tracer concentrations?
class Infusate(Model):
name = CharField()
tracers = ManyToManyForeignKey(Tracer)
class Tracer(Model):
name = CharField()
目前,我们有一个
through
模型:Infusate
M:M 关系,添加了 Tracer
浮动字段:concentration
但我们需要将动物模型与单个输注物联系起来,但其多个示踪剂中的每一个都有特定的浓度。换句话说,我如何将动物与单个输液相关联,但具有属于该输液的特定浓度的多个示踪剂?
我想我可以向
class InfusateTracer(Model):
infusate = ForeignKey(Infusate)
tracer = ForeignKey(Tracer)
concentration = FloatField()
添加一个字段,并使用
InfusateTracer
链接到该字段。我们称之为 Animal
,所以:animal
但是如何强制
class InfusateTracer(Model):
infusate = ForeignKey(Infusate)
tracer = ForeignKey(Tracer)
concentration = FloatField()
animal = IntegerField()
模型中
infusate
和 animal
字段之间的关系为 M:1 (即 InfusateTracer
永远不会与多个不同的 InfusateTracer.animal
值同时出现(但多个 InfusateTracer.infusate
)值))?我可以使用某种独特的约束来强制执行吗?从不同的角度来看,我可以创建一个 AnimalTracer 链接/通过模型,但随后我在检索与动物相关的单个唯一输液名称时也会遇到同样的困难。
试图找出保持数据完整性的最优雅的解决方案正在融化我的大脑。
InfusateTracer.tracer
字段放在
animal
中,因为我们已经可以从 InfusateTracer
动物字段中获取信息。相反,如果您希望一只动物只有一个输液记录,您的模型应该如下所示。infusate