【问题标题】:Table design for payments付款表设计
【发布时间】:2013-08-09 18:27:53
【问题描述】:

我有一个表格,其中包含一个项目人员的数据。该表有一个Start 日期字段和一个可为空的End 日期字段。所以,一个人在一个从StartEnd 的项目中。

目前,他们始终对项目计费。但我现在有一个新要求,即在一段时间内,他们可以不计费,但仍在从事该项目。因此,他们已被分配到该项目,并且正在工作,但由于某种原因,客户在分配给他们的部分期间没有被计费,或者可能以较低的费率计费。

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

这看起来像是有效的设计吗?由于此人 95% 的时间都在计费,而且可能永远不会有任何排除,所以对我来说,有一个排除表更有意义。

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

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

我的设计可能会发现很多问题是基于:

 ON DateValue BETWEEN Start AND End

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

【问题讨论】:

    标签: sql database-design


    【解决方案1】:

    如果异常可能是一个项目的一个或多个时间段(一对多),那么使用排除表的设计是最好的设计。

    例子:

    June 1, 2013 to June 30, 2013
    

    排除:

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

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

    例子:

    June 1, 2013 to June 30, 2013
    

    排除:

    June 9, 2013 - 0 Rate
    

    【讨论】:

    • 是的,它是一对一或多。大多数情况下,没有排除。有时,资源有一个例外。时间更少,但他们可能会说“在您拥有资源的 6 周内,他将按 100 美元/小时收费。在最后一周,您可以免费拥有他(0 美元/小时)。由于他是该项目的新手,您可以让他在第一周半价(50 美元/小时)。所以,我认为这个设计很适合。会有两个排除条目......一个半价一个时期,一个免费时期。
    • @Craig:如果是这种情况,那么正如我所提到的,您的设计是我所知道的最佳解决方案,即通过为某些日期添加排除或例外表,其 0 或小于原始日期率。
    【解决方案2】:

    我会使用这个“排除”表作为个人项目职业数据的单一存储。如果一个人被分配到一个项目而费率没有变化,您将在此表中有一条记录。在其他情况下,您将在此表中查看费率变化的历史记录。

    【讨论】:

    • 我不太明白。因此,在 99% 的情况下,一个人被分配到一个项目,并按持续时间计费。但有时,一个人会加入一个项目三周,但咨询公司决定说三周的最后三天,客户免费拥有他。所以,计划是有一个排除表,有开始/结束日期和费率。在这种情况下,开始和将涵盖三天,“速率”将为 0。
    • 在工人加入项目 3 周的情况下,为什么不简单地有一个包含两个条目的表,一个用于前 2½ 周的正常速率,另一个过去 3 天以 0 费率?在正常 (99%) 的情况下,您只需在整个持续时间内每人输入一个条目。
    • 项目与人的关系如何在您的数据库中实现?
    • 我只是不喜欢 db 中“排除”的想法。我的意思是你可以有个人、项目和职业的表格。然后职业表将保存我们正在谈论的数据。
    • 它更像是一种资源,与项目相关联。然后将一个人分配给该资源。因此,一个项目有一个项目经理(即资源),该资源的收费为 110 美元/小时。该资源每天工作 8 小时。然后可以将一个人分配给该角色,但不承担任何责任。因此,资源具有 ProjectId(喜欢项目表)、StartDate、EndDate 和 HourlyRate,以及“EcpectedHoursPerDay”。
    【解决方案3】:

    您似乎允许在特定时期内向客户提供标准费率折扣。对于这种情况,您可以将费率设置为负值,例如 - 100 美元/小时,以在您的折扣/排除表中免费设置资源费率。您可以通过添加折扣金额和标准金额来获得该资源在特定时期的最终费率以获得净金额。在您的设计中,您已经提到将在排除和人员分配表之间建立关系。您的设计将允许显示已给予客户的折扣。当您针对例外情况调整计费时,这种方法是可以的。

    如果您尝试在项目计费中进行更正,IMO,您应该在人员分配表中为每个费率与持续时间分别输入。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多