首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于保存员工来/去/升职等时的员工操作历史的SQL模式

用于保存员工来/去/升职等时的员工操作历史的SQL模式
EN

Stack Overflow用户
提问于 2008-09-30 07:26:19
回答 3查看 1.5K关注 0票数 0

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

Employee_action是employee的外键,它包含对发生的事情和事件日期的描述,正如您所预期的那样。

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

对于我来说,最好的方式是保存这样一个事实,即员工在执行操作时具有一定的特征集,而这些特征在当前不一定是他们的特征?

我在这里简单地说明我的问题。我有比3多得多的表格,员工的位置并不是我唯一担心的特征。对于我来说,不能仅仅将所有内容都反规范化,然后创建一个包含每个可能的employee字段的历史表。

谢谢,我希望这是清楚的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-09-30 07:41:02

为了回答你的问题,我认为你唯一的选择(如果你不能对模式做任何重新设计)是添加一个表,在其中存储某个特定条件成立的时间跨度,例如,一个包含员工的表employment_history,一个职位(‘首席执行官’,‘送货男孩’,或者这些职位的ID,如果你将它们标准化到一个表中)和一个开始字段-以及一个用于员工拥有该职位的结束日期的字段。这样,你就可以加入employment_history表,获得人们目前拥有的职位。当然,如果你需要存储更多的‘属性’而不仅仅是位置,这将是一个指数级增长的PITA。阅读上面的书,了解更多讨论:)

票数 0
EN

Stack Overflow用户

发布于 2008-09-30 07:36:54

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

亚马逊的网页在http://www.amazon.com/Developing-Time-Oriented-Database-Applications-Management/dp/1558604367上,但已经绝版了。

如果您对SQL中的建模随时间变化很认真,这本书是一本必读的书。我从中学到了很多,只读过一次,我只理解了其中的25% :)

票数 1
EN

Stack Overflow用户

发布于 2008-09-30 07:29:33

您是否考虑过引入一个将employee_type和employee链接起来的转换(多对多)表,然后将employee操作链接到此转换表?转换表可以有一个额外的用于时间戳的列,这样您就可以按时间顺序跟踪事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/152074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档