Sql 解决多对多关系

Sql 解决多对多关系,sql,sql-server,ssis,Sql,Sql Server,Ssis,背景:一家公司有5000多名员工,在不同的城市都有办公楼。根据日期/项目,1名员工可在其中2栋或更多建筑中工作。该公司没有记录某人在哪一天在哪座大楼。他们只有一张包含所有员工数据和位置数据的工作表。此位置还包括员工开始前往该位置的起始日期。如下所示: EmployeeID | FirstName | LastName | email | BuildingID | Buildinglocation | startdate 1 | John | Gates | JG

背景:一家公司有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
的表。然而,这将是一个
多对多关系
,因此我想添加一个
桥接表


问题是:在哪里保存
开始日期
?我应该把它添加到桥接表中吗?在这种情况下,如何使用
startdate
填充它?或者我应该把它留在
位置表中
,使
员工
位置
之间的关系成为1-n关系吗

这就是我要做的:


我会将
startdate
放在您的桥接表中,因为
employee
location
将在它们连接在一起之前生成,然后填充
startdate
位置将只存在一次,因此通过为其创建单独的表,您可以减少工作量并节省内存。在桥接表中向startdate添加约束,以便在添加新行时,新行必须具有日期/自动填充,这将确保您将拥有尽可能最好的数据(如果有意义)

我将这样做:


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

您的表将如下所示:

雇员

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  

您的表格将如下所示:

雇员

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  

我会放在桥接表中,因为在位置表中每个位置只存在一次我会放在桥接表中,因为在位置表中每个位置只存在一次