1

I'd like some advice on how to further develop my models and tables.

This model currently allows me to save option that links to disease and state in a m2m relationship. How would I further build this out if I wanted to save outcome and it's associated value that links to state, disease, AND option?

For example, outcome will have specific options associated to it. Options will a specific state which will have a specific disease linked to it. For every outcome linked to specific options, there will be a value assigned to it.

I think I need an intermediate table because of the outcome value the user will assign to it. I'm confused as how to link outcome to option,since option is 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.

Update:

For some clarity: A Disease has a DiseaseState. A DiseaseState has an Option. An Option has Outcomes. Outcome has a value assigned to it. Both Option and Outcomes are lists and the user gets to pick from the list.

4

2 回答 2

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)
于 2013-08-22T17:53:00.403 回答
1

因为我看不到你的整个类结构(疾病?状态?)我不能太具体,但我会试着谈谈数据库设计。

我有一张可以容纳人的桌子,我想知道他们的名字,以及他们开什么样的车:

tbl_person
id int(11)
name varchar(32)

现在我可以在 person 表中放置一个汽车列,但有些人驾驶不止一辆车。所以我会制作一张桌子,里面有汽车,并将每辆车与一个人联系起来(或关联)。

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 Keysor FKs。这个连接表只包含执行FKs连接所需的内容,这一点非常重要。不这样做会危及整个数据库的引用完整性。

当然,只要您在模型中使用 ManyToMany 字段,Django 就会为您构建这个连接表。所以你永远不必担心它(这很好,因为一个错误的举动可能会毁掉一切)。

好的,对不起,如果这太简单了,但我希望它能解释如果你认为你的连接表需要更多的数据,那么你的设计可能有问题。

我建议对你的模型所做的事情感到满意,不要太担心数据库。刚开始使用 Django 的时候,从 DB 方面考虑的太多了,造成了一些痛苦。

所以在你的情况下,问问自己,“疾病有什么?” 你可能会说“疾病结果”。在 OO 设计中,有一个关系对于理解是至关重要的。

它是什么,例如,有一个选项?它是一种疾病、患者、结果吗?不管它是什么,那可能就是一个结果所属的模型。

这有意义吗?我希望它有所帮助。

于 2013-08-22T17:56:28.417 回答