再征意见:考勤系统之刷卡时间用什么字段类型
应客户要求,我之前开发的考勤系统重新编写,后台用M$SQL
有一问题想再次征求各位意见(未做过2000人以上考勤系统的请不要答)
下面是每日员工出勤数据表结构的一部份 wDayCard
日期
工号
上班1
下班1
上班2
下班2
上班3
下班3
:
:
其中的上班?来源是考勤机里的刷卡时间,它的字段类型您建议用SmallDateTime还是Varchar或者是Int?
发表你的经验, 即帮我,也帮后来人
谢谢参与
[解决办法]
没作过2000人以上的考勤,帮顶
[解决办法]
datetime
[解决办法]
使用datetime
[解决办法]
用datetime
[解决办法]
还是datetime
做个约束
[解决办法]
还是datetime
[解决办法]
没做过2000人
时间类型
格式统一
也方便比较
[解决办法]
没作过2000人以上的考勤
[解决办法]
datetime
[解决办法]
当然是datetime了
[解决办法]
建议用int或者varchar
用datatime数据处理速度相当慢
[解决办法]
2007-09-18 11:12:10
smalldatetime 4字节
datetime 8字节
varchar 19字节
个人认为 smalldatetime
至少做索引较好,字节少啊
[解决办法]
高手们能写选择的原因吗?学习一下
[解决办法]
如果int或者varchar比较好
那为什么MS还要把datetime类型创造出来
[解决办法]
问我撒...2000人这都是小厂,你这个用什么类型都没关系,主要是考勤处理哪里看你是怎么优化地,不过我估计你这个考勤算法是按时间类来算地,八达马用是MSSQL2000地,时间用的是VARCHAR地,要注意啦人多的厂用MSSQL数据用不了多久你就知道了是不能和什么ORACLE等去比地。八达马是港资地,服务做的还不错,但是你如果认为他的考勤软件也做的非常好地话那么,我个人的观点是NONONO...,注意啦,是个人观点。
[解决办法]
不行,你说的我的原来专业上了,我再说几句, 考勤软件这东西,你要做的好其实要发很多的工夫地。给分哈...有什么问题,我帮你解答,我对这东西太专业了...
[解决办法]
时间用INT类型没有用过,在后续代码中,没有什么方不方便地,具体看你说的那方面咯...你是想用那一种速度快是吧,根据数据库原理用INT的快。不过你说维护方面和以后的扩展方面肯定是VARCHAR好多了,字符型吗,你什么都可以向里面放咯。如果你对考勤要求不多,或者公司的GDP还不错,八达马还马马虎虎啦。
[解决办法]
值得学习
[解决办法]
mark
[解决办法]
个人认为用datetime比较合适。 因为如果用Varchar做时间函数操作时还要进行隐性的时间格式转换。这可能会耗一下资源。
[解决办法]
create table t(id int identity(1,1),cdate datetime,ddate smalldatetime)
insert into t select getdate(),getdate()
insert into t select getdate(),getdate()
insert into t select getdate(),getdate()
select * from t
id cdate ddate
----------- ----------------------- -----------------------
1 2007-09-21 16:39:02.877 2007-09-21 16:39:00
2 2007-09-21 16:39:03.347 2007-09-21 16:39:00
3 2007-09-21 16:39:03.580 2007-09-21 16:39:00
比较一下,还是用smalldatetime比用datetime好些,因为占的字节少,建立索引也快些
[解决办法]
我們的公司7000多人﹐考勤系統用的是smalldatetime
[解决办法]
员工考勤表最好采用主从表显示
主表部分字段
员工id
部门id 有利于跟踪历史,有些客户需要查询N月前某部门某天出勤多少人,没有它就麻烦了
职位id 同上
日期
刷卡时间 varchar(100) 从字符串所有打卡时间 如 07:59 13:20 17:30 19:30 无限扩展
班次id
班次名称
状态 正常 /锁定,当日的考勤核对好,可以锁定
从表部门字段
员工ID int
部门ID int
考勤日期 DateTime
考勤类型 int
考勤子类型 int
开始时间 DateTime
始束时间 DateTime
工时 numeric(8,4)
工日 numeric(10,8)
一个员员一天的考勤结果例如, 这样就能详细地记录一天个时刻点的信息。
而目前大多数考勤软件一个员工一天只有一条记录,记录信息很不详细
08:00 – 08:01 迟到
08:01 – 10:00 出勤
10:00 – 11:30 事假
11:55 – 12:00 早退
13:00 – 13:02 迟到
13:10 – 13:30 休假
13:30 – 15:30 出差
15:30 – 17:30 缺勤
18:00 – 01:00 加班
23:00 - 01:00 夜班
字段说明:
考勤情况 考勤子类型
1 休息 1平时休息/2周休日/3法定休息
2 出勤 班次ID
3 请假 请假类型(事假、病假等)
4 加班 1平时加班/2周休日加班/2法定加班/4..用户自定义.
5 缺勤 0
7 出差 0
8 迟到 0
9 早退 0
10 夜班次数 用户自定义(1小夜班, 2大夜班)
0 异常 异常信息代码(系统自定, 1 缺少上班卡、2、缺少下班卡等)
工时,工日冗余的作用::生产班、办公室班每天8小时, 但保安每天12小时,这样关联到很多问题, 例如保安请假4小时,不是半天,而是1/3天。如果从15号保安班调到生产班,
那么15号之前的请假4个小时与生产班的请假4个小时的天数是不一样的,
不得统一处理半天肯定会给薪资计算带来误差,
[解决办法]
up 学习 mark
[解决办法]
帮顶
[解决办法]
本人没有看过科艺嘉的系统.
[解决办法]
datetime
我们公司就用的这种
[解决办法]
Varchar
我们给学校做的考勤系统所有的时间都是用的Varchar
用的时候转换一下就可以了
[解决办法]
tsp3ng的数据库设计,说实话之前从未想过.
在考虑中.
哪位还有什么建议,大家探讨一下.
===
考勤结果表是整个系统使用频率非常高,它的更改将会带来整个系统的更改。
因此设计高频率表的结构时请特别仔细.
[解决办法]
datetime 处理会方便很多,数据库里有大量的函数做复杂处理,用其它类型还要转换,麻烦!本身有这个类型就有这个类型的本身特点,2000d多人的记录也不是很多吗!
[解决办法]
我们做2000多的,做10000多的
用的是datetime()
[解决办法]
表结构设计已经出现问题!
[解决办法]
一个员员一天的考勤结果例如, 这样就能详细地记录一天个时刻点的信息。
而目前大多数考勤软件一个员工一天只有一条记录,记录信息很不详细
08:00 – 08:01 迟到
08:01 – 10:00 出勤
10:00 – 11:30 事假
11:55 – 12:00 早退
13:00 – 13:02 迟到
13:10 – 13:30 休假
13:30 – 15:30 出差
15:30 – 17:30 缺勤
18:00 – 01:00 加班
23:00 - 01:00 夜班
俺只做啦提前加班,上班下班,及晚上加班就够麻烦的啦!
现在还要加上事假,出差工,休假还有半小时的真是难算!
[解决办法]
班别代码 Char(2)
班别说明 VarChar(10)
上班1上限 VarChar(5)
上班1 VarChar(5)
上班1下限 VarChar(5)
下班1上限 VarChar(5)
下班1 VarChar(5)
下班1下限 VarChar(5)
=======================================
班次表建议采用主从表,
班次主表 保存一个班次的公共信息,如,班次ID, 班次说明....
班次从表 班次中的一个时段占用一条记录,一个班次如有三个时段就应该有三条记录。
建议: 凡是表的关键字,对用户来说最好是不可见的, 这样可以提高关键字的稳定性。
例如,上述的班别代码对用户可见很不稳定,用户任意更改将需要同步更新所有引用到的表,必然会带来程序的不稳定性。
[解决办法]
也帮忙顶下
[解决办法]
用DATATIME类型的,我做过很多大工厂的考勤!有兴趣可以交流
[解决办法]
djdeng 能不能一套考勤系统适应你做过的所有客户?
[解决办法]
导入过的文件把文件名做个标记就可以了
[解决办法]
从考勤机里下来的数据,有一种考勤机是按下载时间命名文件, 每下一次生成一个文件.
用什么方法快速判断哪些文件已导入数据库,哪些文件还没有?
参考方法:先备份好一打卡数据文件到另外一个备份磁盘,再把当前目录下的打卡文件导入考勤系统中,导入完后删除当前的导入文件即可。(这过程可以通过程序来完成)
是于打卡时间使用什么数据类型,一般使用datetime即可,在程序客户使用端显示时候通过时间格式化来调整不同的时间显示格式。这样可以为以后扩展和考勤数据跨天处理提供参考。
[解决办法]
我见过用char的