【发布时间】:2015-11-17 08:51:35
【问题描述】:
我需要一些有关在多租户应用程序中设计发票架构的指导。
我有一个名为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 系列......意味着如果我们为同一个租户生成第二张发票,那么它应该增加 1 ??
-
没错,每个租户都应该有自己的一系列发票号码。
-
我建议不要这样做。数据库对象的数量不应依赖于数据库用户的数量。有很多方法可以计算下一个发票编号,而无需为每个租户创建一个序列对象。
-
@ZoharPeled 我同意你的观点,但除了使用序列或有一个列并增加它之外,我真的想不出更好的解决方案。如果能多分享一些方法就好了。
标签: sql-server database database-design