我们已经有了一个数据仓库的设计,四个维度表和一个事实表创建一个事实表:如何使用自然键
- dimUser ID,电子邮件,名字,姓氏
- dimAddress ID,城市
- dimLanguage ID,语言
- dimDate ID,的startDate,结束日期
- factStatistic ID,dimUserId,dimAddressId,dimLanguageId,dimDate,loginCount,pageCalledCount
我们的问题是:我们想要构建事实表,其中包括计算统计信息(取决于userId,日期范围)和填充外键。
但我们不知道如何,因为我们不知道如何使用自然键(这似乎是根据我们阅读的文献解决我们的问题)。
我认为一个自然的关键是userId,这在所有ETL作业中都是需要的,这些作业计算出尺寸数据。
但也有许多困难:
-
在ETL作业负载(),我们做INSERT批量插入IGNORE INTO删除重复=>我们不知道产生该代理键
- 如果我们创建元数据(包括一组DIMENSION_NAME,surrogate_key,natural_key的),这不会因为消除重复的工作
这个问题似乎是消除重复的策略。有更好的方法吗?
我们正在使用MySQL 5.1,如果它有任何区别。
什么是您的事实表追踪?按用户/地址/语言/“日期范围”登录?在我看来,地址和语言是用户的属性?而你的日期表有范围?为什么不只是在事实表中存储单个日期并汇总? –
这是真实设计的简化模型。但它基本上是每个用户(具有地址和语言)的登录和页面调用。 loginCount和pageCalledCount按日期范围汇总。 –
我真的不明白你的问题,但如果你正在寻找一种方法来生成和填充代理键,那么我提出了一个相当通用的方法,在[这个问题]中使用映射表(http:// stackoverflow。 COM /问题/ 12657674/SQL-datawarehousing-需要的帮助 - 填充 - 我维 - 使用 - TSQL - 选择 - 或-A-定)。报告数据库通常使用人造密钥,所以我不确定为什么要使用自然密钥;看起来你的问题主要是实现你的ETL过程,而不是你的设计,虽然我可能是错的。 – Pondlife