举个例子:
Department (**Dept**, Dept_name)
Employee(**RegNo**, FirstName, LastName, BirthDate, Dept_fk, Salary, City)
Dept_name是Department表的CK。
由于Dept_name未在Department表中设置为主键,因此Dept_fk可以成为Employee中CK(Dept_fk,FirstName,LastName,Birthdate)的一部分吗?
编辑:我修改了一些attribut名称,以便更容易理解。 Dept_fk是引用Department表中Dept的外键。
答案 0 :(得分:0)
给定表格的#34; CK(候选键)的两个定义"是:
如果没有我们使用的定义所需的信息,我们无法确定表的CK。例如所有FD(功能依赖性),或FD的规范封面或其子行值唯一的所有列集等。该信息总是可以在不涉及另一个表的情况下表达。
我们可以选择一张桌子的CK来打电话"" PK(主键)。 PK与关系理论无关。 (如果你使用的是ER方法,它有关于PKs和CKs的规则,那么你应该参考并标记它。)
Dept不能成为Employee表中候选键(例如:Dept,FirstName,LastName,Birthdate)的一部分,因为Dept未在Department表中设置为主键
部门在员工中,因此它不能成为其CK的一部分。但是如果你添加它,它是否是它的CK是独立于其他表。
如果你问你是否可以根据部门中的CK与PK之间的区别来做某事:PK总是无关紧要。
如果" Dept" s是" Dept#"的错别字:Dept#是或不是Department表的PK的事实与CK没有关系另一张桌子。无论是PK还是CK总是无关紧要。
但是,我是否仍然可以将Dept称为候选键,只知道Dept是Department表中的候选键?
是部门的CK。所以在英语中我们可以说它是一个CK。但成为一个CK就是成为特定表格的CK 。
也许你的意思是"我还可以打电话给Dept一个CK" of Employee 只知道..."。只有你表明它是一个。而且它是否独立于任何其他表格。
(也许你应该在这个问题上调用一些FK?)
PS列可以出现在多个表中,而它们之间没有FK。 ("参考"仅在您谈论FK时才有用。)不同的列可以在它们之间具有FK。当且仅当一组列中的所有子行值出现在另一列("引用的")中时,才有FK。 SQL FK只需要转到超级密钥(CK的超集)而不是CK。 FK可以来自任何列集:FK只是引用表中的(超级)键。了解FD,超级密钥,CK,PK,FK(到CK或超级密钥)的定义。