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

标签 sql database database-design

我想为学校设计一个数据库,对学生的分数进行评分。 但我目前的设计陷入了困境,我想插入学生分数。 我当前的数据库设计在更广泛的层面上是这样的:

-------------------       -------------------      ------------------
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. 学生在类(class)中学习特定科目,则应仅为这些科目插入分数。这就是我所在的地方 面临问题。

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

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

我只想在数据库级别处理此行为,否则我必须在 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 + 序列 + subjectPK 进行唯一约束将导致每次考试的学生成绩不重复。
subjectPK_1 = subjectPK_2 进行检查约束将产生特定于主题的结果。

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

相关文章:

mysql - 将多个 xml 传递给存储过程并检索 xml 属性

mysql - 使用 AND/OR 的 SQL 语句问题

php - 统计同一个表中的后代数量

database - 命名 N :N connectivity tables

database - 数据库擅长什么?

sql - 如何在 SQL Server 2008 中创建宽表?它的使用限制是什么?

sql - KQL 如何在 mv-apply 后合并结果行以获得正确的计数

mongodb - 在 MongoDB 中使用 "_id"插入 key 是否合适?

sql - 我们如何实现 IS-A 关系?

sql - 健全性检查 : Floats as primary keys?