【问题标题】:relationship among super key, candidate key and primary key with an example超级键、候选键和主键的关系举例
【发布时间】:2013-10-29 02:23:43
【问题描述】:

我们知道,实体集的超级键是一组一个或多个属性,其值唯一地确定每个实体 实体集的候选键是最小超键 虽然可能存在多个候选键,但选择其中一个候选键作为主键。

我们再次知道,参与实体集的主键组合形成关系集的超键。谁能通过一个简单的例子帮助我理解它们之间的关系?

【问题讨论】:

  • 关系:员工 {EmployeeNum, LoginName}。超级键:{EmployeeNum}、{LoginName}、{EmployeeNum、LoginName}。候选键:{EmployeeNum}、{LoginName}。这有帮助吗?
  • 听起来 ER 和关系数据模型的概念在这里有点混淆了。 @Niladri 您是否在询问如何将 ER 模型转换为关系模型的示例?例如,将 ER 模型 Person(Name, Address) - - Project(ProjectName, Description) 映射到三个关系 Person(Name, Adress),worksFor(Name,ProjectName), Project(ProjectName, Address)(关键属性以斜体表示)
  • 一所学校可以有任意数量的学生。但是,如果我们知道年级和卷号,那么我们就可以唯一地识别该学校的学生。但是这里的 {LoginName} 可以唯一标识一个员工吗?@sqlvogel
  • @Niladri,当然,如果 LoginName 可以识别员工,前提是它是唯一的业务规则,并且它的唯一性是通过Employees表中的键约束强制执行的。

标签: sql relational-database primary-key candidate


【解决方案1】:

人员(id、SocialInsuranceNumber、姓名、家庭)

超级键示例:

{id, name} 或

{SocialInsuranceNumber, name, family} 或

{id, SocialInsuranceNumber, name, family}

{id, name} 是唯一的。没有两个人对提到的两个字段具有相同的值。 但是这个集合并不是最小的。如果我们去掉“名称”,那么剩下的又是一个超级键。所以这不是候选键。

候选键:

{id},

{SocialInsuranceNumber}

它们是最小而独特的。

主键:

{id}

这是最短的长度(只有一个字段和“int”而不是 varchar(9),即另一个候选键的长度)。

另外,PK 最好是无数据的(用户根本看不到或更改任何内容,因为它可能会导致问题)。

【讨论】:

  • 我是 dbms 新手,问题可能很愚蠢。为什么我们需要超级密钥和候选密钥?什么时候可以通过主键获取唯一行?
  • 在当今的数据库系统中,开发人员通常使用主键来确保约束。因此,在理论定义和定理中使用了超密钥和候选密钥的概念。此外,在规范化数据库方面也有一些应用(实践和理论方面)。
猜你喜欢
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 2011-04-06
  • 1970-01-01
相关资源
最近更新 更多