用户可以拥有自定义结算费率,这可能会因用户而异。
您很可能会有一个默认的结算费用表,看起来像这样
FEE
Id
FeeTypeId
FixedCharge
VariableCharge
当您向客户收费时,您可以向他们发送发票等,然后您有一张表格可以存储可能看起来像这样的收费/收费金额!
USER_TRANSACTION_CHARGE
Id
UserId
FeeId
ChargeName
ChargeAmount
DateTime
如何针对特定用户的自定义结算率进行设计?
答案 0 :(得分:1)
看起来您的FEE表没有任何历史记录。能够在7年或10年前生产发票是一项常见的法律要求。 FEE记录可以更改,那么这对发票表中的链接(feeid)有何影响?
FEE: Id, FeeTypeId, FixedCharge, VariableCharge
USER_FEE: Id, UserId, FeeTypeId, FixedCharge, VariableCharge
您可以创建一个“覆盖”特定用户的FEE表的USER_FEE表。因此,对于每个给定的FeeTypeId,用户可能在USER_FEE中具有覆盖,或者可以回退到FEE。
至于USER_TRANSACTION_CHARGE,我认真挑战那里的链接栏FeeId,除非你保持FEE的历史,而FeeId + DateTime会链接到FEE。我会把那张桌子放到
Id, UserId, ChargeName, ChargeAmount, DateTime
我假设ChargeName以某种方式链接到FeeTypeId? ChargeAmount是从Fixed / VariableCharge
中得到的任何东西所以本质上,(USER_)FEE表用于查找值,但除此之外,它们作为值存储而没有反向链接到(USER_)FEE表,因为这似乎是一个简单的系统而没有版本
答案 1 :(得分:1)
保留默认费用表并添加列表用户,费用类型和覆盖的交叉引用。在结算时,通过分辨率确定费用(http://database-programmer.blogspot.com/2008/04/advanced-table-design-resolutions.html)该博客条目实际上以时间计费系统为例,接近你正在做的事情。
谨防虚假标准化 - 我的意思是您应该实现实际费用并将其永久保存在发票上。这是因为在创建发票时,实际收取的费用成为关于交易的历史事实,因此不是非正规化来保存它。外键仅用于识别物品/活动/费用类型,不是为了获得费用,费用保存在发票上并永久保存。
答案 2 :(得分:0)
默认费用应与实际收取的费用无关,因此User_Transaction_Charge必须丢失FeeID外键。
如果您需要存储用于生成User_Transaction_Charge的组件,请将它们存储在Charge中或作为单独的实体存储。
DEFAULT_FEE
Id
UserId
FeeTypeId
FixedCharge
VariableCharge
和
USER_TRANSACTION_CHARGE
Id
UserId
ChargeName
ChargeAmount
DateTime
USER_TRANSACTION_CHARGE_FEE
Id
UserTransactionChargeId
FixedAmount
VariableRate
或
USER_TRANSACTION_CHARGE
Id
UserId
ChargeName
ChargeAmount
FixedAmount
VariableRate
DateTime