我正在为租赁发票生成创建一些数据库模型。 发票由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),我生成了一堆嵌套的数据,它增加了架构的复杂性。
您更喜欢哪种方式?我错过了什么吗?
谢谢