gpt4 book ai didi

sql - 数据库设计中的插入异常

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:20 24 4
gpt4 key购买 nike

我想为学校设计一个数据库,用于对学生的分数进行评分。但是我在我当前的设计中遇到了一个问题,我想插入学生标记。我目前在更广泛层面上的数据库设计是这样的:

-------------------       -------------------      ------------------
STUDENTINFO | | EXAMS | | taught_in |
------------------- ------------------- ------------------
reg_id | | examID | | t_cisId |
cis_Id | | examname | | subjectcode |
$otherAttributes | | | | t_id(auto-inc)|
__________________| |_________________| |________________|


------------------- ----------------- ------------------
|ClassInSchool | | Subjects | |Result |
------------------- ----------------- ------------------
| classes | | subjectcode | | regId |
| section | | subjectname | | examID |
| cis_id | |_______________| | t_id |
|_________________| |__scoredmarks___|

现在的问题是:在结果表中,我只想将那些记录插入到满足以下条件的表中:

  1. 学生应该是注册学生(满足 regId)。
  2. 应为有效(现有)考试插入标记(由 examId 满足)。
  3. 在类里面学习特定科目的学生,则应仅为这些科目插入分数。这就是我所在的地方面临的问题。

例如,在第 7 课的 A 节,教授英语。那么对于在7A学习的学生,只能插入英语分数。

在我的设计中,如果在 7 节课的 B 节中教授数学,那么我可以为正在学习 7 AMaths 学生插入标记>.

我只想在数据库级别处理此行为,否则我必须在 Java 端处理此问题。

注意:regId、examID、t_id 是 F.K.我在这里为 F.K 使用了类似的名称,以使其形象地理解。

最佳答案

希望我已经正确理解了问题。

看来您的设计可能需要一些改进。
在目前的设计中,没有什么可以阻止学生参加两次考试。
考试没有科目,所以考试可能会导致多个科目......等等
(如果我错了请纠正我)

顺便说一句,当前设计中问题的根源是您使用代理键标识符作为关联表的主键。这是 side effect of using surrogate key , more info

顺便说一句,下面的设计草案可能会派上用场:

enter image description here请注意:

taught_in PK = subjectPK + ClassInScholePK
STUDENTINFO Pk = subjectPK + ClassInScholePK + studentpk
Exam pk = sequence + subjectPK
result pk = (STUDENTINFO Pk) + (Exam pk) =
(subjectPK_1 + ClassInScholePK + studentpk_1) + (sequence + subjectPK_2)

student_PK + sequence + subjectPK 进行唯一约束将导致每次考试的学生成绩不重复。
subjectPK_1 = subjectPK_2 进行检查约束将产生特定主题的结果。

关于sql - 数据库设计中的插入异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22424037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com