Sql 当一个表中有两列分别是唯一的时,它叫什么?
正如问题所问,我想知道当一行可以由两个单独的列唯一标识时,您会如何称呼它 很抱歉,我没有格式化,但这里是: A列:1,2,3,4,5 B栏:A、B、C、D、E C列:1,2,1,2,1 D列:A,A,B,B,ASql 当一个表中有两列分别是唯一的时,它叫什么?,sql,database-design,sql-server-2012,key,rdbms,Sql,Database Design,Sql Server 2012,Key,Rdbms,正如问题所问,我想知道当一行可以由两个单独的列唯一标识时,您会如何称呼它 很抱歉,我没有格式化,但这里是: A列:1,2,3,4,5 B栏:A、B、C、D、E C列:1,2,1,2,1 D列:A,A,B,B,A 那么A列和B列都是各自的主键?我不认为这是正确的,那么你会用“键”来称呼它吗?如果你的意思是每一行总是有一个唯一的a值,每一行总是有一个唯一的B值,那么每一行都是一个“超级键”。(实际上,集合{A}和{B}。) 答案是,这个表有两个单列超键 但根据您的数据,两个超键中没有更小的列集是一个
那么A列和B列都是各自的主键?我不认为这是正确的,那么你会用“键”来称呼它吗?如果你的意思是每一行总是有一个唯一的a值,每一行总是有一个唯一的B值,那么每一行都是一个“超级键”。(实际上,集合{A}和{B}。) 答案是,这个表有两个单列超键 但根据您的数据,两个超键中没有更小的列集是一个超键,每个列也是一个“候选键”。(唯一较小的集合是{},但它不是给定数据的超键。) 所以这里一个等价的答案是,这个表有两个单列候选键 5NF中有这样一个基表,可以保存示例数据。将其分解到其他表中没有任何好处 有一个传统是选择一个候选键作为“主键”。然后,每一个都是一个“备用键”。但这并不是一个特别有用的传统
在SQL中,
主键
或唯一非空
实际上声明了一个超键。每个表只能声明一个主键。SQL不允许将{}声明为超级键。是否为备用键?或者模式不好,应该将其拆分为两个表。好的,谢谢!我在学校对这个话题还不熟悉,所以谢谢你的澄清。@Bohemian有两个候选键本身并不违反任何NF。@Bohemian是模糊的,但没有意义,例如(候选或超级)键定义为“可以用来查找行”,所以你的第二个“因为”总是正确的。您是否意识到您的评论中说,每一个具有一列PK和一列UNIQUE NOT NULL的表都不在3NF中?即使对于示例数据:唯一非平凡的FD也有超键的行列式,因此在@Bohemian中,“如果R的每个非素属性都非传递地依赖于R的每个候选键,则关系R是第三范式”(E.F.Codd,1971,数据库关系模型的进一步规范化)换句话说,与任意数量的候选密钥的关系可以满足3NF。在任何一本关于这个主题的好书中或者网上的很多其他地方,你都可以验证这一点。