我目前正在设计我的第一个数据模型,我对退化维度的这种特殊实现感到困惑。根据 Kimball 的设计技巧 46,可以使用代理键来实现笨拙的退化维度(字母数字)。我在一个事实表上有一个两列退化键要求,char(6) 和 varchar(30),每个事务行的粒度为一行。因此,与简单整数相比,DD 会占用大量空间;但是,这里没有要添加的其他上下文。最好保持原样并为其提供额外的空间,还是值得将其放入一个单独的维度,同时知道它会与事实表成比例增长(大约 25%,因为每个维度平均有 4 行交易)。
我目前正在设计我的第一个数据模型,我对退化维度的这种特殊实现感到困惑。根据 Kimball 的设计技巧 46,可以使用代理键来实现笨拙的退化维度(字母数字)。我在一个事实表上有一个两列退化键要求,char(6) 和 varchar(30),每个事务行的粒度为一行。因此,与简单整数相比,DD 会占用大量空间;但是,这里没有要添加的其他上下文。最好保持原样并为其提供额外的空间,还是值得将其放入一个单独的维度,同时知道它会与事实表成比例增长(大约 25%,因为每个维度平均有 4 行交易)。
在使用现代柱状存储时,需要对 Kimball 关于性能和空间使用的指导持保留态度。对于 SQL Server 数据仓库,事实表通常应存储为Clustered Columnstores。列存储中的低基数属性比未压缩的行存储便宜得多。
列存储中的宽基数和高基数属性确实对存储大小有很大影响,但对查询性能没有影响,因为只有在需要时才会获取和扫描列。您不必获取、缓存和读取整行。