0

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

Employee_action 对员工来说是外键的,它包含对发生的事情和事件日期的描述,正如您所期望的那样。

但是,员工可以随着时间的推移改变他们的类型(晋升、降职、调动等)。如果我的模式就这么简单,那么您可能会生成一份历史报告,说明 John 在 10 年前外出送披萨时是公司的 CEO。

对我来说,最好的方法是保存员工在执行某项操作时具有某些特征的事实,而这些特征不一定是他们目前的特征?

我在这里简单地陈述我的问题。我的桌子比 3 多得多,而且员工职位并不是我担心的唯一特征。我不能只对所有内容进行非规范化并制作一个包含每个可能的员工字段的历史表。

谢谢,我希望这很清楚。

4

3 回答 3

1

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

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

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

于 2008-09-30T07:36:53.950 回答
0

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

于 2008-09-30T07:29:32.673 回答
0

为了回答你的问题,我认为你唯一的选择(如果你不能对架构进行任何重新设计)是添加一个表来存储特定条件成立的时间跨度,例如员工的表就业历史,一个职位(“CEO”、“送货员”或这些职位的 ID,如果您将它们规范化为表格)和一个字段用于员工担任该职位的开始日期和结束日期。这样你就可以加入employment_history 表来获得人们目前的职位。当然,如果您需要存储更多的“属性”而不仅仅是将成为指数增长的 PITA 的位置。阅读上面的书以获得更多讨论:)

于 2008-09-30T07:41:02.053 回答