具有非严格重复周期的数据库结构设计

时间:2012-01-06 03:40:35

标签: database-design

我正在设计一个非常小的关系数据库,用于跟踪我从不同工作中获得的工资。由于我从事多个工作和一份工作,工作时间表几乎是固定的,每个工作日从早上9点到下午2点半,这是一个长期的职位,我每月都会得到报酬。其他工作日程安排不确定且非常随机,我按小时收到工资。

这是我的困境。如果我记录我为所有这些工作而工作的每个小时以及我从中得到的相应工资,在一张表中,那么我将不得不将我的月工资从那个固定的工作时间除以一个月的所有工作时间,并且它还意味着对于该固定的计划工作(例如上午9点到上午10点;上午10点到上午11点;等等)将有大量重复输入具有完全相同的值。另一方面,如果我每周或每月支付一次付款时间,它肯定适合我的固定时间表工作,但会丢失很多我应该跟踪那些非重复周期工作时间的信息。我可以制作两个不同的表,但是两个不同的表基本上会以不同的时间间隔记录同一个类,听起来是否明智?要添加一些更复杂的东西,我确实希望跟踪我的固定计划作业的叶子,因此实际上需要按天而不是几个月来跟踪它。

这里的任何建议都将受到高度赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

我猜你有两个选择:

  1. 如您所建议的那样,有两个表,一个用于捕获特别付款,另一个用于存储常规(每周/每月)付款。 这里的优点是很好地分割了两种类型的收入。缺点是您的报告编程有点复杂。您总是需要根据一些逻辑如何分发常规付款来添加这两个表。

  2. 您只保留一张单人桌,但是您在不同日期入境时分发定期付款,例如:如果您在4周内获得200美元,那么每个工作日(假设每周5天)可以创建10美元的条目。

  3. 我个人会选择选项2: 为常规付款创建一个主表,用于定义间隔(每周/每月,每季度等)以及此付款的小时数,例如:每月20小时,100美元 创建一个表来捕获实际的细节,然后看起来像这样:     日期/ FROMTIME / NUMBEROFHOURS /类型/ AmountEarned / RegularIncomeID

    然后,类型将定义它是常规付款还是特殊付款(允许某种报告详细信息),而RegularIncomeID将是指向主表的链接。 对于常规获得的时间,我要么将FromTime留空(如果您计划将该字段保留为唯一索引的一部分可能不好,因为某些DB系统不允许在唯一/主索引中使用NULL值)或输入默认值比如0AM。

    选项二的优势在于它使您的所有报告变得更加容易,例如显示过去3个月每天的工作时间。尝试使用选项1,也可能这样做,但是你需要添加很多编程逻辑,而选项2则是一个简单的SQL语句。