我使用Ruby On Rails构建销售调试应用程序。该应用程序有三个实体。销售代理,银行和保险公司。销售人员可以根据每月或每周固定金额或根据销售金额的百分比从银行或保险或两者获得佣金。
我对数据库设计感到困惑。我看了看这篇文章,但我不相信。 Database Design - sales from multiple sources
提前致谢。
答案 0 :(得分:2)
我猜测任何个人佣金都可以来自银行或保险公司,但不能同时来自两者。至少有两种方法可以解决这个问题:
5桌设计:代理,银行,保险,银行委员会,保险委员会。银行委员会参考银行,类似于保险委员会。
4桌设计:代理,银行,保险,佣金。委员会引用银行或保险(两个字段,恰好一个不为空)。
选择使用哪一个很大程度上取决于两种类型的佣金是什么样的。如果除了委托来源之外它们是相同的,那么请使用设计2.这样就可以在创建/修改模式和查询写入时节省自己的重复工作。
但是,如果来自银行和保险的佣金不同(有几个不同的值存储 - 无论是现在还是预期将来会发生这种情况),请使用设计1.您的查询可能需要处理佣金类型不管怎样,设计2通常会变得更加复杂。
如果有疑问,我会选择设计1.对未来的更改更加强大,并且查询的效率可能会更高一些 - 尽管这取决于查询。使用4表设计的另一个潜在的好处是,您需要在源列可能包含空值的列上指定外键。在数据库供应商 coughSQLServercough 之间正确处理此类外键的方式有所不同,因此您失去了一些可移植性。