【发布时间】:2016-11-24 14:37:56
【问题描述】:
我正在使用 Ruby On Rails 构建一个销售委托应用程序。该应用程序具有三个实体。销售代理,银行和保险公司。销售人员可以根据每月或每周的固定金额或销售金额的百分比从银行或保险或两者中获得佣金。
我对数据库设计感到困惑。我看了这篇文章,但我不相信。 Database Design - sales from multiple sources
提前致谢。
【问题讨论】:
标签: database-design rdbms
我正在使用 Ruby On Rails 构建一个销售委托应用程序。该应用程序具有三个实体。销售代理,银行和保险公司。销售人员可以根据每月或每周的固定金额或销售金额的百分比从银行或保险或两者中获得佣金。
我对数据库设计感到困惑。我看了这篇文章,但我不相信。 Database Design - sales from multiple sources
提前致谢。
【问题讨论】:
标签: database-design rdbms
我猜任何个人佣金可以来自银行或保险公司,但不能同时来自两者。至少有两种方法可以解决这个问题:
5 表设计:Agent、Bank、Insurance、BankCommission、InsuranceCommission。银行佣金参考银行,类似保险佣金。
4 表设计:代理、银行、保险、佣金。佣金引用银行或保险(两个字段,恰好一个不为空)。
选择使用哪一种很大程度上取决于这两种佣金的形式。如果除了佣金来源之外它们相同,请使用设计 2。这样您就可以省去创建/修改架构和查询编写方面的重复工作。
但是,如果来自银行和保险的佣金不同(需要存储几个不同的值 - 无论是现在还是如果您预计将来会发生这种情况),请使用设计 1。您的查询可能需要处理佣金类型无论如何都不同,设计 2 通常会变得更复杂。
如果有疑问,我会选择设计 1。对未来的变化更加稳健,并且查询的效率也可能更高 - 尽管这取决于查询。 4 表设计的另一个潜在问题是,您需要在源列可能包含空值的列上指定外键。正确处理此类外键的方式因数据库供应商而异coughSQLServercough,因此您失去了一些可移植性。
【讨论】: