SQL模式,用于保存员工进/离职/晋升等情况下员工行为的历史记录

时间:2020-03-06 14:54:40  来源:igfitidea点击:

我正在编写一个包含以下表的应用程序:(1)employee_type,(2)employee和(3)employee_action。

Employee_action是雇员的外键,如我们所料,它包含对发生的情况和事件日期的描述。

但是,员工可以随时间改变他们的类型(升迁,降职,搬迁等)。如果我的模式如此简单,那么我们可能会生成一份历史报告,其中说约翰在10年前外出送披萨时是该公司的首席执行官。

对于我来说,保存员工在执行某项操作时具有一定特征集(而现在不一定是他们的特征集)这一事实的最佳方式是什么?

我只是在这里说明我的问题。我的桌子多于3张,而员工的职位并不是我担心的唯一特征。对于我来说,仅对所有内容进行非规范化并创建包含所有可能的employee字段的历史记录表是不可行的。

谢谢,我希望这很清楚。

解决方案

我们是否考虑过引入一个将employee_type和employee链接的过渡表(多对多),然后将employee action链接到该过渡表?过渡表可以有一个用于时间戳记的添加列,这样我们就可以按时间顺序跟踪事物。

在SQL中表示时间数据非常棘手。关于这一主题有一本非常好的书,作者甚至可以免费在线免费获得该书:http://www.cs.arizona.edu/people/rts/tdbbook.pdf。

亚马逊页面位于http://www.amazon.com/Developing-Time-Oriented-Database-Applications-Management/dp/1558604367,但已绝版。

如果我们认真考虑对SQL中的随时间变化进行建模,那么这本书是一本必读的书。我从中学到了很多东西,只读了一次才知道大概是其中的25%:)

为了回答问题,我认为我们唯一的选择(如果我们无法进行架构的任何重新设计)是添加一个表,用于存储满足特定条件的时间跨度,例如,与雇员的表employment_history,一个职位(" CEO","送货员"或者这些职位的ID,如果我们已将其标准化为表格)和一个字段,则表示该职位的开始日期和结束日期。这样,我们就可以加入employment_history表来获取人们当前拥有的职位。当然,如果我们需要存储更多的"属性",而不仅仅是PITA呈指数增长的位置。阅读上面的书以进行更多讨论:)