回答
能够识别数据库中的任何行的不同属性集称为超级密钥。并且最小超级密钥被称为候选密钥,即在具有最小数量的属性的超级密钥集合之中。主键可以是能够以唯一方式识别数据库中的特定行的任何键。 from this thread
和打字在谷歌所有的三个按键为您提供有关2,480,000 results
这要看情况。
主键是表格用来识别不同元素的主键。它是从候选键中选择的。
候选键是可能成为主键的所有键。所有的钥匙都是独一无二的,并且可以在桌子上加以区分。
超级密钥是具有附加属性的主键,这些额外信息用于唯一标识实体组的实例。
超级中心 - 是一套可用于在表中唯一标识记录的一个或多个列的
候选键 - 可以是任何列或组合可以作为数据库中唯一密钥的列。在一个表中可以有多个候选键。每个候选键都可以被认定为主键。你可以认为这是“最短”超级键或最小超级键
主键 - 是一列或唯一标识记录列的组合。只有一个候选键可以是主键。
对于候选键有资格作为主键,它应该是唯一的和非空的。
所以,基本上主键只是其中一个候选键,它只是一个最小的超级键。
根据干的定义:
你的主键是超级关键定义 - 你不能有相同的主键的两行。
但是,主键不是您的业务的约束,而是数据存储中的一个人为约束:例如,您可以将某人的生日设置为表中的主键,并且永远不会有两个出生的人在同一天。这将是愚蠢的,但可能的。在这种情况下,该表的主键不是该域的超级键。
但是,您的主键不一定是候选键 - 您可以将冗余列添加到主键。
+1好点,但最后一句话是不正确的。根据定义,主键必须是最小的(即候选键)。也许你的意思是,SQL中的PRIMARY KEY约束可能被定义在非最小的一组列上。那是真实的。但是,这只能证明SQL语法是不恰当的,因为定义的列可能根本不是主键。 SQL语法的奇怪之处肯定与实际问题没有关系,这只是关于主键(即候选键总是最小的超级键)。 – sqlvogel
候选键是唯一标识元组的字段的最小子集。例如,如果在“user_id”和“pet_id”列上有候选键,则不会有超过1个具有相同user_id和pet_id的元组,并且user_id和pet_id都不会作为元组的唯一标识符。
超级密钥是一组包含密钥的字段。使用上面的例子,如果我们添加“pet_name”(这不是关键,因为我们可以有多个名为“蓬松”的宠物),“user_id”和“pet_id”的组合唯一标识了一个元组,这将是一个超级关键。基本上它就像一个没有“最小子字段”约束的候选键。
主键是您告诉数据库优化的候选键。可能有多种引用唯一元组的方法(即多个候选键),但是当您创建将使用最频繁的表时,您可以指定一个。
- 1. 候选键或超级键
- 2. 所有候选键都是超级键,而所有超级键都不是候选键。为什么?
- 3. 候选键和主键是什么?
- 4. 主键也是索引吗?
- 5. 主键,唯一键和候选键之间的区别
- 6. 外键也是主键的一部分
- 7. Oracle Sql:外键也是主键语法
- 8. 休眠 - @IdClass @ManyToOne - 主键也是外键
- 9. 外键非候选键和删除级联
- 10. 不是主键的超级键的例子?
- 11. 主键和候选键之间的区别
- 12. 如何从一组超级键中找到所有可能的候选键?
- 13. 用户名是主键的有效候选者吗?
- 14. 这种关系中的主要关键和候选关键是什么?
- 15. 删除主键也删除外键
- 16. MySQL - 也使用外键作为主键
- 17. 主键和外键
- 18. 主键和外键
- 19. 主键和外键?
- 20. 外键和主键
- 21. 选择SQL与主键和外键
- 22. 不包含与引用匹配的主键或候选键
- 23. 帮助查找数据库候选键,主键
- 24. SQL错误:“引用表中没有主键或候选键......”
- 25. 对主键使用现有的候选键或新的组合键
- 26. MySQL - 升级主键?
- 27. 主键的外键外国/初级
- 28. 数据库属性可以是主键和外键吗?
- 29. 休眠外键是主键
- 30. 休眠:外键是主键
是的主键是候选键,因此也是一个超级键。 – sqlvogel