海尔面试题: 设计一个薪资发放表(oracle)

题目为: 海尔集团约有190000员工,现薪水发放制度为每半个月方法一次,请设计一个员工薪资表并附说明。(oracle)

求表结构,大家过来看看!

[quote]请问你的employeewage表里面记录的是员工半个月薪资数吗? [/quote]是的。
[quote]请假、旷工的时间怎么算呢[/quote]
这个看公司的规定,比如半个月请假时间不超多少,如果超过了扣多少money。
旷工也规定扣多少~~
这样需要另外建一个出勤表:
字段

[color=blue]员工id
请假时间
旷工天数[/color]
这样能够很大程度上解决数据冗余问题。

从减少数据冗余方面考虑,以及符合第三范式
[img]http://dl.iteye.com/upload/picture/pic/57291/1778a729-9980-3ba3-9c3f-2865b1585162.png[/img]

补充:字段类型的首字母小写,为了规范字段名一律小写。

修改之后

[img]http://dl.iteye.com/upload/picture/pic/57293/b4c31080-1e2c-3c8d-8e0d-72ea6e3be1d9.png[/img]

[quote]海尔集团约有190000员工,现薪水发放制度为每半个月方法一次[/quote]

考官可能要你从效率的角度考虑问题。

提供一种思路,实践中可以根据需求修改:

因为通常公司都用年为单位做报表,可以考虑按年来建表,比如说表名:
[color=red]pl_2010_salary_payed/color

字段列表:
employeeid(员工id)
b_jan(一月上半月发的工资)
a_jar(一月下半月发的工资)
b_feb(二月上半月发的工资)
a_feb(二月下半月发的工资)
...
b_dec(十二月上半月发的工资)
a_dec(十二月下半月发的工资)

注意, b_jan记录的是一月上半月[color=red]实际[/color]发放的工资,因为虽然每个员工有个固定工资,但是每半个月不一定实际发这个数(比如加班,请假等),这里为了简单,就记了个发放总数,根据需求是可以扩展记详细发放名目的。

然后再设计一个表,记录员工的合同工资,这个可以简单点设计:
[color=red]pl_2010_salary_contract[/color]
字段列表:
employeeid(员工id)
contract_salary(合同工资)
date (表示这个合同工资是从什么时候开始的)

如果员工的工资涨了,只需要在这个表里加一条记录就行了。当然,这个表本来也可以设计成和上面pl_2010_salary_payed类似,但是考虑到员工的工资不会经常变动,那样设计冗余比较大,就采用这种设计。

提供一种思路,可以再讨论。