2010-06-21 224 views
13

超级密钥与候选密钥在ERDB之间有什么区别?超级密钥与候选密钥

谢谢。

+4

超级键和候选键是关系数据库模型术语。 “ERDB”是什么意思?也许你指的是实体关系(ER)模型,它是一组绘制关于数据图片的约定。 ER模型与关系模型不同。 – sqlvogel 2010-06-21 19:38:19

回答

12

候选键是最小超密钥

+5

+1,此外,在这里定义“最小”会很好,因为它非直观。例如,在表(a,b,c)中,(a)是唯一的,(b,c)是唯一的,(a)和(b,c)都应该是候选键。 – orip 2010-06-21 20:14:00

+1

最小的意义在于,如果从候选关键字中删除了一个属性,则该行不能唯一标识。 – libjup 2016-08-13 08:02:12

4
  • 候选键=最小键标识行
  • Super键=至少一样宽候选键

对于我来说,超级密钥通常会在候选密钥上引入歧义

+0

候选键是一个最小的超级键。所以一个超级密钥不是严格的“更宽”,因为候选密钥也是超级密钥。 – sqlvogel 2010-06-21 19:41:48

+0

@david:不是“最小的超级键”吗? – gbn 2010-06-22 04:40:49

+0

“通常引入歧义” - 你是什么意思?例如,在这个答案中(http://stackoverflow.com/questions/3938736/enforce-constraints-between-tables/3940708#3940708),EmployeeDepartments表有一个候选键'(employee_ID)'和一个超级键'(employee_department_name, EMPLOYEE_ID)'。两者都是数据完整性所必需的,哪里存在歧义? – onedaywhen 2010-10-26 14:18:03

22

超级密钥是一组列,唯一标识ifies连续。候选键将是唯一标识一行的MINIMAL列集合。所以基本上Superkey是一个候选关键字,其中包含多余的不必要的列。

+0

“一个超级键是一个候选键与额外的不必要的列” - - 额外的列可能实际上有必要引用表并确保数据的完整性,例如'(employee_ID)'是唯一的,但是对于根据部门限制雇员的某些表可能需要'(employee_ID,department_name)'上的键。 – onedaywhen 2010-10-26 14:11:51

2

让我们保持它的简单

超密钥 - 一组键的唯一定义一个row。所以出所有属性的,如果连任何单独一个是unique那么所有具有独特的属性属于子集根据superkey

候选键 - 一个superkey哪些没有进一步的子集可以导出可识别rows uniquely,或者我们可以简单地说,它是minimal superkey的。