【问题标题】:What is the best database design for storing multiple subjects?存储多个主题的最佳数据库设计是什么?
【发布时间】:2014-12-31 16:06:07
【问题描述】:

最近我正在做一个项目,我需要在我的数据库中保存多个科目,并且科目的数量将根据学生的班级而改变。例如:“VII”类有6个科目(包括1个选项科目),“VIII”类有8个科目(1个包括选项科目)等等。甚至选项科目也可以根据学生的选择而有所不同。

我正在使用 CheckedListBox 控件。这是截图。

我正在使用 MS Sql Server 2012。我在设计数据库表时遇到了困难。我不明白我应该在学生表中创建所有主题列还是????(最佳方式)。请帮助我,提前谢谢。

【问题讨论】:

  • 有一个 STUDENTS 表、一个 SUBJECTS 表和一个链接它们的 STUDENTSUBJECTS 表。

标签: c# sql-server sql-server-2012


【解决方案1】:

您所描述的是所谓的多对多关系。许多班级有许多学生。

您将有一个学生表、一个科目表和一个表 student_subject 表,该表链接了学生表和科目表的主键。

Reference: Many to Many

【讨论】:

    【解决方案2】:

    如果一个Student 可以有多个Subjects并且一个Subject 可以有多个Students,那么这是一个多对多的关系。这意味着需要有一个中间表来链接它们。

    从对象本身的表格开始:

    Student
    ----------
    ID
    Name
    etc.
    

    Subject
    ----------
    ID
    Name
    etc.
    

    由于这些是域中独立的聚合根对象,并且没有一个拥有另一个,因此它们的表只包含描述该对象的信息。例如,Subject 可能有名称和描述,可能是先决条件列表等。

    然后创建它们之间的关系表。一种常见的做法是只组合名称:

    StudentSubject
    ----------
    StudentID
    SubjectID
    

    如果没有两对StudentSubject可以重复,那么这两个外键合起来可以做主键。如果它们可以重复(如果相同的Student 可以多次具有相同的Subject),那么您可能需要向表中添加一个单独的主键。

    最简单的,这个表所做的只是创建主表中记录之间的关系。但是,这可能会发展成为本身的领域实体。如果有任何属性描述了StudentSubject 之间的关系,这些属性将被添加到此表中。

    【讨论】:

      【解决方案3】:

      您的数据库架构应该如下所示......

      学生
      Student_ID (PK)
      学生姓名
      等等.......

      主题
      Subject_ID (PK)
      费用
      等等……

      Student_Subjects
      Student_ID FK 学生(Student_ID)
      Subject_ID FK 主题(Subject_ID)
      开始日期 等等……

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 2010-10-30
        • 1970-01-01
        • 1970-01-01
        • 2010-10-06
        相关资源
        最近更新 更多