将表关系更改为最低级别

时间:2019-02-26 03:47:32

标签: sql sql-server tsql

我有4张桌子:Project, Design, Customer, Contacts

一个项目可以有多个设计,每个设计都有客户,并且客户有联系。

为了检索项目的联系人,我的团队在其中有一张桌子

ProjectKey CustomerKey ContactKey

它们是3个表(项目,客户和联系人)的主键

因此,此表实际上有很多数据。问题是我们不想将客户和联系人与Project关联,我们希望与Design关联。

在不影响实际数据的情况下更改此关系的最佳方法是什么?我的意思是,现在我们希望每个设计都可以有自己的联系人和客户,所以一个项目可以在不同的设计中有两个称为“客户1”的客户,但是他们可以有不同的联系人。

1 个答案:

答案 0 :(得分:0)

您有两个选择,

第一个是将DesignKey包含在事实表中,例如

ProjectKey, DesignKey, CustomerKey, ContactKey

第二个是拥有两个事实表

  1. ProjectKey, DesignKey
  2. DesignKey, CustomerKey, ContactKey

选项一似乎更好。重要的因素是您错过了原始事实表中的中级设计。由于同一客户的联系会因不同的设计而改变,因此必须包括在内。