在 c# 和任何数据库中创建考勤系统的逻辑(数据库架构需要帮助)

本文关键字:数据库 帮助 任何 创建 考勤系统 | 更新日期: 2023-09-27 17:56:07

我必须创建一个我们学院的考勤管理系统。要求是..共有6个科目

  1. 每个科目每个月都有一个表格。
  2. 每节课都被记录下来,编号从1到n。如果存在,则对现在的候选人进行计数...
  3. 每个月底,所有6个科目的总课程都会被总结出来......并总结每个学生参加的总课程并计算百分比......(总课时)/(总课时)*100...
  4. 有120名学生...

请帮助我创建一种创建数据库的有效方法...注意。。。。该应用程序应允许您查看他未参加的所有缺席课程以供参考。(所以每个缺席的班级都必须记录)

我。。尝试:

  1. 我尝试的一种方法是:为每个主题创建表格...然后需要6张桌子

缺点:*每天必须是一列,每个月应创建 6 个表的副本。即 6 个子*12 个月 =每年 72 桌每个科目也可以上额外的课...因此,如果一个受试者在当天被拍摄两次,就会有3个病例到来 - 两个>在场,两个都不在场,只有一个在场。*

2..我尝试过的第二种方法是:

为每个具有相同数据库架构的学生创建一个表。(以主题为栏)缺点:

12名学生将需要120张桌子

:P伙计们有什么好主意吗...如果您给我一些想法,如何为这种应用程序构建数据库模式,那将非常有帮助......

谢谢。。。。。

在 c# 和任何数据库中创建考勤系统的逻辑(数据库架构需要帮助)

学生表:

StudentID   int identity PK
LastName    string(20)
FirstName   string(20)

班级表:

ClassID     int identity PK
ClassName   string(50)
SubjectID   int FK to Subjects table (not shown)
TermID      int FK to Terms table (not shown)

学生到班级表:

STCID       int identity PK
ClassID     int FK to Classes table
StudentID   int FK to Students table

出席表:

AttendID    int identity PK
STCID       int FK to Student To Class table
Date        date/time

PK 表示 主键。 FK 表示外键(它与其他表中的主键相关联)。

"学生到科目"表将学生与其科目联系起来。 对于为学生分配的每个科目,将记录添加到"学生到科目"表中。 对于学生参加特定科目的每个日期,将单个记录添加到"出勤"表中。

首先,您绝对不需要为每个月或每个学生复制表格。 那是马登斯。

您可以从日期计算月份,因此只需存储日期即可解决此问题。

这是我的第一反应。

您需要学生、科目、注册、班级和出勤的表格。

注册表:

ID
Student_ID
Subject_ID
课程

表(使用其他名称)显示所有有效的课程日期(计算出勤率 % 时需要):

ID  
Subject_ID  
Class_Date

考勤表:

ID  
Student_ID  
Class_ID (refers to the ID field in the class table)

(修改名称以适合您的约定)

通过这种方式,出勤率包含每个班级中每个学生每次出场的记录。 您可以通过 SQL 查询确定每个学生在每个科目中错过了哪些课程。

你描述的所有逻辑都可以用这个结构来处理,除非我错过了什么。 保持数据模型干净,让代码完成工作。

这里有一些基于 @nycdan 答案的 SQL DDL,但使用自然键而不是人工(代理?)键,因为这样做可以提高引用完整性,即 Attendance可以而且应该参考Enrollment,以确保无法记录未注册该课程的学生的出勤情况。我还改了几个名字。我只包括最突出的属性。:

CREATE TABLE Students (student_ID INTEGER NOT NULL UNIQUE);
CREATE TABLE Courses (course_ID CHAR(6) NOT NULL UNIQUE);
CREATE TABLE Enrollment 
(
 course_ID CHAR(6) NOT NULL
    REFERENCES Courses (course_ID), 
 student_ID INTEGER NOT NULL
    REFERENCES Students (student_ID), 
 UNIQUE (course_ID, student_ID)
);
CREATE TABLE CourseSchedules
(
 course_ID CHAR(6) NOT NULL
    REFERENCES Courses (course_ID), 
 class_date DATE NOT NULL, 
 UNIQUE (course_ID, class_date)
);
CREATE TABLE Attendance
(
 student_ID INTEGER NOT NULL, 
 course_ID CHAR(6) NOT NULL, 
 class_date DATE NOT NULL, 
 FOREIGN KEY (course_ID, student_ID)
    REFERENCES Enrollment (course_ID, student_ID), 
 FOREIGN KEY (course_ID, class_date)
    REFERENCES CourseSchedules (course_ID, class_date), 
 UNIQUE (course_ID, class_date, student_ID)
);