【问题标题】:creating a class-subject database创建班级主题数据库
【发布时间】:2011-11-06 17:35:07
【问题描述】:

我想创建一个学校数据库,但我被困在了中间。我有以下表格

  1. 用户 - id、role_id、用户名、密码
  2. 角色 - id、角色(教师/学生
  3. 教师- id,
  4. 学生 - id、class_id、
  5. class - id、standard_id、section
  6. 标准 - id、名称

现在我想把学科与老师和学生联系起来。这里的问题是

  1. 有些科目是选修课,有些是必修课
  2. 5-7 级的英语是强制性的,但 8-10 级的英语是可选的
  3. 对于第 8 个标准。英语是第 3 科目的一部分 / 9-10 岁的可选组 3 英语可以作为第 1、第 2 或第 3 科目,但只有一次,第 1 科目的英语与第 2 科目的英语不同。

我希望将学生与他的科目联系起来。

同样对于 8std 部分 A 和 B(std + section = class) 英语是 8c 的第三主题,它是固定的德语,但 8D 可以两者兼有。如果这些数据也可以以某种方式与同一张表相关联,那就太好了。这有点像允许的课程科目。

我也想将老师与学科和班级相关联(老师 X 英语为 8c)

【问题讨论】:

  • 我发现很难准确理解您的问题是什么。我认为其他人在下面给出了一些很好的答案,但我有一些一般性的建议。在明确定义域中的对象和业务逻辑之前,不要考虑数据库模式。我认为您将数据库行话与业务逻辑混淆,从而使自己感到困惑。首先确定哪些信息对您的应用程序真正重要,以及具体的规则是什么。然后编写将封装该信息及其背后的行为的类。然后最后设计您的数据库架构。

标签: php mysql sql database


【解决方案1】:

您的问题似乎可以通过使用下表轻松解决:

学生

  • 身份证
  • class_id

老师

  • 身份证

  • 身份证

主题

  • 身份证
  • 等级
  • 可选
  • requires_subject_id

课程

  • 身份证
  • teacher_id
  • subject_id
  • school_year

course_attendants

  • course_id
  • student_id

如您所见,如果主题是可选的或强制的,则在表主题中定义了约束。一个科目可以由老师在一门课程和一个学年中教授。最后,学者可以参加课程,如表 course_attendants 中所述。要检查学生过去是否已经参加过课程,您必须只检查表 course_attendants 和 course。要设计只有在已经访问过另一门课程的情况下才能参加课程,请将所需的课程 ID 放在表主题的字段 requires_subject_id 中。

【讨论】:

  • 请不要以英语作为科目 3 与英语作为科目 2 不同,因此英语在 b/w 学年中也不同
  • @WebDeveloper:那么听起来您应该将它们视为恰好具有相同名称的不同主题。
  • 我会将 requires_subject_id 拆分到另一个关键表中,因为某些科目有一天可能有多个先决条件。
【解决方案2】:

学生与科目或教师与科目之间的关系应存储在不同的“course_relationships”表中。对于按班级划分的必修科目,将 SQL 添加到用于创建学生的函数中,该学生随后会为每个必修科目创建关系。比如:

// after whatever function you're using to create users

$compulsory_classes=array();

// for sixth grade
$compulsory_classes['6'] = array();

// for sake of example, say English course ID is 1
$compulsory_classes['6'][] = 1;

$user_class = $user->class;
foreach($compulsory_classes[$user_class] as $current_class) {
    mysql_query("INSERT INTO relationships (user_id, course_id)
    VALUES (" . $user_class . ", " . $current_class . ")");
}

然后使用单独的表单或函数来添加非强制性的类。

【讨论】:

    【解决方案3】:

    正确设置表格的关键是要认识到学生与学科之间是多对多的关系。所以你需要一个中间表来建立关系。

    所以你有一个学生表:比如 Student_ID、FirstName、LastName 作为字段等

    第二个科目表:例如 Class_ID、SubjectName、Grade、Optional 等

    然后是一个名为 StudentSubjectLinks 的中间表,它只有三个字段,如下所示;

    LinkID:中间表的ID。

    Student_ID:设置为外键,链接到 Student 表中的 Student_ID。

    Class_ID:设置为外键,链接到 Subjects 表中的 Class_ID。

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 2020-03-15
      相关资源
      最近更新 更多