支付表设计

时间:2013-08-09 08:31:26

标签: sql database-design

我有一个表格,用于保存项目中某个人的数据。该表有一个Start日期字段,可以为End个日期字段。因此,一个人正处于从StartEnd的项目中。

目前,他们总是对项目收费。但是我现在有了一个新的要求,即在一段时间内,它们可以是不可计费的,但仍然在进行该项目。因此,他们已被分配到该项目,并且正在工作,但由于某种原因,客户不会在分配期间的部分时间内收费,或者可能以较低的费率收费。

我的想法是有一个排除类型表,链接到具有开始日期和结束日期的人员分配表,以及Rate列,可以设置为零以免费,或者,作为一段时间的覆盖值。

这看起来像是有效的设计吗?由于该人在95%的时间内被收费,并且可能永远不会被排除在外,因此我有一个排除表更有意义。

如果有人知道如何更好地做到这一点,那就太好了。

目前,我还有一个“日历”表,我根据人员日程安排的开始/结束日期加入,以获得每日费率。那么,我也可以加入排除日期,看是否有覆盖率?

我可能会在设计中发现的问题很多联接基于:

 ON DateValue BETWEEN Start AND End

而且我不确定它们是最有效的连接。

3 个答案:

答案 0 :(得分:1)

我会将此“排除”表用作人员项目占用数据的单个存储空间。如果在没有更改费率的情况下将人员分配到项目一次,您将在此表中有一条记录。在其他情况下,您将在此表中显示费率变化的历史记录。

答案 1 :(得分:1)

如果一个项目的例外可能是一个或多个时间段(一对多),则使用排除表的设计是最佳设计。

示例:

June 1, 2013 to June 30, 2013

排除:

June 9, 2013 - 0 Rate
June 25 to 27 - 30% of Original Rate

但是,如果排除是可能的并且最多只能是一个单一期间(或一对一类型的关系),那么您可以将其放在与项目表中其他字段相同的字段上。

示例:

June 1, 2013 to June 30, 2013

排除:

June 9, 2013 - 0 Rate

答案 2 :(得分:0)

看起来您在特定时期内允许客户享受标准费率折扣。对于这种情况,您可以将费率设置为负数,例如.- $ 100 /小时,在折扣/排除表中设置免费资源费率。您可以通过添加折扣金额和标准金额来获取特定时期内该资源的最终费率。在您的设计中,您已经提到了排除和人员分配表之间的关系。您的设计将允许显示给客户的折扣。当您调整异常情况的计费时,这种方法是可以的。

如果您正在尝试在项目结算中进行更正,IMO,您应该在每个费率的人员分配表中单独输入持续时间。

在向客户生成发票时,您可以根据更正显示调整后的折扣率或新修订的结算。