关系数据库设计以存储每周出勤率

Relational Database design to store weekly attendance

我需要设计一个table来存储每周出勤率

表格格式为:

今天的日期, 注(如果每天缺席) 星期一 Y/N 星期二 Y/N 周三 Y/N 周四 Y/N 星期五 Y/N

如何设计 table 来存储每周记录的此类信息?

它应该是 1 table 列为 Date , Monday(bit) , MondayNote(varchar) , Tue , TueNote etc up to Fri ?

最好的方法是什么? TIA

为什么不存储一周中每一天的位,为什么不只存储带有标志和注释的实际日期?像这样:

CREATE TABLE Attendance(AttendanceID int primary key not null identity(1,1), StudentId int not null /* foreign key? */, AttendanceDate date not null, PresenceFlag tinyint not null default(1), Note varchar(max) null);

因此,不要使用单个日期和五个标志来表示日期,这会使获取实际日期的逻辑复杂化,而是存储一周中每一天的实际日期。这样会简化很多查询逻辑。

请注意,我使用的是 tinyint 而不是 bit。这是为了允许您执行算术运算。 SUM(PresenceFlag) 将为您提供一段时间内的总出勤率。您不能使用位数据类型执行此操作。您可以使用 CONSTRAINT 来确保只允许使用 1 和 0。

您可以使用 DATENAME(Weekday, AttendanceDate) 轻松地从日期中获取星期几。