3

我参加了一次面试,根据我的说法,它进行得很好,但根据面试官的说法却不是。他问了我几个我回答正确的问题和两个实践问题。其中之一与数据库有关。

问题是这样的

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

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

就像是:

教师桌

|  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

4 回答 4

6

它看起来很简单

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

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

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

你得到了模棱两可、不完整的要求。(这可能不是意外。)你没有做足够的事情来澄清它们。

我只是 sql 的初学者

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

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

于 2012-07-14T12:36:09.840 回答
5

除了一个故障似乎很好,如果您将教师分配给具有错误科目的班级,则主表中的故障,您不能在数据库中对此进行限制,恕我直言,应该还有一个映射班级和科目的中间表IE ClassSubjectMap

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

然后在 Master 表中使用此映射 ID 将教师与学科进行映射,这样就无法将教师分配给工程类教授生物。除了这个其他表似乎很好。

于 2012-07-14T06:49:55.300 回答
4

关于多值依赖和 4NF

在此处输入图像描述

于 2012-07-14T15:58:01.640 回答
0

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

我认为您想要限制的是,对于特定班级的每个科目只有一名教师。所以我会选择一些简单的东西,比如名为“Courses”的表,列 {id,teacher_id,subject_id,class_id,term_num} 和对 {subject_id,class_id,term_num} 的唯一约束,将教师作为属性保留在这里。

于 2012-07-15T07:57:54.963 回答