Employee table http://muchmore.url.ph/table1.png
以下是我想为员工出勤记录设计SQL数据库表的方法。
这是一种正确的方法吗?
正如我们所看到的那样,从2014年1月1日到2014年12月31日,也是明年的增加日期列行。那么还有其他解决办法吗?
答案 0 :(得分:0)
您可以通过以下方式执行此操作
EmployeeMaster
EmployeeId int primary key
EmployeeCode nvarchar(20)
EmployeeName nvarchar(50)
AttendanceDetails
AttendanceDetailsId int primary key
EmployeeId int foreign key references EmployeeMaster Employee Id
DateofDay datetime
PresentAbsent bit
SalaryDetails
SalaryDetailsId
EmployeeId int foreign key references EmployeeMaster Employee Id
Salary float
在选择和显示时,您可以使用连接来播放记录。 你可以像数学中的Transpose一样转动记录。有很多方法可以实现它
答案 1 :(得分:0)
数据库旨在处理大量数据。不要担心表格中的行数。
确保您可以使用高效查询访问所有数据,这将比更少的行
更好写下您想要如何访问数据的一些想法,例如:
然后通过简单的查询找出你需要支持的表格结构
对于上面的三个,很明显你提出的表结构将使你的SQL变得困难。
更像EmployeeID | Date | Hours | Expected Hours | Absence Reason
的东西可能更有效
答案 2 :(得分:0)
是。您的表格处于非规范化状态。这不是设计数据库的正确方法。尝试规范化。将此表拆分为具有适当关系的多个表。搜索规范化,学习如何做到这一点。 例如,您不应该保留离开详细信息和工资详细信息以及出勤。员工可以通过他的ID与出勤,休假和工资表相关联,而员工详细信息将是一个单独的表,其中包含员工的个人详细信息。
你可以这样做:
EmployeeMaster{EmpID,FirstName,LastName,Address1,Address2,Address3,Address4,ContactNo,JoinnedDate}
SalaryMaster{EmpID, Basic, Variable, Allowance, Bonus, EPF,TAX}
LeaveMaster{ LeaveID,EmpID,StartDate,EndDate,Type,NoOfHalfDays)
Attendance { AttID, DateTimePunchedIn,DateTimePunchedOut}