数据库中以下案例场景的理想解决方案

时间:2014-11-14 07:19:42

标签: join oracle11g sql-server-2008-r2 indexing rdbms

大约有数百万在线学生有50个考试,一个人可能会或可能不会写一个以上的考试。一个人也可以多次写一次考试(重试)。

以下哪种解决方案对于这种情况更好,I am okay with a better solution than these two as well

选项1.将每个考试存储在一个表中:

主题1

    
+----------------+---------+
|   student id   |  Marks  |
+----------------+---------+
| 1              | 85      |
| 2              | 32      |
| 2              | 60      |
+----------------+---------+


主题2

+----------------+---------+
|   student id   |  Marks  |
+----------------+---------+
| 1              | 85      |
| 2              | 32      |
| 2              | 60      |
+----------------+---------+
    

如上所述,只有当某个人参加过该考试时,每个表都会有学生ID,并且如果他多次参加考试,则会多次出现学生ID。

选项2:

    
+----------------+---------+---------+
|   student id   | Subject |  Marks  |
+----------------+---------+---------+
| 1              | Subj1   | 85      |
| 2              | Subj1   | 32      |
| 2              | Subj1   | 60      |
| 1              | Subj2   | 80      |
| 3              | Subj2   | 90      |
+----------------+---------+---------+
   

包含单个表中的所有值。

在性能和存储方面,哪个更好。

我的各种阙

1 个答案:

答案 0 :(得分:0)

我认为这里最好的是:

  1. STUDENT包含有关学生的信息

  2. EXAM包含有关考试的信息

  3. EXAM_TRY参考STUDENTEXAM表格以及字段DATE_OF_EXAMRESULT_OF_EXAM

  4. EXAM_TRY

  5. 中外键上的2个索引
  6. 视情况而定 - 日期字段索引(例如,您需要它来为审查员规划工作)