多对多关系:关联表与单个外键?

问题描述:

鉴于:患者有许多医生和医生有多个患者。多对多关系:关联表与单个外键?

以下两种模式有什么区别?

  • 选项1:关联表
    • 病人[ID,DATA1]
    • 医生[ID,DATA2]
    • Patient_Doctor [patient_id,doctor_id]
  • 选项2:单个外键
    • 患者[id,data1,doctor_id]
    • 医生[ID,数据2]

我能想到的是,选项2要求您复制DATA1多次,如果数据1是大的性能将受到影响的唯一的事情。那是对的吗?

+1

如果您认为选项2中的数据重复可以接受,那么为什么不选择选项3:Patient_Doctor [patient_id,doctor_id,data1,data2]? – mbeckish 2011-02-12 22:19:25

+0

此外,您的问题的标题不准确。您的2个选项不是关联表与单个外键。在这两种情况下,都有一个关联表(即一个表,其关键字由两个不同实体的关键字组成)。唯一的区别是,在选项2中,您没有Patient实体的独立表。 – mbeckish 2011-02-12 22:21:42

我能想到的唯一的事情是, 选项2要求您复制 data1多次,如果data1是 大性能将受到影响。那 是否正确?

不,这是不正确的。 “选项2”,其中patient.id可能是主键,可防止您为每位患者插入多行。所以每个病人只能有一个医生。这在一般情况下不起作用:初级保健医生可能会将病人转介给过敏症专家,胃肠病专家,肿瘤科医生等。

为了好玩,考虑医生自己有医生的事实。

没错,选项2是一对多的关系。所以每个病人都必须重复多次,这与数据库正常化相反。

你的情况,是多对多的关系,这就是为什么你需要关系表。

方案2是不是性能的问题,而是设计的,病人可以有很多与他有关的字段,你不想要复制(医疗,ADRESS,电话等)