首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当生成复合主键时,什么时候才会被认为是过火呢?

当生成复合主键时,什么时候才会被认为是过火呢?
EN

Stack Overflow用户
提问于 2019-12-18 20:12:00
回答 2查看 83关注 0票数 1

最近,我在查看我的数据库笔记时偶然发现了这个问题。

在年度考试(A级,O级)中,未达到预期成绩的学生可以在随后几年重新参加考试,假设有一个数据库可供学校跟踪,该数据库具有以下属性

代码语言:javascript
运行
复制
Student ID, Exam module, Exam Date, Exam Results

这本书提供的问题(不是我的个人问题):什么是合适的主键?

现在,我知道不应该使用几个主键:

  1. 纯学生ID
  2. (学生ID+考试模块)

我也知道也许

auto-increments

  • (Student ID +考试模块+考试日期的第5列
  1. 人工主键(

)

可以用作主键。

我的问题来自于从所有属性(学生ID +考试模块+考试日期+考试结果)生成一个复合主键。我的一部分人认为它将作为一个复合主键工作,但为每个表提供一个由所有列组成的复合主键是没有意义的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-18 20:17:26

从您对这个问题的描述来看,下面的元组应该是表中唯一的:(StudentID, ExamModule, ExamDate),因为学生可能在不同的日期(实际上:不同的年份)参加相同的考试。考试的结果不应该是这个唯一的元组的一部分:这会阻止一个学生在同一次考试中获得两个结果。

您是决定将这个列的元组作为表的主键,还是使用某种系列列作为主键,主要取决于您的口味。如果您选择了一个串行密钥,那么无论如何,您都需要对上述三列设置一个复合唯一约束。

票数 4
EN

Stack Overflow用户

发布于 2019-12-18 21:03:48

这不一定符合“任择议定书”最初的问题:

问题:哪些是合适的主键?

但是.(在hind站点中)我将有一个标识字段作为主键。

并将StudentID作为索引(非唯一)和备用键。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59399378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档