我正在寻找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
是什么,在这种情况下都工作最适合你的最佳/做法/建议吗?哪种方式可以避免将来出现哪些问题?感谢您的任何建议!
真棒建议@戈登Linoff,有道理,并没有看到/想到这一点。感谢upvote。 – TheRealPapa
最新的MySQL版本支持也可以被索引的虚拟列。 –
@PaulSpiegel和任何有兴趣的人。 。 。支持在5.7。6,并记录在http://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html。 –