我现在已经看了一下其他与此有关的建议,但我见过的任何东西都不适合我的需求,所以这里有!
我所拥有的是多班(澳大利亚中学; 7 - 12年级),多日(周一至周五)学校时间表。我现在想要构建的是一个MySQL数据库,其中包含要在帐户驱动的网站上部署的以下信息。
- 主题:
- 运行时间(如“星期三的第1期”,“星期五的第2期”等 - 此列中的多个值)
- 教师(链接到所有教师的单独数据库) ) - 如果教师生病和更换,这还需要(暂时)改变;也许是一个在“NULL”时被忽略的“replacementinstructor”列。
- 位置(不同,但具体分配,不同日期的房间) - 如上所述,在房间改变时暂时更改。
- 其他显而易见性:课程名称(“7年级健康”),唯一ID(类似“7.HEALTH”,而不仅仅是自动递增INT。)等。
- 教师:
- 名字,姓氏
- 课程
- 联系信息
- 其他显而易见性:唯一ID(自动递增INT),用户名(fname.lname),其帐户的密码等。
- 学生:
- 名字,姓氏
- 他们参加的课程(存储为每个学生的个人名单)
- 年级/表格(7年级,11年级等) 。)
- 基本个人信息(家庭郊区,电子邮件等)
- 更明显:唯一ID(与教师设置相同),用户名(与教师相同),密码等
对于我如何设计这样一个数据结构的任何见解都将非常感激,我更像是一个UI狂热者而不是MySQL思想家;-D
提前致谢。
2 个答案:
答案 0 :(得分:6)
我可以想到在MySQL中使用以下表格:
<强>生强>
学生信息
- id(auto_increment)
- 姓名
- 名字
- 用户名
- 密码
- student_id(我有一个学生证,但我不记得我是否在7岁或10岁时获得了这个)
- 年
- 电子邮件
- CONTACT_PHONE
- 街
- 郊区
- 州(ENUM - ACT,NSW,WA,SA,TAS,VIC,NT,QLD)
<强>教师强>
教师信息
- id(auto_increment)
- 姓名
- 名字
- 标题(博士,夫人等)
- 用户名
- 密码
- 电子邮件
- CONTACT_PHONE
- 街
- 郊区
- 州(ENUM - ACT,NSW,WA,SA,TAS,VIC,NT,QLD)
<强>受试者强>
所有不同的科目
- id(auto_increment)
- 受试者
- subject_code(例如7.HEALTH)
- 年
<强>地点
学校周围的各个地方
- id(auto_increment)
- 位置(例如街区A,房间2,音乐室)
<强> subject_teachers 强>
每位老师教授哪些科目
- id(auto_increment)
- subject_id
- teacher_id
<强> subject_students 强>
每个学生参加哪些科目
- id(auto_increment)
- subject_id
- student_id数据
<强> subject_timetable 强>
主要时间表
- id(auto_increment)
- subject_id
- LOCATION_ID
- teacher_id
- alt_teacher_id(例如代课老师)
- 持续时间
- 期间(数字1 - 一天中有多少个时段。如果我没记错的话,则为6个)
- 周(1-2号,甚至可能是1-52)
- 平日(1-5号)
- 备注(正如@Oswald建议您可以在事情发生变化时添加其他备注)
可以整理笔记,然后在时间表上显示为脚注。
答案 1 :(得分:3)
您显然需要一个主题表,一个学生表和一个教师表。
阅读database normalization。这将告诉你(除其他事项外):
- 不要将运行时间作为逗号分隔列表放入Subject表中。而是使用表来表示运行时间,并使用外键将该表中的条目映射到Subjects表。
- 将老师映射到课程也是如此。
- 同样适用于将学生映射到课程。
- 该运行时间表也适合在特定的运行时间内保留课程的位置。
此外,如果您在数据库中记录临时更改,则您依赖于在特定时间更改相关信息的人员。要解决这个问题,您可能需要考虑一个表格课程,在那里录制
- 运行时间
- 周数
- 场
- 讲师
- 位置
- 可能特定于该特定课程的其他字段。
这将允许您提前安排更改(McCachney先生在接下来的两周内生病,101室因重新装修一个月而关闭等)。