我有以下格式的数据 .
RoadAccidents (pk_accidentIdentifier)
与关系 1..*
至 Vehicles(fk_accidentIdentifier, ordinalNumber)
->
自然PK(复合)和代理,这简直就是 rowID
) .
ordinalumber
只是一个迭代参与事故的车辆的数字 .
--Sample Row
Accident001, 1, [list of attributes of a vehicle] -- 1st car involved in an inc
Accident001, 2, [list of attributes of a vehicle] -- 2nd car involved in an inc
Vehicles
与表 Casualties
的 1..*
关系,其连接方式与车辆相同 RoadAccidents
含义:
Casualties (Compound PK: (fk_vehicleID, casualtyOrdinalNumber)
--Sample Row:
Vehicle001, 1, [list of attributes of a casualty] -- 1st casualty involved in inc
Vehicle001, 2, [list of attributes of a casualty] -- 2st casualty involved in inc
所以这种关系看起来如下 .
RoadAccidents 1..* Vehicles 1..* Casualties
另外,表 RoadAccidents
已经汇总了 numberOfVehiclesInvolved
和 numberOfCasualties
的度量 .
这里有3种(可能更多)方法 fact tables
-
RoadAccident -> Vehicles -> Casualties
上的两个JOINS - >删除带有聚合数字的列 - >将属性提取到各自的维度 . 松散的聚合数据 - >没有有意义的措施 - >在SQL Server数据工具中创建度量 . -
有3个事实表 .
FactRoadAccident
,FactVehiclesCollision
,FactCasaultiesInvInCollision
我面临的问题:事实表不应该直接用外键链接 . 因此,我可以提取尺寸,例如 .
DimRoadAccident *..1 DimRoadAccidentLocation
DimRoadAccident` *..1 DimWeatherConditions
事实表如下:
FactAccident
( fk_DimRoadAccidentPK, measure_numberOfVehicles, measure_numberOfCasualties
) .
用这种方法 . Vehicles
和 Casualties
的事实表只是一个代理人FK,其id为 Vehicle
或 Casualty
. 唯一的衡量标准是行数,意思是 - Vehicles
的数量或 Casualties
的数量 .
- 只保留1个事实表
FactAccident
( fk_DimRoadAccidentPK, measure_numberOfVehicles, measure_numberOfCasualties
) .
将维度链接 DimRoadAccident 1..* DimVehicle 1..* DimCasualty
并在数据工具中创建层次结构,并可能在维度上创建一些新的半加性度量 .
你会建议什么appraoch?
1 回答
使用Bridge表 . 当您具有多对多关系时,将使用桥表 . 看这里http://www.kimballgroup.com/2012/02/design-tip-142-building-bridges/