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

时间:2011-02-12 22:09:10

标签: database-design

鉴于:患者有很多医生,医生有多名患者。

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

  • 选项1:关联表
    • 患者[id,data1]
    • 医生[id,data2]
    • Patient_Doctor [patient_id,doctor_id]
  • 选项2:单个外键
    • 患者[id,data1,doctor_id]
    • 医生[id,data2]

我唯一能想到的是选项2要求你多次复制data1,如果data1很大,性能会受到影响。这是对的吗?

2 个答案:

答案 0 :(得分:3)

  

我唯一能想到的就是那个   选项2要求您复制   data1多次,如果data1是   大的表现会受到影响。就是它   正确的吗?

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

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

答案 1 :(得分:0)

确切地说,选项2是1对多的关系。因此,每个患者将不得不多次重复,这违反了数据库规范化。

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

选项2不是性能问题,而是设计,患者可以有很多与他相关的领域,你不想复制(医疗保险,地址,电话等......)