Mysql SQL考勤数据库设计
我目前正在mariaDb中设计一个数据库,该数据库将用于Meteor应用程序(woth sequelize orm),用于跟踪学校学生的出勤情况 我不确定哪种方法最有效,因为我的案例中很少有例外:Mysql SQL考勤数据库设计,mysql,sql,database,mariadb,Mysql,Sql,Database,Mariadb,我目前正在mariaDb中设计一个数据库,该数据库将用于Meteor应用程序(woth sequelize orm),用于跟踪学校学生的出勤情况 我不确定哪种方法最有效,因为我的案例中很少有例外: 教师可以随意移动和重组他们的时间表,而且因为学生为每节课(以及某些类型的缺课)付费,我不能使用“排除方式”(例如只记录缺课,所以没有记录=出席) 需要的最重要的查询是每个学生的出勤率,我需要在每次为每个学生打开应用程序时都提供该查询 第二个最重要的是每个教师每月的出勤率。(这是按需提供的) (与db
是否有可能进行优化?这应该是面向学生和教师的电子邮件和发票系统的基础。您的设计有许多可能的改进。让我首先回答你的具体问题: 在20000行表上运行250个查询(查找)是否耗时 不。在现代硬件上,查询20000行将会很快。如果您有一个合适的索引策略,查询应该在10毫秒内返回 在学生桌上有一个更新的课程计数器字段 每次记录出席情况都是个好主意 不,这不是一个好主意——假设你想让每个学生都有一份报告,说明他们上课或缺课的时间,你就必须存储这些数据。保留一个计数器就是复制那个信息 我建议采用如下设计 “出席”和“缺席”在逻辑上是分开的;可以在带有标志的单个表中对它们进行建模。我对它们分别进行了建模,因为我认为它们在业务领域中是不同的东西,具有不同的属性(缺勤有原因代码),并且可能有不同的行为(例如,缺勤可能有发送电子邮件的工作流)。我更喜欢把逻辑上分开的东西放在不同的表中
Student
-------
student_id
name
...
Lesson
------
lesson_id
subject
teacher_id (if only one teacher can teach a lesson)
....
enrollment
---------
lesson_id
student_id
start_datetime (or you might have the concept of "term")
end_datetime
lesson_session
-------
lesson_session_id
lesson_id
start_datetime
end_datetime
location
teacher_id (in case more than one teacher can teach a lesson)
attendance
--------
lesson_session_id
student_id
absence
------------
lesson_session_id
student_id
reason (or might be a foreign key to reasons table)
非常感谢。我的设计大致相同,只有出勤表和缺勤表在一起(原因确实是外键)。把他们分开好吗?对缺勤情况进行评估,其中一些被视为存在(如学生没有及时醒来…)。您的设计有许多可能的改进。我可以给你一个提示吗?我已经更新了答案来解释为什么我认为“缺勤”和“出勤”是分开的。这不是白纸黑字……我提出的模式是可能的改进——你的问题提出了一些更基本的建议。如果你在问题中包含你的实际模式,你会得到更准确的答案…谢谢你的回答和更新!我已经添加了我的初始设计(剥离)250个查询——每天没问题。每秒?-这可能是个问题。