在SQL中存储考勤数据

时间:2018-09-13 17:06:15

标签: c# sql database

这里有一个问题的答案:Database design for school attendance system

我目前正在做类似的事情,但还有其他一些问题。因此,学校大约有200名学生,但是这种情况正在不断变化。他们参加了大约200天,并且需要将出勤数据保留7年。这是我的创建表语句:

CREATE TABLE attendance (
    studentID INTEGER REFERENCES students (studentID),
    date      DATE,
    present   BOOLEAN
);

我的问题是,这是创建表的最佳方法吗?

我之前从未真正通过UI完成任何直接的数据库工作,所以我建议的解决方案是:

首先,使用C#DateTime.Today函数获取今天日期的局部变量; 另一个局部变量将从UI中获取StudentID; 然后,出勤值是一个布尔值,由用户界面再次设置并存储为0/1;

所有这些都合并到了插入到SQL语句中。

这是最好的方法吗?任何提示或帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我建议改为使用此表:

CREATE TABLE StudentAttendance (
    StudentId int  NOT NULL REFERENCES Students (StudentId),
    Date      date NOT NULL,

    PRIMARY KEY( StudentId, Date )
)
  • 我认为不需要present列,因为该行的存在或缺乏可以指示当天是否有学生在场。 / li>
  • 该表具有由StudentId + Date组成的复合键-这意味着不能有重复的记录(即每个学生每天只有1行)
  • “ Id”是Identity的缩写,它不是缩写,因此不应全部大写(即使用Id而不是ID)。

更新

在阅读了其他用户(尤其是@JNevill)的评论后,我意识到您可能想存储学生缺席的原因,这意味着您将需要一个IsPresent bit列(因为一行现在意味着一个-{present}或不存在),但可以将其扩展到Notes nvarchar(max),以存储用于不同类型的出勤记录的枚举值:

tinyint