这个数据库设计正确吗?

时间:2012-07-14 06:42:21

标签: sql database-design

我出席了一次面试,根据我的说法很顺利,但面试官没有这样说。他问了几个我正确回答的问题和2个实际问题。其中一个与数据库有关。

问题是这样的

学校由几个班级组成,每个班级学习由几位教师教授的不同科目。你必须设计数据库,以便人们可以知道哪个老师教什么课程?

看起来很简单,我设计了它。

类似的东西:

教师表

|  ID    |  Teacher_Name    |
-----------------------------
|   1     |   Ankit         |
|   2     |   Jack          |

班级表

    |  ID    |  class_Name      |
    -----------------------------
    |   1     |   First         |
    |   2     |   Second        |

主题表

    |  ID    |  subject_Name    |
    -----------------------------
    |   1     |   English       |
    |   2     |   stats         |

和一个主表,将它们全部组合起来,并了解教师教授哪个课程的主题

主表

    |  ID     | Teacher_id  |  class_id |  subject_id  |
    ----------------------------------------------------
    |   1     |   1         |    1      |      1       |
    |   2     |   1         |    2      |      2       |

只是为了清楚我做了什么......我甚至为这个问题写了一个选择查询,即使他没有让我这样做。

我只是sql的初学者所以我不知道这是否正确但是根据我的说法,如果我需要对数据库进行更改,这是非常有用的。添加课程或科目的示例。

现在根据他的说法,这个设计根本不起作用,他说我甚至不应该把自己当作初学者而是低于初学者的水平。

所以请善意地告诉我这是否正确,如果它不是什么是设计数据库的正确方法。

提前感谢。

4 个答案:

答案 0 :(得分:6)

  

看起来很简单

这可能是问题的一部分。大多数数据库问题出现非常简单。但实际上很少有 非常简单。

  • 并非每位教师都有资格教授每所学校的每门科目。你可能 需要一张能让教师与他们合格的科目配对的表格 教。
  • 有些实体在其名下带有完整的身份证明。 (主题似乎;人们没有。)未能提供独特的 约束,比如,“subject_name”将是一个错误,无论如何 该表是否具有id号(可能很容易成为另一个) 错误)。
  • “主人”不是问题域中的术语。也就是说,如果你看一下 大学课程目录,你找不到章节或章节 题为“大师章”,或类似的任何东西。但是你 找到一个部分,告诉您每个学期提供哪个科目,以及
    这是一个线索。在大学里,并非每门课程都是如此 每个学期都有。
  • 您还需要对“主”表{teacher_id, class_id,subject_id}。
  • 在同一个表中,您需要重叠外键约束 {teacher_id,subject_id}和{class_id,subject_id}。

我可以继续。但这就是不会雇用你的原因。

您的要求含糊不清,不完整。 (这可能不是偶然的。)你做得不够明确。

  

我只是sql的初学者

我们在某些时候都是初学者。

他们想聘请初学者吗?如果没有,那可能是另一个问题。

答案 1 :(得分:5)

除了一个小故障似乎很好,如果你把一个老师分配给一个有错误主题的类,那么它在主表中的故障,你不能在数据库中设置一个约束,恕我直言那里应该有一个中间表来映射课程和科目,即ClassSubjectMap

       ----------------------------------------------------
      |  CSMapID |  class_id |  subject_id  |
      ----------------------------------------------------
      |   1     |    1      |      1       |
      ----------------------------------------------------
      |   2     |    2      |      2       |
      ----------------------------------------------------

然后在Master表中使用此地图ID来映射具有主题的教师,这样就不能将教师分配到工程类教授生物学。除此之外,其他表似乎没问题。

答案 2 :(得分:4)

答案 3 :(得分:0)

也许您不希望明确存储有关特定教师可以教授哪些科目的信息。实际上,我们在教育过程中有一个真正的应用,我们没有存储这些信息,我们还没有非常需要它来实现。因此,我猜你也可以不用它,因为没有提供限制用户将教师分配给科目和课程的要求。

我认为你想要限制的是,每个科目只有一名老师教授特定班级。所以我会选择一些简单的东西,例如名为“Courses”的表,列{id,teacher_id,subject_id,class_id,semester_num},以及{subject_id,class_id,semester_num}的唯一约束,在此处将教师作为属性。< / p>