【问题标题】:Helping find Database Candidate Keys, Primary Keys帮助查找数据库候选键、主键
【发布时间】:2012-11-26 14:14:12
【问题描述】:

我正在尝试研究这个模型并解决以下问题:

  1. PATIENT_VISIT 的候选键是什么?

  2. 如果有多个候选键,请从候选键中选择一个主键。

  3. 根据选择的主键,PATIENT_VISIT 中存在哪些范式违规?

  4. 开发一种解决方案,消除范式违规。
    您的解决方案是无损连接分解吗?

  5. 您的解决方案是否保留了依赖性?如果不是,如何保存依赖关系 达到了吗?这是 BCNF 中的修订解决方案吗?

  6. 提供一个满足以下所有三个条件的解决方案:(1) 在 BCNF 中,(2) 是保持依赖关系,以及 (3) 是无损连接分解

    +---------+------------+------------+
    | Patient |  Hospital  |   Doctor   |
    +---------+------------+------------+
    | Smith   | Methodist  | D. Cooley  |
    | Lee     | St. Luke's | Z. Zhang   |
    | Marks   | Methodist  | D. Cooley  |
    | Marks   | St. Luke's | W. Lowe    |
    | Lou     | Hermann R. | Duke       |
    +---------+------------+------------+
    

此外,假设存在以下语义规则。

  • 每位患者可能是几家医院的患者。
  • 对于每家医院,一名患者可能只有一名医生。
  • 每家医院都有多名医生。
  • 每位医生只使用一家医院。
  • 每位医生在一家医院治疗数名患者。

【问题讨论】:

  • 候选键=在整个表中唯一可靠地标识单行的任何单列或列组;主键 = 根据您的喜好选择的候选键之一

标签: sql database


【解决方案1】:
  1. {Patient, Doctor} 是候选键。唯一可能的其他键是 {Patient, Hospital, Doctor},但这并不是最小的,因为 FD Doctor ⟶ Hospital;它是一个超级键,但不是候选键。

  2. 没有实际意义;只有一个候选键。

  3. 由于传递依赖 (FD) Doctor ⟶ Hospital,架构不在 BCNF 中。 (表的每个属性在功能上都由键、整个键、只有键决定。)

  4. PD { 患者,医生 },DH { 医生,医院 }。这是无损分解。

  5. 此解决方案是依赖保留。

  6. 见 4.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2016-03-26
    • 2014-02-09
    相关资源
    最近更新 更多