解决多对多关系

时间:2016-09-05 09:13:48

标签: sql sql-server ssis

背景:一家公司拥有5000多名员工,并在不同城市设有建筑物。 1员工可以在2个或更多这些建筑物中工作,具体取决于日期/项目。该公司没有跟踪某人在哪个建筑物的哪一天。它们只有一张包含所有员工数据和位置数据的工作表。此位置还包括员工开始前往该位置的开始日期。它看起来如下:

EmployeeID | FirstName | LastName | email | BuildingID | Buildinglocation | startdate
1          | John      | Gates    | JG@.. | 2          | New York         | 01-01-2015
1          | John      | Gates    | JG@.. | 1          | Paris            | 01-05-2015
2          | Bill      | Jobs     | BJ@.. | 2          | New York         | 01-01-2016
3          | Carl      | Davis    | CD@.. | 3          | London           | 01-11-2015

我需要将其转换为多个表来创建数据仓库。我在想的是employee的表格和location的表格。但是,这将是many to many relation,因此我想添加bridge table

问题是:我在哪里保存startdate?我应该在Bridge表中添加它吗?在这种情况下,如何使用startdate填充它?或者我应该将其留在location table中,使employeelocation之间的关系成为1-n关系?

2 个答案:

答案 0 :(得分:2)

这就是我要做的事情:

我会将startdate放在您的Bridge表中,因为employeelocation会在它们连接在一起之前生成startdatelocation只存在一次,因此通过为它创建一个单独的表,您可以减少工作量并节省内存。在桥表中添加一个约束到startdate,以便在添加新行时,它必须有一个日期/自动填充将确保您将拥有可能的最佳数据如果这是有意义的

答案 1 :(得分:2)

您的表格看起来像这样:

员工

EmployeeID | FirstName | LastName | email   
1          | John      | Gates    | JG@..  
2          | Bill      | Jobs     | BJ@..  
3          | Carl      | Davis    | CD@.. 

建筑物

BuildingID | Buildinglocation  
1          | Paris  
2          | New York  
3          | London  

桥牌表

EmployeeID | BuildingID | startdate  
1          | 2          | 01-01-2015  
1          | 1          | 01-05-2015  
2          | 2          | 01-01-2016  
3          | 3          | 01-11-2015