Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 发票数据库设计_Database_Database Design_Invoice_Discount - Fatal编程技术网

Database 发票数据库设计

Database 发票数据库设计,database,database-design,invoice,discount,Database,Database Design,Invoice,Discount,几天前我创建了一个处理发票的应用程序。我想知道如何最好地将折扣整合到我的发票中。我应该将其作为负数项目(在发票项目表中)还是在发票表中创建“折扣”列?这两种选择中的任何一种都会给您带来什么后果?例如,您希望有多个折扣,还是以后有非常明确的折扣?如果每张发票只有一个折扣,那么我就不会把它弄得比需要的更复杂。在我看来,把它放在发票表中更容易和更清楚——把它作为一个否定的条目会使物品的处理变得更加困难。 < P>我完全同意使它尽可能简单,但有一件事要考虑的是,是否应该免除任何项目的折扣?在这种情况下,

几天前我创建了一个处理发票的应用程序。我想知道如何最好地将折扣整合到我的发票中。我应该将其作为负数项目(在发票项目表中)还是在发票表中创建“折扣”列?

这两种选择中的任何一种都会给您带来什么后果?例如,您希望有多个折扣,还是以后有非常明确的折扣?如果每张发票只有一个折扣,那么我就不会把它弄得比需要的更复杂。在我看来,把它放在发票表中更容易和更清楚——把它作为一个否定的条目会使物品的处理变得更加困难。

< P>我完全同意使它尽可能简单,但有一件事要考虑的是,是否应该免除任何项目的折扣?在这种情况下,您需要在详细信息中添加bool字段,以记住哪一行应该有折扣。

我将其作为负值项目。原因是:

  • 开发票时,计算值永远保持不变是非常重要的;即使您的计算公式以后发生更改,您也可以正确地复制任何给定的发票。如果当时计算的值不正确,这一点也是正确的——它就是原来的值
  • 拥有价值金额意味着在特殊情况下手动调整很容易处理-例如,您的营销经理/会计可能会因为延迟交货而决定给予100美元的一次性折扣。这对于负值来说是微不足道的-只需添加另一行,但贴现率很难/麻烦
  • 每张发票可以有多个折扣金额
  • 它是完全灵活的——它有自己的生存空间,可以随心所欲。事实上,我会让折扣成为另一种“产品”(甚至可能是多种产品——每种不同的折扣原因一种,例如圣诞节、优惠券、推荐等等)
  • 对于它自己的项目,你可以添加一个原因描述,就像任何其他“产品”-例如“支付现金10%折扣”或其他任何东西
  • 您不需要任何特殊的代码或数据库列!只需像以前一样汇总项目并将其打印在发票上。“没有勺子(折扣)”:它只是另一个行项目-有什么比不需要更改代码/db更简单
  • 并非所有项目都应该打折-例如退款、退货、订阅(如果适用)。这变得太复杂,没有必要在数据库中表示折扣的业务逻辑。将计算等保留在应用程序代码中,将结果存储在数据库中
  • 拥有自己的项意味着计算可以任意复杂。这意味着随着复杂度的增加,没有数据库维护。维护/更改代码比维护/更改数据库容易得多
  • 最后,我成功地构建了一个发票系统,我采用了“项目”方法,效果非常好

这两种选择中的任何一种都会给您带来什么后果?例如,您希望以后有多个折扣,还是非常具体的折扣?谢谢您的快速回复。每张发票只有一个折扣。如果每张发票只有一个折扣,那么我不会让它比ne更复杂ed be.那么我应该把它放在哪里?放在发票表上还是作为负片添加?哦,很抱歉不清楚。在我看来,把它放在发票表上更容易、更清晰——我认为,作为负片添加会使项目的处理更加困难。+1,但仅此而已。这里提出了很多好的观点,但我不确定我同意整个结论。这可能取决于开具发票的行业。发票的稳定性是一个关键点;这可能通过确保发票开具时的价格数据(尤其是产品说明等)准确来处理(可能是通过将产品表中的相关数据复制到发票项目表或类似的内容中)。对一次性100美元折扣等具有“特殊产品代码”是可以的。[…续…][…续…]但是,我认为仅通过特殊项目处理折扣是错误的;通常项目有折扣,并且可以以百分比或金额的形式记录在项目中。如果有整体折扣,则可以记录在主发票中。在这两种情况下,都不需要空值来记录没有折扣的情况值0通常是适当的默认值(除非,确实,标价是例外)。@JonathanLeffler您提出了好的观点。如果有很多折扣,那么您可能是对的。但是,当定义了列但很少使用时,即折扣不是标准时,您最终会得到“稀疏”数据,这是设计的“红旗”对我来说,这很公平——“开具发票的行业”大致相当于“如果存在大量折扣”;这意味着应该根据实际使用情况做出决定。我怀疑是通用会计软件包(可以针对许多不同的系统进行定制)将允许我们概述的所有选项,因为我相信它们都在会计界的不同领域使用。我同意你的回答,我正要这么做,这时客户决定他可能希望获得多个折扣。因此,我不得不使用项目方法。