首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >决定因素和候选键是否相同?

问决定因素和候选键是否相同?
EN

Stack Overflow用户
提问于 2013-05-23 06:05:07
回答 4查看 31.6K关注 0票数 8

在https://web.archive.org/web/20130514174856/http://databases.about.com/cs/specificproducts/g/determinant.htm我发现这个是迈克·查普尔做的

定义:数据库表中的行列式是可以用来确定分配给同一行中其他属性的值的任何属性。 示例:考虑一个属性为employee_id、first_name、last_name和date_of_birth的表。在本例中,字段employee_id确定其余三个字段。名称字段不确定employee_id,因为公司可能有多个具有相同名字和/或姓氏的员工。类似地,道布字段不确定employee_id或name字段,因为不止一个员工可能共享相同的生日。

这个定义不也适用于候选密钥吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-23 06:29:55

行列式是FD (函数依赖项)的左侧属性集。但可能不是CK (候选键)。行列式不是CK

  • 一个不属于CK的CK ->子集的普通FD
  • 当表不在BCNF中时,某些FD(s) --因为BCNF是非平凡FD的每个行列式都是CK的超集时。

考虑以下(显然不是BCNF)表:

代码语言:javascript
复制
CREATE TABLE US_Address (
  AddressID int,
  Streetline varchar(80),
  City varchar(80),
  State char(2),
  ZIP char(5),
  StateName varchar(80),
  StateTax DECIMAL(5,2)
)

{State}是{StateName,StateTax}的行列式,但它不是CK。

对BCNF的正常化将使StateName和StateTax从US_Address表中移到带有State的国家表中。

票数 20
EN

Stack Overflow用户

发布于 2015-12-10 00:23:09

TL; No博士,“行列式”和“候选密钥”是不同的概念。行列式是FD的。CK是一张桌子。我们还可以合理地说,CK是其表的决定因素( FD),因为它确定了表中的每一列&列集。

表变量具有FD (函数依赖)、行列式、超级键、CK (候选键)或PK (主键)(在变量意义上)的实例,当给定业务/应用程序中出现的每个表值都有该实例时(在表意义上)。

对于列X和Y的集合,我们可以编写X -> Y. ,我们认为X是行列式/确定集,Y是e 225<代码>E 126函数依赖<代码>E 227X -> Y.的确定集>E 233

我们说X函数决定Y和Y是由X决定的,我们说X是X -> Y的行列式,在{ C } -> Y中,我们说C函数决定Y,在X -> {C}中,X函数决定C,当X是Y的超集时,我们说X -> Y是平凡的。

我们说X -> Y 在表T中,当X的每个子行值只出现在Y.的一个特定的子行值时,或者当X是表T中某些FD的行列式时,我们说X -> Y是T. 中的FD,则说X 是E 243E 144TT.表中的每个平凡FD的行列式。

表T的A 超级键是一组从功能上决定每一列的列。(CK)是一个候选密钥,它不包含较小的超级密钥。可以选择一个CK作为主键(PK),然后调用其他的CKs备用键(AKs)。列在某些CK中时,它是素数。

注意,行列式可以是FD的,也可以是(容纳的FD )表的任意行列式。每个CK都是其表的行列式。(但是,在一个表中,每一组列都是一个行列式:本身就是一个行列式。类似地,每一栏。)

(这些定义不依赖于规范化。将表的FDs和CKs用于规范化。表在BCNF中,其中包含的非平凡FD的每个行列式都是超级键。)

SQL表不是关系,而SQL运算符不是它们的关系/数学对应关系。除其他外,具有重复行、空值&一种三值逻辑。但是,尽管您可以借用术语并赋予它们SQL含义,你不能只是把这些意义替换成其他的RM定义或定理,得到一些合理或真实的东西。。所以我们必须将SQL设计转换为关系设计,应用关系概念,然后再转换回SQL。。在一些特殊情况下,我们可以在SQL中直接执行某些事情,因为我们知道如果我们进行转换、应用和转换返回会发生什么。

票数 10
EN

Stack Overflow用户

发布于 2015-12-03 06:17:15

  • 主键或任何候选键也是行列式,而相反的则不是。
  • 行列式可以唯一地确定行中的一个或多个属性。
  • 候选键可以唯一地决定整个行。

以这里中的一个例子为例,让有一个包含以下列的表:

客户#,姓名,地址,信用,销售代表#,销售代表姓名

假设Sales Rep #可以唯一地确定Sales Rep Name。因此,Sales Rep #是Sales Rep Name的行列式,但不是此表的候选键。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16706637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档