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

Join 数据库中以下案例场景的理想解决方案,join,oracle11g,sql-server-2008-r2,indexing,rdbms,Join,Oracle11g,Sql Server 2008 R2,Indexing,Rdbms,网上大约有数百万学生要写50门考试,一个人可以写一门以上的考试,也可以不写一门以上的考试。一个人也可以写一次以上的考试(重试) 那么下面哪种解决方案更适合这种情况,我也可以选择比这两种更好的解决方案 备选案文1。将每个检查存储在一个表中: 主题1 +----------------+---------+ | student id | Marks | +----------------+---------+ | 1 | 85 | | 2

网上大约有数百万学生要写50门考试,一个人可以写一门以上的考试,也可以不写一门以上的考试。一个人也可以写一次以上的考试(重试)

那么下面哪种解决方案更适合这种情况,
我也可以选择比这两种更好的解决方案

备选案文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      |
+----------------+---------+---------+
将所有值放在一个表中

从性能和存储角度来看,哪一个更好


我的各种疑问

我认为这里最好的是:

  • STUDENT
    ,包含有关学生的信息

  • 考试
    包含考试信息

  • 考试
    参考
    学生
    考试
    表,以及字段
    考试日期
    考试结果

  • 表中外键的2个索引
    test\u TRY

  • 根据情况-日期字段上的索引(例如,您需要它来为考官规划工作)


  • 考试是针对每个考试还是所有考试一起进行的?你的意思更像选项2,学生id来自学生表,科目名称来自科目表及其相应的分数。我没弄错吧?正如我所见-是的。但在这样的问题中,更好地为表编写DDL查询,它们不能被错误地理解。