关系数据库设计以存储每周出勤率
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) 轻松地从日期中获取星期几。
我需要设计一个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) 轻松地从日期中获取星期几。