Database design 销售佣金数据库设计

Database design 销售佣金数据库设计,database-design,rdbms,Database Design,Rdbms,我已经使用Ruby On Rails构建了一个销售调试应用程序。该应用程序有三个实体。销售代理、银行和保险公司。销售人员可以根据每月或每周的固定金额或销售额的百分比从银行或保险或两者中获得佣金 我对数据库设计感到困惑。我看了这篇文章,但我不相信 提前谢谢。我猜任何个人佣金都可以来自银行或保险公司,但不能同时来自银行或保险公司。至少有两种方法可以处理此问题: 5表设计:代理、银行、保险、银行佣金、保险佣金。银行佣金参考银行,保险佣金类似 4表设计:代理、银行、保险、佣金。佣金参考银行或保险(两个字

我已经使用Ruby On Rails构建了一个销售调试应用程序。该应用程序有三个实体。销售代理、银行和保险公司。销售人员可以根据每月或每周的固定金额或销售额的百分比从银行或保险或两者中获得佣金

我对数据库设计感到困惑。我看了这篇文章,但我不相信

提前谢谢。

我猜任何个人佣金都可以来自银行或保险公司,但不能同时来自银行或保险公司。至少有两种方法可以处理此问题:

  • 5表设计:代理、银行、保险、银行佣金、保险佣金。银行佣金参考银行,保险佣金类似

  • 4表设计:代理、银行、保险、佣金。佣金参考银行或保险(两个字段,一个字段不为空)

  • 选择哪一种主要取决于这两种类型的佣金。如果它们除了佣金来源外都是相同的,则使用设计2。这样,您就省去了创建/修改模式和编写查询时的重复工作

    但是,如果来自银行和保险的佣金不同(需要存储多个不同的值-无论是现在还是将来,如果您预计这将发生),请使用design 1。您的查询可能需要以不同的方式处理佣金类型,而design 2通常会变得更加复杂


    如果有疑问,我会选择设计1。对未来的更改更加健壮,查询也可能更加高效—尽管这取决于查询。4表设计的另一个潜在问题是,您需要在源列可能包含空值的列上指定外键。如何正确处理这些外键的方法在数据库供应商和SQLServerCough之间有所不同,因此您会失去一些可移植性。

    非常感谢。也许我会选择设计1。是的,你是对的。设计1将更加坚固,并且易于维护未来的任何更改。