在 c# 和任何数据库中创建考勤系统的逻辑(数据库架构需要帮助)
本文关键字:数据库 帮助 任何 创建 考勤系统 | 更新日期: 2023-09-27 17:56:07
我必须创建一个我们学院的考勤管理系统。要求是..共有6个科目
- 每个科目每个月都有一个表格。
- 每节课都被记录下来,编号从1到n。如果存在,则对现在的候选人进行计数...
- 每个月底,所有6个科目的总课程都会被总结出来......并总结每个学生参加的总课程并计算百分比......(总课时)/(总课时)*100...
- 有120名学生...
请帮助我创建一种创建数据库的有效方法...注意。。。。该应用程序应允许您查看他未参加的所有缺席课程以供参考。(所以每个缺席的班级都必须记录)
我。。尝试:
- 我尝试的一种方法是:为每个主题创建表格...然后需要6张桌子
缺点:*每天必须是一列,每个月应创建 6 个表的副本。即 6 个子*12 个月 =每年 72 桌每个科目也可以上额外的课...因此,如果一个受试者在当天被拍摄两次,就会有3个病例到来 - 两个>在场,两个都不在场,只有一个在场。*
2..我尝试过的第二种方法是:
为每个具有相同数据库架构的学生创建一个表。(以主题为栏)缺点:
12名学生将需要120张桌子
:P伙计们有什么好主意吗...如果您给我一些想法,如何为这种应用程序构建数据库模式,那将非常有帮助......
谢谢。。。。。
学生表:
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)
);