[英]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.