2

我已经四处寻找与此相关的其他建议,但我所看到的没有任何东西非常适合我的需求,所以就这样吧!

我所拥有的是多班(澳大利亚中学;7-12 年级)、多天(周一至周五)的学校时间表。我现在要构建的是一个 MySQL 数据库,其中包含以下信息,以部署在帐户驱动的网站上。

  • 主题:
    • 运行时间(如“周三第 1 期”、“周五第 2 期”等 -- 此列中有多个值)
    • 教师(链接到所有教师的单独数据库)——如果教师生病并被替换,这将额外需要(临时)更改;NULL 时可能会忽略“replacementinstructor”列。
    • 位置(不同,但具体分配,不同日期的房间) -- 同上,当房间改变时临时改变。
    • 其他明显性:课程名称(“Year 7 Health”)、唯一 ID(类似于“7.HEALTH”,而不仅仅是自动递增的 INT。)等。
  • 教师:
    • 名字,姓氏
    • 他们参加的课程
    • 联系方式
    • 其他明显性:唯一 ID(自动递增 INT)、用户名(fname.lname)、他们帐户的密码等。
  • 学生:
    • 名字,姓氏
    • 他们参加的课程(存储为每个学生的个人列表)
    • 年级/形式(7 年级、11 年级等)
    • 基本个人信息(家庭郊区、电子邮件等)
    • 更明显:唯一ID(与教师相同的设置)、用户名(与教师相同)、密码等。

任何关于我如何设计这种数据结构的见解都将不胜感激,我更像是 UI 狂热者而不是 MySQL 思想家;-D

提前致谢。

4

2 回答 2

7

我可以想到在 MySQL 中使用以下表:

学生
学生信息

  • id (auto_increment)
  • 用户名
  • 密码
  • student_id(我有一个学生 ID,但我不记得我是在 7 岁还是 10 岁时收到的)
  • 电子邮件
  • 联系电话
  • 街道
  • 市郊
  • 州(枚举 - ACT、NSW、WA、SA、TAS、VIC、NT、QLD)

教师
教师信息

  • id (auto_increment)
  • 头衔(博士、夫人等)
  • 用户名
  • 密码
  • 电子邮件
  • 联系电话
  • 街道
  • 市郊
  • 州(枚举 - ACT、NSW、WA、SA、TAS、VIC、NT、QLD)

科目
所有不同的科目

  • id (auto_increment)
  • 主题
  • 主题代码(例如 7.HEALTH)

地点
学校周围的不同地点

  • id (auto_increment)
  • 位置(例如 BLOCK A、ROOM 2、MUSIC ROOM)

subject_teachers
每个老师教什么科目

  • id (auto_increment)
  • 主题ID
  • 教师编号

subject_students
每个学生修读的科目

  • id (auto_increment)
  • 主题ID
  • 学生卡

subject_timetable
主要时间表

  • id (auto_increment)
  • 主题ID
  • location_id
  • 教师编号
  • alt_teacher_id(例如代课老师)
  • 期间
  • 周期(数字 1 - 一天中有多少个周期。如果我没记错的话是 6 个)
  • 周(数字 1-2 甚至可能是 1-52)
  • 工作日(数字 1-5)
  • 注释(正如@Oswald 建议的那样,您可以在事情发生变化时添加额外的注释)

可以对这些注释进行整理,然后将其作为脚注显示在时间表上。

于 2011-04-23T09:06:04.333 回答
3

您显然需要一个科目表、一个学生表和一个教师表。

阅读数据库规范化。这将告诉您(除其他外):

  • 不要将运行时间作为逗号分隔列表放入主题表中。而是使用一个表作为运行时间,并使用外键将该表中的条目映射到 Subjects 表。
  • 将教师映射到课程也是如此。
  • 将学生映射到课程也是如此。
  • 该运行时间表也适用于在特定运行时间内保存课程的位置。

此外,如果您在数据库中记录临时更改,您将依赖于在特定时间更改相关信息的人员。为了解决这个问题,您可能需要考虑一个表格课程,您可以在其中记录

  • 运行时间
  • 周数
  • 课程
  • 讲师
  • 地点
  • 可能特定于该特定课程的其他字段。

这将允许您提前安排更改(McCachney 先生在接下来的两周内生病,101 室因重新装修而关闭一个月等)

于 2011-04-23T08:58:31.833 回答