我正在爲租賃發票生成創建一些數據庫模型。 發票由N個預訂時間範圍組成。DB架構:版本化的價格模型與發票相關的數據
每個預訂都屬於價格模式。價格模型是一組確定最終價格的規則(基準價格+季節價格+數量減少+ ...)。
這意味着發票內N張預訂的最終價格可能是一個複雜的計算,當然我想跟蹤最終價格計算的每個方面以便以後查看發票。
問題是,價格模型可能在未來發生變化。因此,在發票生成時,有兩種可能性:
(a)絕對不要更改價格模型。通過對其進行版本控制,使其不可變,並從發票中引用具體版本。 (b)將所有價格信息,折扣和額外費用存入發票中。這意味着很多數據,因爲發票包含N份預訂,部分預訂可能在季節價格的範圍內。 基本上,我會分解每個預訂到它的日子,每天我會有N行計算基本價格,折扣和額外費用。
可能表型號:
Invoice
id: int
InvoiceBooking # Each booking. One invoice has N bookings
id: int
invoiceId: int
(other data, e.g. guest information)
InvoiceBookingDay # Days of a booking. Each booking has N days
id: int
invoiceBookingId: id
date: date
InvoiceBookingDayPriceItem # Concrete discounts, etc. One days has many items
id: int
invoiceBookingDayId: int
price: decimal
title: string
我的問題是,我應該喜歡,爲什麼它的方式。
我考慮:
隨着溶液(a)中,發票將每一個數據被看作時間使用價格模型信息重新計算。我不喜歡這個,因爲算法可以改變。發票的「只讀」性質並不自然。 此外,價格模型的版本處理並不是一項簡單的任務,用戶需要了解版本概念,這增加了應用程序的複雜性。
有了解決方案(b),我生成了一堆嵌套的數據,它增加了架構的複雜性。
您更喜歡哪種方式?我錯過了什麼嗎?
謝謝