Database-Design

年度預算上限建議的 ERD

  • September 13, 2021

我正在開發涉及年度預算上限的 webdev,但我無法專心設計這樣的預算上限(我的第一個涉及預算的項目)。所以我需要一些建議。

所以場景是每年都會有一個項目的預算上限,其中項目預算將分為活動、子活動和採購細節等衍生品,不能超過每個家長的預算。

場景範例

場景範例。

ERD 範例 ERD 範例

我知道我的設計對預算部分沒有意義,因為我需要知道如何正確地建立預算關係。如果我在將預算插入購買細節(層次結構中的最低層)時使用觸發器進行同步並且父母將獲得子預算值的總和,這是否可能?

老實說,這看起來像是一個經典的分層問題,通常可以通過每個唯一項目的單個表和一個包含每個父子關係的單獨的自引用表來解決。這是製造業中的一個常見問題,但即使在預算案例中也明顯適用。

因此,您有一系列項目,它們在對象定義上都相似,但層次結構不同,a Program, Activity, Sub-Activity。與其為每個定義單獨的表,您應該有一個可能稱為 的表BudgetItems,它將儲存這些對象的每個實例的唯一列表。該表可以有一個單獨的欄位來標識它的對像類型BudgetItemType。(它也會有它的IdName列。)

然後,您應該有一個表來儲存 all 之間所有可能的父子關係BudgetItems,可能稱為BudgetItemHierarchy(或您認為合適的任何更好的名稱)。它將有兩列,BudgetItemParentId和,都是對您的表BudgetItemChildId的外鍵引用。BudgetItems還會有一BudgetAmount列對應於 BudgetItemChildId.

擁有這兩個表將允許您儲存任意數量的預算對象和預算對像類型,而不會有許多冗餘表。然後在大多數現代關係數據庫管理系統中,您可以使用遞歸,例如遞歸 CTE(注意此資源是 Microsoft SQL Server 特定的,但通常在其他數據庫系統中可用)來計算BudgetItems任何子集或完整集的任何列表他們的層次結構與每個級別的所有個人BudgetAmounts,甚至是任何數量或所有級別的匯總總和。

引用自:https://dba.stackexchange.com/questions/299470