【问题标题】:Need advice in designing tables in SQL-Server在 SQL-Server 中设计表时需要建议
【发布时间】:2009-12-17 16:40:18
【问题描述】:

我有一个包含项目的报价(存储在 QuoteItem 表中):
QuoteItemId、QuoteId、ItemId、数量等

现在,我需要能够在报价单中创建一组选定的项目并对其应用折扣。 这很简单,我再创建两个表:
组:GroupId、DiscountPercentage
GroupQuoteItem: GroupId, QuoteItemId

假设我的报价中有 30 项。 我创建了一个包含报价单中 1-20 项的组,并对其应用了折扣。 现在我需要另一个包含项目 10-30 的组,问题是关于那些内部 10 项目,我需要控制是否应该在另一个折扣之后的项目上应用折扣,或者它应该在项目的基本价格上。
例如,我要谈谈项目编号。报价中的 15:QuoteItem.Cost = 100 我申请了 10% = 90 的第一次折扣。
现在我想申请第二个折扣,我需要能够控制折扣应该在 100 上还是应该在 90 上。
当我有多个折扣组并且想要应用复杂的折扣架构时也是如此。

我们将不胜感激。

【问题讨论】:

  • 我认为您需要准确确定首先需要应用什么逻辑来计算折扣。它是特定折扣的属性,还是不能与其他属性组合?如果是这样,请将此属性与折扣 % 一起添加到组中。然后,您需要确定存在多个竞争性、不可组合折扣时的行为;这可能会在应用程序级别而不是在数据库内部处理。如果不确定应用程序逻辑的确切要求,就很难建议准确的数据库结构。
  • 我不是在谈论如何计算它。我首先想知道如何创建表结构,即什么应该是什么的父级。当然,任何技术 CLR 技巧或计算技巧也将不胜感激。

标签: sql-server-2005 architecture data-structures hierarchy


【解决方案1】:

我会考虑在 GroupQuoteItem 表中添加一列 GroupQuoteItem.Priority。此列将用于确定最终价格的查询。如果您有 N 个具有相同最高优先级的折扣,它们将相互堆叠(顺序无关紧要,这要归功于乘法的关联性)。

如果以后移除所有这些高优先级的折扣,则低优先级的折扣可以取而代之。这应该有助于您设置相当复杂的折扣结构。

我希望至少能给你一个起点。

【讨论】:

  • 这让我想到了添加一个 ParentGroupQuoteItemId,它告诉我们是否包含以前的折扣(或添加一个表 GroupQuoteItem_GroupQuoteItemParent 我可以将多个父母附加到一个折扣。
  • 然后在计算中我在attached parents中检查父母。
  • 我认为这个优先级专栏最适合我,我发布了一个关于如何在技术上做到这一点的问题:stackoverflow.com/questions/1934738/… 非常感谢!
【解决方案2】:

这真的取决于您自己的业务规则。您想在折扣后的价格或原价上应用折扣。当您提出这样的问题时,它有助于使用 SAMPLE Data,然后向我们展示预期的结果。

【讨论】:

    【解决方案3】:

    当您想要存储可以通过其他方式计算的数据时,这可能是标准化中罕见的情况之一。因此,在 QuoteItem 中,您可以有一个 Cost 字段和一个 DiscountedCost 字段。如果它们相同,则您知道没有应用折扣,如果它们不同,则应用了折扣。通过使用此字段,您还可以比较折扣已经是什么以及是否要添加额外折扣。事实上,您也可以将该数字存储在 ExistingDiscount 字段中。

    【讨论】:

    • 我的问题是我应该添加哪些列/表和关系。问题在于表结构而不是计算。
    • 当然,我理解并在我的回答中提出了这些。您需要添加 QuoteItem.Cost、QuoteItem.DiscountedCost 和 QuoteItem.ExistingDiscount
    【解决方案4】:

    为什么不在 Group 表中存储一个列,指定折扣是否可以与其他折扣一起累积,而不是仅应用于基本价格?您可以将该字段命名为“ApplyToBasePriceOnly”。

    除此之外,我同意 JonH 的观点,即很多这种逻辑应该放在业务规则中。我认为您的一般数据库结构看起来不错。

    【讨论】:

      猜你喜欢
      • 2011-11-13
      • 2013-11-26
      • 1970-01-01
      • 2011-10-28
      • 2014-10-22
      • 1970-01-01
      相关资源
      最近更新 更多