sql - super 键、候选键和主键

标签 sql oracle primary-key relational

哪位好心人可以用下面的简单例子澄清我的疑惑,并确定超键、候选键和主键吗?

我知道有很多帖子和网站解释了它们之间的差异。但看起来都是通用定义。

例子:

Student (StudentNumber, FamilyName, Degree, Major, Grade, PhoneNumber)

所以从上面的例子,我可以知道StudentNumber是主键。

但是对于 super 键,我有点困惑可以将哪些属性组合分组到 super 键中?

至于候选键,我对给出的定义感到困惑,因为任何候选键都可以作为主键。

是不是表示PhoneNumber等属性是候选键并且可以是主键? (假设PhoneNumber只属于一个学生)

感谢您的澄清!

最佳答案

由于您不想要教科书定义,因此松散地说, super 键是一组唯一定义行的列。

这个集合可以有一个或多个元素,一张表可以有多个 super 键。你通常通过函数依赖来做到这一点。

在你的例子中,我假设:

StudentNumber    unique
FamilyName     not unique
Degree     not unique
Major      not unique
Grade      not unique
PhoneNumber    not unique

在这种情况下,超键是包含学号的任意组合。

所以以下是 super 键
StudentNumber
StudentNumber, FamilyName
StudentNumber, FamilyName, Degree
StudentNumber, FamilyName, Degree, Major
StudentNumber, FamilyName, Degree, Major, Grade
StudentNumber, FamilyName, Degree, Major, Grade, PhoneNumber
StudentNumber, Degree
StudentNumber, Degree, Major
StudentNumber, Degree, Major, Grade
StudentNumber, Degree, Major, Grade, PhoneNumber
StudentNumber, Major
StudentNumber, Major, Grade
StudentNumber, Major, Grade, PhoneNumber
StudentNumber, Grade
StudentNumber, Grade, PhoneNumber
StudentNumber, PhoneNumber

现在假设,如果 PhoneNumber 是唯一的(这些天谁共享电话),那么以下也是 super 键(除了我上面列出的)。
PhoneNumber
PhoneNumber, Grade, 
PhoneNumber, Major, Grade
PhoneNumber, Degree, Major, Grade
PhoneNumber, FamilyName, Degree, Major, Grade
PhoneNumber, Major
PhoneNumber, Degree, Major
PhoneNumber, FamilyName, Degree, Major
PhoneNumber, StudentNumber, FamilyName, Degree, Major
PhoneNumber, Degree
PhoneNumber, FamilyName, Degree
PhoneNumber, StudentNumber, FamilyName, Degree
PhoneNumber, FamilyName
PhoneNumber, StudentNumber, FamilyName

候选键只是“最短”的 super 键。回到 super 键的第一个列表(即电话号码不是唯一的),最短的 super 键是 StudentNumber。

主键通常只是候选键。

关于sql - super 键、候选键和主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8337309/

相关文章:

sql - 什么是 Visual Studio GDR R2?我还需要 Power Tools吗?

javascript - Sequelize - 基于特定属性包含

mysql - 将 mysql 触发器转换为 pl/sql 触发器

sql - 创建 View ,选择列作为主键

sql - 具有重置值的累加和然后恢复

SQL Server 2005 - 如何收缩临时数据库

.net - 托管 ODP.NET 驱动程序未显示在数据源对话框中

sql - 如何获得 Oracle 数据库中的所有应用程序专用或自定义角色?

sql - 超键、候选键、主键的关系举例

ruby-on-rails - 何时在连接表上设置没有主键的表