[英]Need some suggestions for database design for Invoices in a multi-tenant app
我需要有关在多租户应用程序中设计发票架构的一些指导。 我有一个名为EmployeePay
的表,其中包含生成发票所需的所有信息。 发票表将包含发票编号,发票创建日期和VAT
税率。 我正在考虑为每个Tenant
创建一个Sequence
对象以生成发票编号。
EmployeePay Table: EmployeeID, Hours, Rate, InvoiceID (FK)
Invoice Table: InvoiceID (PK) (Identity), InvoiceNumber, InvoiceDate, VATRate, TenantID
数据库中可以有数百个Sequence对象,因为我必须为每个租户创建一个对象吗? 我还必须创建相同数量的存储过程,该存储过程将返回下一个发票编号(我更喜欢为每个租户分配一个独立的存储过程,而不是在select case语句中使用一个具有数百种选择的大型存储过程)。
另一个需要考虑的问题是,从理论上讲,基于交易表( EmployeePay
)插入到主表( Invoice
),然后使用其主键( InvoiceID
)更新交易表是吗?
提前致谢。
我建议您创建另一个可以称为InvoiceNumber的表,其中将包含InvoiceNumberId(Int) , TenantId(Fk) , CurrentSequenceNumber(Int) 。
CurrentSequenceNumber的意义在于它将是简单的整数,可用于生成下一个Invoicenumber。 InvoiceNumberId将是用于主键用途的Identity列(您可能有也可能没有)。
表的结构如下所示。
现在,您只需要创建一个存储过程,该存储过程将输入参数作为TenantId,并且有责任通过从上表中读取CurrentSequenceNumber来生成下一个发票编号。
例如,如果我们需要为ID为15的租户生成新的发票ID,则SP将具有您的业务逻辑,我假设仅创建一个以“ Inv-”为前缀的字符串,其前缀为CurrentSequenceNumber的增量值,因此Procedure的输出为。
INV-0009
然后,在生成此数字后,SP会将InvoiceNumberId 3的值增加到9。
因此,所有内容将仅由Single表和Single过程管理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.