您将如何建模此数据库关系?

时间:2009-07-22 03:05:08

标签: python database django database-design

我在django中建模数据库关系,我想有其他意见。这种关系是一种两对多的关系。例如,患者可以有两名医生:主治医师和初级医生。医生显然有很多病人。

应用程序确实需要知道哪一个是哪个;此外,存在一个患者的主治医师可以是另一个患者的主要医生的情况。最后,参加和初级通常是相同的。

起初,我正在考虑从患者台上的两张外键进入医生表。但是,我认为django不允许这样做。此外,在第二个想法,这实际上是一个很多(两个)到多个关系。

因此,如何在保持与患者相关的医生类型的同时,与django建立这种关系?也许我需要将医生类型存储在多对多关联表中?

谢谢, 皮特

3 个答案:

答案 0 :(得分:10)

这样的事情怎么样:

class Patient(models.Model):
    primary_physician = models.ForeignKey('Physician', related_name='primary_patients')
    attending_physicial = models.ForeignKey('Physician', related_name='attending_patients')

这允许你有两个外键到同一个模型; Physician模型还会包含名为primary_patientsattending_patients的字段。

答案 1 :(得分:1)

考虑使用多对多连接表。使用应用程序逻辑来防止每位患者超过两名医生。

Physician
    Physician_ID
    ...

Patient
    Patient_ID
    ...

Physician_Patient
    Physician_ID int not null
    Patient_ID int not null
    Type ENUM ('Primary', 'Attending')
    PRIMARY KEY (Physician_ID, Patient_ID)
    KEY (Patient_ID)

答案 2 :(得分:0)

我同意你的结论。我会将医生类型存储在多对多链接表中。