开票表和税务处理的最佳做法建议

时间:2016-05-15 13:14:09

标签: mysql sql

我正在寻找有关多租户应用的invoices / invoice_details表的建议,其中一些租户将注册纳税,有些则不会。

invoice_details表包含以下字段:

id   description    amount_ex_tax   tax_amount   amount_inc_tax

对于启用了税的租户,详细信息行可能包含:

id   description    amount_ex_tax  tax_amount  amount_inc_tax
1234 Repairs               100.00       20.00          120.00

对于已禁用税的租户,详细信息行可能包含:

id   description    amount_ex_tax  tax_amount  amount_inc_tax
1234 Repairs               100.00        0.00            0.00

然后,这会产生一个问题,即没有一列可以求和以找出发票金额。

选项1:按原样保存数据,但必须根据租户类型调整查询以请求正确的列。这使得各种SQL查询更加复杂。

选项2:我读过的建议是设置amount_inc_tax = amount_ex_tax,然后查询总是将相同的列相加以获取发票的值。这简化了SQL。它看起来像这样:

id   description    amount_ex_tax  tax_amount  amount_inc_tax
1234 Repairs               100.00        0.00          100.00

我认为这个建议会混淆代码本身,因为列名不包含推断内容。

选项3:另一个建议是创建一个total column,这样就可以随时访问总价值的列,无论是税还是不征税。

看起来像这样:

id   description    amount_ex_tax  tax_amount  amount_inc_tax  total_amount
1234 Repairs               100.00        0.00            0.00        100.00

在这种情况下,最适合您的最佳/做法/建议是什么?哪种方式可以避免将来出现哪些问题?谢谢你的建议!

1 个答案:

答案 0 :(得分:0)

如何将每一行中的总数一并排除?

然后,当你需要总数时,只需使用:

select (amount_ex_tax + tax_amount) as total_amount
. . .

您可以将其包装在视图中,因此total_amount始终是正确的。

在一行中包含算术总计几乎没有什么优势。如果有人在插入或更新数据时准确地进行计算,则会引入问题。一行中额外空间的成本可能会抵消性能方面非常微小的节省。

进行计算的一种情况是您希望列上的索引。但是,如果您想要一个索引,那么该列应包含的内容将是显而易见的。