c# - 在 SQL 中存储考勤数据
问题描述
从这个问题继续说:学校考勤系统的数据库设计
我目前正在做类似的事情,但还有一些其他问题。所以学校有大约 200 名学生,但这在不断变化。他们参加大约 200 天,并且需要将出勤数据保存 7 年。这是我在这里的创建表语句:
CREATE TABLE attendance (
studentID INTEGER REFERENCES students (studentID),
date DATE,
present BOOLEAN
);
我的问题是,这是创建表格的最佳方式吗?
在此之前,我还没有真正从 UI 中直接完成任何数据库操作,因此我提出的解决方案是:
首先是一个局部变量,它将使用 C# DateTime.Today 函数来获取今天的日期;另一个从 UI 获取 StudentID 的局部变量;然后是一个布尔值的出勤值,再次由 UI 设置并存储为 0/1;
然后将所有这些组合到 Insert into SQL 语句中。
这是最好的方法吗?任何提示或帮助将不胜感激。
解决方案
我建议使用这张桌子:
CREATE TABLE StudentAttendance (
StudentId int NOT NULL REFERENCES Students (StudentId),
Date date NOT NULL,
PRIMARY KEY( StudentId, Date )
)
- 我认为不需要
present
列,因为存在或缺少行可以指示学生当天是否在场。 - 该表有一个复合键组成
StudentId + Date
- 这意味着不能有重复的记录(即每个学生每天只有 1 行) - “Id”是 的缩写
Identity
,它不是首字母缩写,因此不应全部大写(即使用Id
代替ID
)。
更新
在阅读了其他用户(尤其是@JNevill)的评论后,我认识到您可能想要存储学生缺勤原因,这意味着您需要一IsPresent bit
列(因为一行现在可能意味着存在或不存在)Notes nvarchar(max)
列,但我们可以将其扩展为 a以tinyint
存储不同类型的考勤记录的枚举值:
enum StudentAttendanceType
{
Present = 0,
UnauthorisedAbsence = 1,
AuthorisedAbsence = 2,
MedicalLeave = 3,
// etc...
}
CREATE TABLE StudentAttendance (
StudentId int NOT NULL REFERENCES Students (StudentId),
Date date NOT NULL,
Type tinyint NOT NULL,
Notes nvarchar(max) NOT NULL
PRIMARY KEY( StudentId, Date )
)
推荐阅读
- pandas - 如何为熊猫中的每一列显示带有“NaN”值的索引?
- amazon-web-services - AWS Lightsail 站点始终使用 HTTPS。不是 HTTP
- node.js - AWS Lambda UserMigration_ForgotPassword 触发器 | 不迁移用户
- javascript - 将 div 动态附加到另一个 div
- visual-studio - 用于 Dotnetcore 功能的 Visual Studio 2019 应用程序参数
- arrays - 导入 .csv 文件时遇到问题
- java - Log4j 的 rollingPolicy.FileNamePattern 也在更改压缩文件的名称
- python - Discord bot 中的错误:Bot 没有属性“_default_help_command”
- r - 将向量传递给具有 R 中索引的 data.table
- python - 根据字典值过滤 DataFrame