【问题标题】:Can a normalised database have 2 link tables linking 2 other tables to a single primary key in another?规范化数据库可以有 2 个链接表,将 2 个其他表链接到另一个表中的单个主键吗?
【发布时间】:2014-03-19 18:16:14
【问题描述】:

这是我目前拥有的表格:

Student(StudentID, SurName, OtherNames, TargetGrade etc.)
Teacher(TeacherID, SurName, OtherNames etc.)
Class(ClassID, Description)

一个学生可以在多个班级,每个班级有很多学生。 一个班级可以有多名教师,每位教师教授多个班级。 因此,为了处理这 2 个多对多关系,我使用了 2 个查找表:

StudentClass(StudentID,ClassID)
TeacherClass(TeacherID,ClassID)

我不确定这是否被规范化的原因是,如果你删除类表(这似乎有点多余,但可以帮助识别类),你会留下 StudentClass 之间的多对多关系和教师班。这是标准化的吗?

谢谢

-----------        ----------       ----------         -------------         -----------
|         |       /|        |\      |        |        /|           |\        |         |
| Student |------<-| Student|->-----|  Class |-------<-| Class -   |->-------| Teacher |
|         |       \| -Class |/      |        |        \|   Teacher |/        |         |
-----------        ----------       ----------         -------------         -----------

编辑:对于这个系统,类不需要存储任何东西,除了描述。考试成绩存储在与学生关联的单独表格中。

【问题讨论】:

  • 类肯定不是多余的。如果您删除它,则必须在关联表中引入有关类的所有信息,从而分散信息。事实上,课堂很可能与阅读计划、地点、考试(考试成绩)等相关。
  • 我在这个 Q 中看不到与 [delphi] 的任何关系。

标签: database database-normalization


【解决方案1】:

你在这里拥有的肯定是在 3rd NF 中。只是关于你所说的分数的评论:你不应该错过每个班级与 1 个或许多考试相关联的事实,因此你通常在班级和考试之间有一对多的关系(可能是 0 到多没有考试的课程?)。

然后,您可以认为分数由“studentClass”表和“Exams”表之间的关系表保存。根据您的业务规则,“studentClass”记录可以与特定考试的一个或多个分数相关联,具体取决于您是否可以通过一次或多次考试。

【讨论】:

    【解决方案2】:

    由于您描述的数据模型有两个多对多关系,即, --一个学生可以在多个班级,每个班级有很多学生。 --一个班级可以有多个老师,每个老师教很多个班级。

    使用两个链接表是公平的,而不是坚持对其进行规范化,从而使建模过程更加复杂。

    进一步规范化没有坏处,但模型的复杂性是不可避免的

    【讨论】:

    • 你会说我所拥有的是第三范式吗?如果不是,我将如何进一步规范化它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多