【问题标题】:Database structure design with non-strictly repeating cycles非严格重复循环的数据库结构设计
【发布时间】:2012-01-11 11:44:31
【问题描述】:

我正在设计一个非常小的关系数据库来跟踪我在不同工作中的薪水。由于我有几份工作和一份工作,所以工作时间表几乎是固定的,从上午 9 点到下午 2 点 30 分是每个工作日,这是一个长期职位,我按月获得报酬。其他工作的时间安排是不确定的,非常随机,我按小时获得报酬。

这是我的困境。如果我在一张表中记录我为所有这些工作工作的每一小时以及我从中获得的相应工资,那么我将不得不将我从该固定时间表工作中获得的月工资除以一个月内的所有工作时间,这也意味着对于该固定时间表作业(例如上午 9 点到 10 点;上午 10 点到 11 点等),将有大量具有完全相同值的重复输入。另一方面,如果我每周或每月付款一次,它肯定适合我的固定时间表工作,但会丢失很多我应该为那些非重复循环工作时间跟踪的信息。我可以制作两张不同的表格,但两张不同的表格基本上会以不同的时间间隔记录同一个班级,这听起来明智吗?为了让事情更复杂一些,我确实想跟踪我的固定时间表工作的休假,因此实际上希望按天而不是按月进行跟踪。

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

【问题讨论】:

  • 有人可以在这里给出一些想法吗?
  • 或者如果你们懒得回答这个问题,能否请您指出一个关键字或方向,我可以进一步研究?这是什么问题?我已经完成了谷歌搜索,但没有得到任何地方。非常感谢。

标签: database-design


【解决方案1】:

我猜你有两个选择:

  1. 按照您的建议,有两个表,一个捕获临时付款,另一个存储常规(每周/每月)付款。 这里的优点是很好地分割了两种类型的收入。缺点是您的报告程序变得有点复杂。您总是需要根据如何分配定期付款的一些逻辑来添加这两个表。

  2. 您只保留一张桌子,但您在输入时将定期付款分配到不同的日子,例如如果您在 4 周内获得 200 美元,您将在每个工作日(假设每周 5 天)创建一个 10 美元的条目。

我个人会选择选项 2: 为定义间隔(每周/每月、每季度等)以及此付款的小时数的定期付款创建一个主表,例如每月 20 小时,100 美元。
创建一个表来捕获实际的详细信息,它可能看起来像这样: 日期/FromTime/NumberOfHours/Type/AmountEarned/RegularIncomeID

然后,Type 将定义它是常规付款还是临时付款(允许某种报告详细信息),RegularIncomeID 将是指向您的主表的链接。 对于正常获得的时间,我要么将 FromTime 留空(如果您打算将该字段保留为唯一索引的一部分,因为某些数据库系统不允许在唯一/主索引中使用 NULL 值,则可能不好)或输入默认值比如凌晨 0 点。

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

【讨论】:

  • 谢谢库马拉!你的解释很清楚。我非常感激。这里只是一个后续问题:这个问题属于什么问题?我可以称之为数据库设计问题或数据库建模问题吗?
  • 我会把它放在数据库设计和数据库建模两者之下
猜你喜欢
  • 2011-04-28
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 2013-02-17
  • 2021-08-10
  • 1970-01-01
相关资源
最近更新 更多