这个数据库设计正确吗?

Ank*_*ail 3 sql database-design

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

问题是这样的

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

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

就像是:

老师表

|  ID    |  Teacher_Name    |
-----------------------------
|   1     |   Ankit         |
|   2     |   Jack          |
Run Code Online (Sandbox Code Playgroud)

班级表

    |  ID    |  class_Name      |
    -----------------------------
    |   1     |   First         |
    |   2     |   Second        |
Run Code Online (Sandbox Code Playgroud)

主题表

    |  ID    |  subject_Name    |
    -----------------------------
    |   1     |   English       |
    |   2     |   stats         |
Run Code Online (Sandbox Code Playgroud)

和一个主表,将它们全部组合起来,并知道老师教什么课程的主题

主表

    |  ID     | Teacher_id  |  class_id |  subject_id  |
    ----------------------------------------------------
    |   1     |   1         |    1      |      1       |
    |   2     |   1         |    2      |      2       |
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

提前致谢.

Mik*_*ll' 6

看起来很简单

这可能是问题的一部分.大多数数据库问题似乎很简单.但很少有人真正相当简单.

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

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

你得到了模棱两可,不完整的要求.(这可能不是偶然的.)你没有做足够的事情来澄清它们.

我只是sql的初学者

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

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


Fur*_*edi 5

除了一个小故障似乎没问题,如果你把一个老师分配给一个有错误主题的班级的话,它会在主表中出现故障,你不能在数据库中设置一个约束,恕我直言那里应该有一个中间表来映射类和主题即 ClassSubjectMap

       ----------------------------------------------------
      |  CSMapID |  class_id |  subject_id  |
      ----------------------------------------------------
      |   1     |    1      |      1       |
      ----------------------------------------------------
      |   2     |    2      |      2       |
      ----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

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