当前位置: 首页 > 知识库问答 >
问题:

如何模拟学生/课程/成绩?

单于钊
2023-03-14

我想有一个数据库,其中包含每个学生,他/她正在参加的课程,以及他/她对每个学生的成绩。

我目前的模式是:

学生:
first_name
last_name
student_idPK

课程:
course_name
course_idPK


等级
student_idFK
course_idFK

问题是我不能加入学生和课程。当然可以添加student_id作为外键吗?最好的模型是什么?

共有1个答案

邬宜然
2023-03-14

任何两个表都可以有意义地连接。它显然不会给你想要的行。请解释你想要的行:student_id标识学生和course_id标识课程和......”的行?事实上,您需要为每个基表提供这样一个谓词,否则数据库将无法使用。你似乎希望我们从常识中知道这些是什么。但是不清楚你想要的连接没有给你的行。

FK(外键)只是表示某些列集的值也是某些其他列集的值。和每个约束一样,这取决于在某种情况下您希望在每个表中放置哪些行以及可能出现的情况。因此,请确定您希望能够请求哪些行,以及如果使用您已有的基表的查询没有返回这些行,则添加适当的基表。然后声明后续约束,包括FKs、PKs(主键)

假设您需要“学生id取得班级id”的行。成绩可能是“学生id取得班级id中的成绩”的行。从成绩中投影出成绩会得到“学生id取得班级id中的某些成绩”的行“。但是,如果一个班的所有学生都有分数,那么这些只是你想要的行。

您可以添加带有谓词“student-student-id获取class-id”的注册(student-id,class-id)。请注意,那么Grade中的一行必须是注册中的子行,因此我们声明了FK;这只是反映了“如果student-student-id在class-id中取得了某些成绩,则student-id获取class-id”这一事实。

或者你可以改为让Grade的谓词类似于“学生id在class class id中取得了成绩,或者学生id取得了class class id,而Grade='n/a'”。然后,注册的投影将为您提供所需的行。注意这个谓词是如何相对复杂的。这是在SQL或其他特殊值中使用NULL的困难之一。

重新查询查看此答案和/或此答案(包括其链接)。

 类似资料:
  • 问题内容: 我该如何与正在测试的班级中的Mockito其他班级进行模拟? 例如: MyClass.java 任何东西PerformerClass.java 并测试: 我是否可以欺骗以排除不必要的逻辑?我可以重写方法来简单地返回还是? 为什么指定Mockito,因为在Robolectric进行Android测试时需要它。 问题答案: 您可以重构,以便它使用依赖注入。不用让它创建实例,您可以将类的实例

  • 问题内容: 我最近读到,使类成为单例使不可能模拟该类的对象,这使得测试其客户端变得困难。我无法立即理解其根本原因。有人可以解释一下什么使得模拟单例课程成为不可能吗?另外,使类单例还有其他问题吗? 问题答案: 当然,我可以写一些类似 不使用单例的 东西 ,它们很邪恶,使用Guice / Spring /什么都可以, 但是首先,这不能回答您的问题,其次,当您使用遗留代码 来 处理单例时,例。 因此,我

  • 问题内容: 我上了最后一堂课,像这样: 我在其他这样的班级中使用这个班级: 在我的JUnit测试类中,Seasons.java我想模拟RainOnTrees该类。我该如何使用Mockito做到这一点? 问题答案: 仅在Mockito v2中可以模拟最终/静态类/方法。 将此添加到你的gradle文件中: 使用Mockito常见问题解答中的 Mockito v1,这是不可能的: `What are

  • 本文向大家介绍C语言学生成绩管理系统课程设计,包括了C语言学生成绩管理系统课程设计的使用技巧和注意事项,需要的朋友参考一下 学生成绩管理系统是比较适合初学者的。它涵盖了c语言几乎知识。对于学了c语言的人,把这个课程设计搞好(当然自己能设计出来是要有很好的基础)。不管自己能不能够完成,最重要的是能弄懂。参考其他资料,试着自己编写是不错的选择。这个课程设计也是我参照资料,自己编写的。自己适当地增加了一

  • 我有最后一节课,大概是这样的: 我在其他类中使用这个类,如下所示: 在的JUnit测试类中,我想模拟类。我怎么能用莫基托做到这一点?

  • 我正在做一个学生注册数据库项目。学生注册课程并获得成绩。有时一个学生重复一门课程,获得更好的成绩。我需要只使用最好的成绩来计算grade_point和学分的总和。所以对于每个在不同学期重复课程的学生,我必须确定最高的成绩是多少。emplid代表学生,course_id标识一门课程,学分是学分hr,Grade_point是字母等级的数值,术语代表学期课程... 下面是一个我正在努力完成的例子。 OP