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