【问题标题】:Changing the following table from 1NF to 2NF将下表从 1NF 更改为 2NF
【发布时间】:2014-02-09 04:10:12
【问题描述】:

我已经花了好几个小时在网上浏览视频和示例。有人可以帮忙看看并指出我在哪个部分是对还是错。我正在尝试将下表更改为 2NF。谢谢你。

Clinic      Address      Therapist  TherapistTel    Appointment         Client    ClientTel
Clinic A    123 High St  J Smith    77882233        25/01/2013 11:00    A Jones   32512
Clinic A    123 High St  P Taylor   77235846        25/01/2013 13:00    I Davis   34251
Clinic B    80 Low St    B Morris   77991487        25/01/2013 10:30    H Kelly   53692
Clinic C    3 Middle St  J Smith    77882233        26/01/2013 14:00    Y Rimmer  68595
Clinic B    80 Low St    J Smith    77882233        26/01/2013 09:30    H Kelly   53692
Clinic A    123 High St  B Morris   77991487        25/01/2013 14:00    J Steele  36529

我的 2NF 表如下:

诊所

**Clinic**      Address      **Therapist**
Clinic A    123 High St  J Smith
Clinic B    80 Low St    P Taylor
Clinic C    3 Middle St  B Morris

治疗师

**Therapist**   TherapistTel
J Smith     77882233
P Taylor    77235846
B Morris    77991487

客户

**Client**    ClientTel
A Jones   32512
I Davis   34251
H Kelly   53692
Y Rimmer  68595
J Steele  36529

约会

**Therapist**      **Client**   Appointment
J Smith        A Jones  25/01/2013 11:00
P Taylor       I Davis  25/01/2013 13:00
B Morris       H Kelly  25/01/2013 10:30
J Smith        Y Rimmer 26/01/2013 14:00
J Smith        H Kelly  26/01/2013 09:30
B Morris       J Steele 25/01/2013 14:00

【问题讨论】:

  • 我已编辑以突出显示我的主键和外键。
  • 您的诊所表存在许多问题,最值得注意的是 P Taylor 与诊所 B 根本没有关联。您需要一张表来连接诊所和治疗师。你的约会表也有问题;在您的架构中,患者和治疗师都不知道该去哪个诊所,而原来的诊所确实告诉他们去哪里。
  • 我得到了 P Taylor 被错误关联的错误。我能知道诊所还有什么问题吗?同样对于预约,我认为诊所与诊所有关联,因为预约和诊所都有治疗师。
  • 你为什么停在 2NF?这是作业还是什么?
  • 过去一年的试卷。为即将到来的考试抢劫。我想正确理解这个概念。在这之后有3nf。但在弄清楚之前,我不明白去那里的意义。

标签: sql database relational-database normalization


【解决方案1】:

正如 2014 年 1 月的 cmets 所述:

您的诊所表存在许多问题,最明显的是 P Taylor 与诊所 B 根本没有关联。您需要一张表来连接诊所和治疗师。你的约会表也有问题;在您的架构中,患者和治疗师都不知道该去哪个诊所,而原始架构确实告诉他们去哪里。

一般来说,每个诊所不止一名治疗师。此外,给定的治疗师在不止一个诊所工作。因此,您需要一份诊所列表、一份治疗师列表以及一个标识每对诊所+治疗师的列表。在预约中,治疗师 J Smith 可以在三个诊所中的任何一个; A Jones 如何从预约表中知道与 J Smith 的预约是在诊所 A,而不是 B 或 C?你错过了关键信息。您需要约会表中的日期、时间、治疗师、客户和诊所。

客户和治疗师表都很好。 Clinic 表应仅包含 Clinic 和 Address 列。您的约会表需要 4 列:

  • 诊所
  • 治疗师
  • 客户
  • 约会(日期和时间)

您可能需要也可能不需要另一个表格 Therapist_Clinic,它指定了每个诊所可以服务的治疗师。对于给定的数据,它可能包含:

Therapist_Clinic

Clinic      Therapist
--------    ---------
Clinic A    J Smith
Clinic A    P Taylor
Clinic B    B Morris
Clinic C    J Smith
Clinic B    J Smith
Clinic A    B Morris

另一方面,如果每个记录在案的治疗师都可以在任何一家诊所工作,那么这张表是多余的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2014-12-14
    • 2011-07-19
    相关资源
    最近更新 更多