我想按赛季对NFL足球数据进行基本分析。例如,我想要的Fact
是:
[NFL Fact]
- 季节(维度(
- 团队(维度(
- Coach(Dimension(
- 花名册(维度,一对多,可以是与Coach相同的"人员"维度(
- 获胜(国际(
- 损失(Int(
- 领带(国际(
- 疯狂季后赛(布尔(
- Won_Conference(布尔(
- Won_超级碗(Bool(
在人类可读的形式中,数据的示例如下:
在2019赛季
堪萨斯城酋长队
由Andy Reid
执教,他们的名单上有Patrick Mahomes、Travis Kelce
在常规赛中取得12胜
和4败
,0平
使进入季后赛
并赢得他们的联盟
且赢下超级碗。
如果上面是我们的事实表,那么如何对维度进行建模?这是我的第一次尝试:
Season
- 年份(键(
- AFC冠军(字符串或维度链接?示例:"DAL"(
- NFC冠军(字符串或维度链接?示例:"DAL"(
- NFL冠军(字符串或维度链接?示例:"DAL"或应该是"2018 DAL"?(
问题:AFC/NFC/NFL冠军应该是一串吗?还是应该引用Team
维度?为什么要做出一个选择而不是另一个?
Team
- 代码(字符串,例如:"DAL"(
- 季节(Int,示例:2018,key=代码+年份,示例:"2018 DAL"(
- 会议(字符串,例如:"AFC"(
- Division(字符串,例如:"South"(
- Name(字符串,例如:"Dallas Cowboys"(
- URL(字符串,例如:";https://nfl.com/dallas-cowboys"(
问题:我需要将关键字设置为Code+Year吗?或者我可以只使用Code吗?因为季节是从它所链接的事实表"派生"的?Season
应该是Integer还是链接到Season维度?
Person
(包括球员、教练等(
- 姓名
- 季节
- 团队(?(
- 职位
- 年龄
- 大学
问题:我需要在这里包括Team
吗?还是因为团队已经从事实表中推断出来而不需要?这个季节也应该链接到这里吗?
对以上格式的任何建议都将非常有用,谢谢!
我不擅长NFL足球,但可以为您提供如何管理实体和创建关系的基本想法。
首先,将事实表视为所有维度之间的主要管理器和连接器。
[团队]维度可能是缓慢变化类型-2(SCD-2(,因为您可能想要跟踪部门/会议等之间团队的变化,甚至是名称的变化。但要获得球队的季节性信息,你只需要加入[NFL事实]和[球队],所以不需要创建代码+年份键作为季节属性。
在你的例子中,[赛季]看起来不是一个维度,而是一个超过[NFL事实]的数据集市。因为[赛季]的每一行你都可以查询[NFL事实]。你可以从中获得AFC/NFC/NFL冠军+[团队]维度的会议属性。我建议用日期列表(年或YYYYMMDD或其他(而不是[季节]来创建[Date]维度。
[人物]你无法从[NFL事实]中获得。因为【NFL事实】中的最低粒度实际上是一支球队。因此,要管理球员/教练,你需要一个单独的事实表(因为明年球员可以转会到另一支球队等(。因此,这将是一个[个人]事实表,其中包含他们在特定年份效力的球队的代理密钥。这也意味着,教练/名册属性将成为这个新的[Perset]事实表的一部分,而不是如果[NLL fact],因为在您的示例中[NLL fact]只是收集球队统计数据。