数据仓库——雪花模式以及层次递归

层次结构

钻取

向下钻取:对某些代表事实的报表中添加维度细节
向上钻取:从某些代表事实的报表中去除维度细节

属性层次

提供了一种自然方法,用于顺序地在不断深入的层次上组织事实。许多维度可以被理解为包含连续主从关系的属性层次。此类层级的最底层代表维度中描述最低级别的详细信息,最高层代表最高级别的概要信息。每一个级别都可能有一个属性的集合,该集合与下一级别存在主从关系。
在属性层次中钻取:一些软件工具将钻取的概念与属性层次的概念关联起来。这些工具将层次作为预先定义的钻取路径。查询事实时,通过在层级的下一个级别中添加一个维度属性来完成向下钻取,上钻即通过去除当前层次结构级别的属性而开展的。

维度的多重层次结构

通常在维度中确定多重层次结构,每一个层次结构包含维度的所有属性,但将属性组织起来的方式不同。用户看到并认为是相同信息,在这些层次中是完全不同的表现方式。这些层次结构都是有效的,每一种方法都是分解维度中信息的有效方法。

维度交叉

某些情况下,期望的钻取路径可能会从一个维度表到达其他维度表。

回避层次结构

可以完全不用借助层次结构来添加维度细节信息的两个特性使之成为可能,首先,属性的基数或者给定的实例值的数量,不要确定它属于那个层次结构,其次在多个双亲中能找到一些实例值。

实例层次结构

层次的结构的另外一种形式可能存在于维度的实例中,实例层次结构也可以用来分析事实,将通过下钻多级拥有者的方法来探索数据

文档化属性层次结构

  1. 配置基于属性的钻取特征
  2. 信息收集
    文档化属性层次结构的好处
  • 确认维度一致性
  • 多维数据集设计与管理
  • 聚集设计与管理

雪花结构

通常,星型连接只包含一张事实表,但是在数据库设计中要创建一种雪花结构的复合结构需要多张事实表结合。
雪花结构中,不同的事实表通过共享一个或多个公共维表连接起来。或者将事实表和维表结合起来形成一个类似雪花的结构。
维度规范化的方法

  • 对一些维度表进行部分规范化,对其他维度不做修改
  • 对一些维度表进行完全规范化,对其他维度不做修改
  • 对每个维度表部分规范化
  • 对全部维度表完全规范化
    优势与劣势
    优势
  • 减少相对原维度表很少的空间
  • 规范化的结构更利于更新和维护
    劣势
  • 模式比较复杂,用户不容易解释
  • 浏览内容困难
  • 额外的连接将使查询性能下降

什么时候使用雪花模式

雪花化的背后原则是,将维度表中基数小的属性移出,构建新的表

  • 大维度表,可节约空间
  • 用户浏览子维度的几率相对于其他维度来说更大
  • 如果结构和工具在雪花模式中可以工作得更好,这将是使用雪花模式的理由

雪花结构与建模问题

  • 多值属性,维度表和事实表之间存在的标准的一对多关系被破坏了,维度属性包含多个值。
  • 迭代的实例层次结构,一些层次结构不能定义为属性之间的关系
  • 重复组,当一组属性在维度表中不止出现一次

支架表

重复的属性被放置到一个单独的支架表中,该表有自己的代理键,在原始的维度中,迁移属性被替换为引用支架表的一个或多个外键。
支架表可以用于合理化ETL并减少行长度,但是代理了复杂性为题,并且可能会对查询的性能造成影响,如果要使用支架表,那么应该评估它对数据库优化程序性能的影响。
支架表中的类型二变化会导致连锁反应,要求对所有相关的维度表中的所有关联行执行类型二变化

多值维度

  • 多值维度,当事实表的行涉及维度表中多行时,将产生多值维度。

处理多值维度的方案

简化关系

事实表与维度表之间的多值关系可以通过将多值关系分解为多个一对多关系来解决,然而该方法使报表更加复杂并且仅仅支持数量有限的关系。

为多值维度构建桥接表

无须直接引用维度表,每个事实表将引用一组表,该组表被称为桥接表。因为它将事实表和维度表连接起来。

  • 这组表包含引用需要的维度表的组键和外键列
  • 每个组成员将增加一行,每一行都具有相同的组键
  • 事实表和桥接表可以使用组键来做连接操作。然后将维度表与桥接表做连接操作
  • 与简化多对对关系相比,桥接表的使用提供了更好的灵活性,并简化了生成报表的难度
  • 桥接表可能造成双重计算问题。即描述事实可能出现被多次计算的情况。
避免双重计算的方案
  • 对维度中分组具有唯一列进行分组
  • 增加分配因子,分配因子指明了每个组中成员对相关事实贡献的百分比
  • 使用主成员补充桥接表,对没有经验的用户隐藏桥接表的存在
桥接表的其他影响
  • 缓慢变化,如果被桥接的维度行包含类型1变化,它将与所有存在的组关联,如果桥接的维度行包含类型2变化,当成员合作再发生变化时需要建立一个新组。无论何时,在组是可辨认实体的情况下,采用将组定义为维度表的方式,成员作为多值属性,都会获得更好的建模效果。
  • 分解多对多关系,维度表桥接事实具有多对多关系,如果使用的软件产品不允许使用多对多关系,可以通过建立交叉表的方式将其分解。

多值属性

多值属性,当一个维度行需要获取当以属性的多个值时,将产生多值属性。

简化多值属性

针对多值属性,考虑将其简化为固定数量的单值属性,如果重复的属性不被用于过滤或分组查询结果,这种方法就是最简单的选择

简化多值属性存在的问题
  • 受限于不同值的数量
  • 按照指定行业进行过滤的查询需要定义多个条件
  • 按照行业进行分类时,将会出现问题,因为可能出现在任何一列中

使用属性桥接表

桥接表放置在维度表与支架表之间

  • 维度表中不存储多值属性,他们将按照各自的代理键,存储在不同表中,该表被称为支架表
  • 桥接表包含两列,一列表示组键,另一列设计支架表
  • 当维度行涉及支架表中的特定组合时,将在桥接表中为这些值建立组
  • 维度表和支架表之间可以通过组键连接。桥接表与支架表也通过组连接
使用属性桥接表发生变化的影响
  • 支架表发生变化,需要所有相关维度行都需要做出相应处理
  • 组成员发生变化的影响,针对组的任何表化都需要在维度表中增加一行以反应组的变化
  • 维度表发生变化的影响,维度表需要对数据源变化做出相应,新的版本需要新的代理键。如果多值属性没有发生变化,新行仍能够重用相同的组键
  • 将支架表包含到桥接表汇总,如果仅仅包含一个到连个多值属性,可以不使用支架表,将属性放置到桥接表中以简化配置
  • 如果软件产品不允许使用多对多关系,可以建立一个交叉表将其分解。
  • 作为事实表的桥接,由于桥接表主要包含外键,它与事实表非常相似。尽管桥接表并不包含事实,但是可以用作同样的意图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁

Java深度面试题:设计模式、内存管理与并发编程的综合考察 随着Java技术的不断发展,对Java开发者的技术要求也在不断提高。设计模式、内存管理、多线程工具类以及并发工具包和框架等都是Java开发者必须掌握的核心知识点。本文将通过三道综合性的面试题&a…

只有IP地址怎么实现HTTPS访问?

只有IP地址也可以实现HTTPS访问。虽然大部分SSL证书通常是针对域名发放,但也存在专门针对IP地址发放的SSL证书,这类证书允许服务器通过HTTPS协议为其公网IP地址提供安全的Web服务。当服务器配置了基于IP地址的SSL证书后,用户可以通过“https:…

第十届蓝桥杯大赛个人赛省赛(软件类)真题- CC++ 研究生组-字串数字

3725573269 #include<iostream> #include<map> #include<string> using namespace std; int main(){map<char, int> mp;string s "LANQIAO";long long ans 0, power 1;//7位数的26进制可能会超过int范围for(int i 1; i < 26; i){mp.…

深度学习(过拟合 欠拟合)

过拟合&#xff1a; 深度学习模型由于其复杂性&#xff0c;往往容易出现过拟合的问题。以下是一些深度学习中常见的过拟合原因和解决方法&#xff1a; 1. 数据量不足&#xff1a;深度学习模型通常需要大量的数据来进行训练&#xff0c;如果数据量不足&#xff0c;模型容易过度…

富格林:可信操作实现安全做单

富格林认为&#xff0c;现货黄金最近又又创历史新高了&#xff0c;不少投资者都嗅到其好处跃跃欲试想进场操作一番。但事实上&#xff0c;若希望实现安全做单&#xff0c;还是得要熟练掌握可信的黄金操作技巧。富格林为让大家顺利实现安全交易&#xff0c;特地总结了以下可信操…

vue3怎么使用reactive赋值

使用ref赋值&#xff1a; const list ref([]) const getList async () > {const res await axios.get(/list)list.value res.data } 如何使用reactive来替换呢&#xff1f; //const list ref([]) const list reactive([]) const getList async () > {const res…

NLP 笔记:LDA(训练篇)

1 前言&#xff1a;吉布斯采样 吉布斯采样的基本思想是&#xff0c;通过迭代的方式&#xff0c;逐个维度地更新所有变量的状态 1.1 举例 收拾东西 假设我们现在有一个很乱的屋子&#xff0c;我们不知道东西应该放在哪里&#xff08;绝对位置&#xff09;&#xff0c;但知道哪…

iOS模拟器 Unable to boot the Simulator —— Ficow笔记

本文首发于 Ficow Shen’s Blog&#xff0c;原文地址&#xff1a; iOS模拟器 Unable to boot the Simulator —— Ficow笔记。 内容概览 前言终结模拟器进程命令行改权限清除模拟器缓存总结 前言 iOS模拟器和Xcode一样不靠谱&#xff0c;问题也不少。&#x1f602; 那就有病治…

【Golang星辰图】实现弹性微服务架构:使用go-micro和go-kit构建可扩展的网络应用

构建高效网络应用&#xff1a;探索分布式系统和微服务的利器 前言 在当今的互联网时代&#xff0c;构建可扩展且可靠的网络应用变得越来越重要。分布式系统和微服务架构成为了解决大规模应用程序开发和管理的有效方法。本文将介绍一些用于构建分布式系统和微服务的关键工具和…

鸿蒙Harmony应用开发—ArkTS-ForEach:循环渲染

ForEach基于数组类型数据执行循环渲染。 说明&#xff1a; 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 接口描述 ForEach(arr: Array,itemGenerator: (item: Array, index?: number) > void,keyGenerator?: (item: Array, index?: number): string …

C#面:简述 .NET Framework 类库中的“命名空间”

在 C# 中&#xff0c;命名空间&#xff08;Namespace&#xff09;是一种用于组织和管理代码的机制。它提供了一种将相关的类、接口、结构体和其他类型组织在一起的方式&#xff0c;以便更好地管理和维护代码。 .NET Framework类库中的命名空间是一种逻辑上的分组&#xff0c;它…

【wails】(10):研究go-llama.cpp项目,但是发现不支持最新的qwen大模型,可以运行llama-2-7b-chat

1&#xff0c;视频演示地址 2&#xff0c;项目地址go-llama.cpp 下载并进行编译&#xff1a; git clone --recurse-submodules https://github.com/go-skynet/go-llama.cpp cd go-llama.cpp make libbinding.a项目中还打了个补丁&#xff1a; 给 编译成功&#xff0c;虽然有…

深度学习 线性神经网络(线性回归 从零开始实现)

介绍&#xff1a; 在线性神经网络中&#xff0c;线性回归是一种常见的任务&#xff0c;用于预测一个连续的数值输出。其目标是根据输入特征来拟合一个线性函数&#xff0c;使得预测值与真实值之间的误差最小化。 线性回归的数学表达式为&#xff1a; y w1x1 w2x2 ... wnxn …

creator-webview与Android交互

title: creator-webview与Android交互 categories: Cocos2dx tags: [cocos2dx, creator, webview, 交互] date: 2024-03-23 13:17:20 comments: false mathjax: true toc: true creator-webview与Android交互 前篇 Android&#xff1a;你要的WebView与 JS 交互方式 都在这里了…

【隐私计算实训营——004上手隐语SecretFlow和SecretNote安装部署】

1. SecretFlow安装 1.1 环境要求 Python>3.8操作系统 Ubuntu18 资源&#xff1a;>8核16GB安装包 secretflow-lite 安装方式 docker&#xff08;推荐&#xff09; 2. SecretFlow部署模式 SecretFlow使用Ray作为分布式计算调度框架。 Ray集群由一个主节点和零或若干个…

opencv常用数据结构和函数?

OpenCV是一个强大的计算机视觉库&#xff0c;它提供了丰富的数据结构和函数&#xff0c;用于处理图像和视频数据。以下是一些OpenCV中常用的数据结构和函数&#xff1a; 常用数据结构&#xff1a; cv::Mat&#xff1a;这是OpenCV中最基本和最常用的数据结构&#xff0c;用于存…

Fabric Measurement

Fabric Measurement 布料测量

Redis 教程系列之Redis 性能测试(七)

Redis 性能测试 Redis 性能测试是通过同时执行多个命令实现的。 语法 redis 性能测试的基本命令如下&#xff1a; redis-benchmark [option] [option value] 注意&#xff1a;该命令是在 redis 的目录下执行的&#xff0c;而不是 redis 客户端的内部指令。 实例 以下实例…

分布式组件 Nacos

1.在之前的文章写过的就不用重复写。 写一些没有写过的新东西 2.细节 2.1命名空间 &#xff1a; 配置隔离 默认&#xff1a; public &#xff08;默认命名空间&#xff09;:默认新增所有的配置都在public空间下 2.1.1 开发 、测试 、生产&#xff1a;有不同的配置文件 比如…

docker小白采坑---启动失败---空间不足

文章目录 空间不足启动报错 空间不足 设置一下&#xff0c;镜像保存的路径&#xff0c;即&#xff0c;在/etc/docker下建立或者修改文件daemon.json&#xff0c;一定需要注意json格式&#xff0c;写错的话docker就启动失败。 添加如下&#xff1a; {"data-root": &…