我想就如何进一步开发我的模型和表格提出一些建议。
此模型目前允许我保存以m2m关系链接到疾病和状态的选项。如果我想保存结果以及它与状态,疾病和选项相关的相关价值,我该如何进一步建立这个?
例如,结果将具有与之关联的特定选项。选项将是一个特定的状态,它将具有与之相关的特定疾病。对于与特定选项相关联的每个结果,都会为其分配一个值。
我认为我需要一个中间表,因为用户将分配给它的结果值。我很困惑如何将结果与选项联系起来,因为选项是m2m。
class Option(models.Model):
disease = models.ForeignKey(Disease)
option = models.CharField(max_length=300)
class Outcome(models.Model):
disease = models.ForeignKey(Disease)
outcome = models.CharField(max_length=200)
class DiseaseState(models.Model):
state = models.CharField(max_length=300)
disease = models.ForeignKey(Disease)
option = models.ManyToManyField(Option, blank=True)
#outcome = models.ManyToManyField(Outcome, blank=True) #will adding this solve my use case? It does not seem like outcome will link to option.
更新
为了清楚起见:疾病有疾病状态。 DiseaseState有一个选项。期权有结果。结果具有分配给它的值。 Option和Outcome都是列表,用户可以从列表中选择。
答案 0 :(得分:1)
我不完全确定我会关注,但你有几个选择。
第一种是在Outcome和DiseaseState之间手动创建中间表
class DiseaseStateOutcome(models.Model):
unique_together = (('disease_state', 'outcome'),)
disease_state = models.ForeignKey(DiseaseState)
outcome = models.ForeignKey(Outcome)
#option foreign key, or m2m relation to option here
您的另一个选择是,如果您只想要一个与疾病状态/结果对相关的选项,那就是将一个ForeignKey从Outcome到Option。
class Outcome(models.Model):
#Your other fields here
option = models.ForeignKey(Option)
答案 1 :(得分:1)
因为我看不到你的整个班级结构(疾病?,状态?)我不能太具体,但我会尝试谈谈数据库设计。
我有一张桌子可以容纳人,我想知道他们的名字,以及他们驾驶的车型:
tbl_person
id int(11)
name varchar(32)
现在我可以在人员表中放置一个汽车列,但有些人驾驶不止一辆汽车。因此,我将制作一张带有汽车的桌子,并将每辆车与一个人连接(或关联)。
tbl_car
id int(11)
car_name varchar(32)
person_id int(11)
这样汽车表中的每一行都会有一个person.id。这是Foreign Key
关系。
现在问题是我的汽车表中会有一堆列有重复数据的列,因为那里会有很多丰田,例如。
如果我把每辆车都放在一张桌子上,而另一个人在另一张桌子上加上加入表,那会更好。
所以我现在有tbl_person_car
:
id int(11)
car_id int(11)
person_id int(11)
请注意,此表格中的每一行只包含两个Foreign Keys
或FKs
。
此连接表包含无,但执行连接所需的FKs
非常重要。如果不这样做会危及整个数据库的参照完整性。
当然,只要您在模型中使用ManyToMany字段,Django就会为您构建此连接表。所以你永远不必担心它(这很好,因为一个错误的举动会破坏一切)。
好的,对不起,如果那太初级了,但我希望它能解释一下,如果您认为您的联接表需要更多数据,那么您可能会遇到设计问题。
我建议您对模型正在做的事情感到满意,并且不要太担心数据库。当我开始使用Django时,我从DB方面思考的太多了,它引起了一些痛苦。
所以在你的情况下,问自己,“疾病是什么?”您可能会说“疾病有结果”。 具有关系对于理解OO设计至关重要。
它是什么,例如有选项?它是疾病,患者,结果吗?无论它是什么,那么这可能是结果所属的模式。
这有意义吗? 我希望它有所帮助。