我正在尝试为我的大学项目建立一个考勤管理系统。 我计划每个月创建一个表。 每个表都有
OCT(Roll_no int ,Name varchar, (dates...) bool)
这里的日期将是1到30,并存储布尔值为现在或不存在。 这是一个很好的方法吗? 有没有办法在数据填充时为每天动态添加列。 另外,如何根据当天填充数据。
编辑:我打算制作一个只有两个选项(存在,不存在)的UI,对应每个读取的卷号。 所以,滚动nos。并且名字已经在表格中。我只是为每个日期添加对应于表格中每行的状态(存在或不存在)。
答案 0 :(得分:0)
我会使用Firebase。创建一个包含用户列表的节点。然后在使用内部创建一个考勤节点,其中包含参加日期的时间戳。这样就更容易解析了。您还可以为将数据从其他表绑定到用户以及向每个用户添加其他属性的能力留出空间。
或者做一个SQL等效项,它将创建一个用户表(名称和用户属性)的表列表,其中包含关联键(Primary keys在考勤表中Foreign keys的用户表中)考勤专栏,其中包含一系列代表参加日期的时间戳。
无论哪种方式,您的UI只需要处理时间戳,并能够使用日期解析它们。
虽然可能会随着时间的推移添加额外的列,但这不会是批量下载。
编辑:在您的情况下,您希望SQL列可以按月向您select提供您想要的任何月份。对于您的用户界面,在注入新的出勤率时,您只需add a column to the table if it does not already exist,然后继续提交。在搜索/查看时,您将处理空结果(比如说有2个月没有人参加。您可以抓住任何例外并继续显示。)
例如:
用户强>
主键 - 名称
1 - 乔
2 - 唐
3 - Rob
<强>考勤强>
外键 - 日期数组(2017年10月)
1 - 1508198400,1508284800,1508371200
2 - 1508284800
3 - 1508198400,1508371200
答案 1 :(得分:0)
我同意戈登的观点。这不是存储数据的好方法。 (这可能是一种很好的呈现方式)。如果您有一个包含以下列的表,您将能够存储所需的数据:
role_no(int) 名称(varchar) 日期(日期) 现在(布尔)
如果您想提取特定月份的数据,可以将其添加到WHERE子句中:
WHERE DATEPART(mm, [Date]) = 10 -- for October, or pass in a parameter
动态添加列将是一个痛苦的脖子,也是非常混乱