簡體   English   中英

在多租戶應用中需要一些有關發票數據庫設計的建議

[英]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 )更新交易表是嗎?

提前致謝。

首先要確保這種關系是一對多或多對多的。 如果您正在考慮一位擁有多張發票的員工,那么它就是一對多的關系,則可以如下創建表格:

EmployeePay Table: EmployeeID (PK) (Identity), Hours, Rate

Invoice Table: InvoiceID (PK) (Identity), EmployeeID (FK), InvoiceNumber, InvoiceDate, VATRate, TenantID

編輯:

我不知道您正在使用哪個數據庫,但是要進行增量序列檢查:

  1. 對於MySQL,請檢查此LINK
  2. 如果您使用的是Oracle,請檢查此鏈接

我建議您創建另一個可以稱為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM