外键查询

时间:2014-06-23 05:29:32

标签: database foreign-keys

enter image description here


我理解前两个外键。 咨询医生获得 患者 nhi ,因为它们来自其他表格。但是,我不了解最后两个外键,我不知道它们是什么意思。是否有人能够帮助我理解。或许可以通过英文描述究竟发生了什么?

1 个答案:

答案 0 :(得分:1)

要说从一个表的列到另一个表中有一个外键(FK)就是说

  • 第一个列的每个子行值显示为第二个列的子行值。即,从第一列的那些列到第二列的那些列存在包含依赖性(IND)。
  • 第二列的每个子行值在其表中都是唯一的,并且不包含其表中唯一的子行。也就是说,这些列在他们的表格中形成了一个关键。

(第一个表的列不必与第二个表中的列具有相同的名称。如果有多个列,则列表中的顺序通常用于表示第一个表列引用的是哪个第二个表列。)

所以FK实际上是一种约束或条件。对于给定的表是否满足(是的)(持有)。 (你的问题是“它们是来自其他桌子的钥匙”,它是如此草率,以至于它无助于你理解。)

表是什么意思(一些由其列参数化的句子)决定了它的值(满足(即为真)(即保持)给定应用情况的行。例如,Consult将行包含在:

patient [nhi] consulted doctor [did] on [date] with diagnosis [diagnosis]

让我们检查每个外键(约束/条件)是否满足(即为真)(即等于)您为Consult和Patient提供的特定表值:

1咨询确实参考医生做了TRUE,因为每个咨询确实一些医生做了价值

2咨询nhi参考患者nhi因为每个咨询nhi 某些患者nhi值

3咨询nhi参考医生做了TRUE,因为每个咨询nhi 一些医生做了价值

4咨询确实参考患者nhi因为每个咨询确实某些患者nhi值

<强> PS

我们告诉DBMS,每个数据库状态都满足某些给定的FK。因此DBMS不允许不满足FK的状态。 (它们是错误。)声明创建一个名为FK的对,称为DBMS约束,具有给定的FK和(可能是默认/隐式)名称。因此,“FK”和“约束”用于表示DBMS约束(名称-FK对)和一个FK。

在具有这些表和含义的数据库中,每个州都将满足FK 1和2,因此我们将它们声明给DBMS。并非每个州都满足3和4所以我们不会。我们会在该数据库中说“有FK 1和2”,“3和4不是FK”。但这是一种草率的方式,说数据库满足1和2但不满足3和4,或者我们宣布1和2但不满足3或4。

<强> PPS

FK可以用表的含义来表达。假设表T1是T1(c1,...,x1,......)和T2是T2(c2,...,x2,...)的行。那么FK就是

T1 (c1,...) references T2 (c2,...)

是FK

EXISTS x1,... T1(c1,...,x1,....) IMPLIES EXISTS x2,... T2(c2,...,x2,...)

例如,如果咨询(nhi,做,日期,诊断)(即患者[nhi]在诊断[诊断]的日期[日期]咨询医生[确实])对某些患者,日期和诊断然后患者(nhi,pname) ,bday)(即患者[nhd]名为[pname]出生于[bday])某些pname和bday。即如果nhi咨询过医生,那么nhi就是病人。