您为自定义费用表的数据库选择哪种设计?为什么?
选项1)1表,UserId确定用户是否有自定义费用
ACCOUNT_FEE
TypeId
FixedRate
VariableRate
CurrencyId
UserId (UserId is null for default account fee, UserId is present for custom fee)
选项2)2个单独的表,一个用于默认费用,另一个用于用户的自定义费用
ACCOUNT_DEFAULT_FEE
TypeId
FixedRate
VariableRate
CurrencyId
USER_ACCOUNT_FEE
TypeId
FixedRate
VariableRate
CurrencyId
UserId
答案 0 :(得分:1)
我会以不同的方式做到这一点。创建一个名为“默认帐户”的用户并为其指定一个特定的ID,甚至是“0”(可能需要identity_insert)。这允许表遵循参照完整性规则 AND UserID上的索引可以快速选择默认帐户费用。
否则,
答案 1 :(得分:0)
我会选择第一个设计,原因如下:
随着设计的发展,无需更改两个表。
只有一个表需要前端CRUD代码。
获取客户对特定类型的“正确”费用很简单:
SELECT TOP 1 * FROM ACCOUNT_FEE
WHERE
(UserId=333 OR UserId IS NULL)
AND TypeId=2
ORDER BY UserId DESC
答案 2 :(得分:0)
我建议使用单表方法来定制费用,这意味着您可以根据需要添加更多自定义费用。
额外的改进 - 考虑在费用中添加有效期限和到期日,以便在定制费用有效时很容易找到,并允许在特定时间段内使用额外费用