2016-11-08 101 views
0

我需要设计一个表来存储每周出勤关系数据库设计用于存储每周出勤

形式的格式是:

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

如何设计表来存储它被记录在每周的基础这些信息呢?

是否应该是1个表格,其列为 日期,星期一(位),星期一注(varchar),星期二,星期二等注意到星期五?

什么是最好的方法? TIA

回答

1

而不是存储一周中的每一天的位,为什么不把实际的日期与国旗和笔记存储?事情是这样的:

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而不是位。这是为了让你执行算术运算。 SUM(PresenceFlag)会给你一段时间的出席人数。你不能用位数据类型来做到这一点。您可以使用CONSTRAINT来确保只允许1和0。

使用DATENAME(Weekday,AttendanceDate),您可以轻松地从一个日期中获得一周中的某一天。