不止是只有维度建模,数据仓库还有Data Vault建模

引言

在数据仓库设计中,传统的星型和雪花型模型有着各自的优势和劣势。随着数据量的增大和数据源的多样化,Data Vault(数据仓库)建模方法逐渐受到关注和应用。Data Vault建模是一种灵活、可扩展、适应性强的建模方法,特别适用于复杂和动态的数据环境。本文将介绍Data Vault建模的基本概念、组成部分以及如何在实际项目中应用,并附带详细示例。

目录

    • 引言
    • Data Vault建模概述
      • Hub(中心表)
      • Link(链接表)
      • Satellite(卫星表)
    • 实践中的Data Vault建模
      • 步骤一:定义Hub表
      • 步骤二:定义Link表
      • 步骤三:定义Satellite表
    • 总结

Data Vault建模概述

Data Vault由丹·林斯塔德(Dan Linstedt)在1990年代后期提出,是一种适应大规模数据整合的建模方法。它的主要特点包括:
image.png

  • 高扩展性:适应快速增长的数据量和多变的数据源。
  • 高灵活性:易于应对业务规则和数据源的变化。
  • 历史数据保留:完整记录数据变化历史。

Data Vault模型由三类主要实体组成:

  1. Hub(中心表):存储业务主键及其唯一标识符。
  2. Link(链接表):存储不同Hub之间的关系。
  3. Satellite(卫星表):存储Hub或Link的属性和时间戳信息。

Hub(中心表)

Hub是Data Vault模型的核心,用于存储业务实体的唯一标识符。每个Hub表对应一个业务实体,表中的每一行代表一个业务主键。Hub表的结构相对简单,通常包含以下字段:

  • 业务主键(Business Key)
  • 哈希键(Hash Key):用来唯一标识业务主键
  • 加载时间戳(Load Timestamp)
  • 记录源(Record Source):记录数据来源
    image.png

示例:

CREATE TABLE Hub_Customer (
    Customer_HashKey CHAR(32) PRIMARY KEY,
    Customer_BusinessKey VARCHAR(255),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

Link(链接表)

Link用于定义Hub之间的关系。每个Link表对应一种业务关系,表中的每一行代表一个关系实例。Link表的字段通常包括:

  • 哈希键(Hash Key):唯一标识Link
  • 外键(Foreign Key):指向相关的Hub
  • 加载时间戳(Load Timestamp)
  • 记录源(Record Source)
    image.png

示例:

CREATE TABLE Link_CustomerOrder (
    CustomerOrder_HashKey CHAR(32) PRIMARY KEY,
    Customer_HashKey CHAR(32),
    Order_HashKey CHAR(32),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

Satellite(卫星表)

Satellite用于存储Hub或Link的属性及其变化历史。每个Satellite表与一个Hub或Link相关联,表中的每一行代表一个属性快照。Satellite表的字段通常包括:

  • 哈希键(Hash Key):对应的Hub或Link的哈希键
  • 属性字段(Attribute Fields)
  • 加载时间戳(Load Timestamp)
  • 记录源(Record Source)

image.png

示例:

CREATE TABLE Sat_CustomerDetails (
    Customer_HashKey CHAR(32),
    Customer_Name VARCHAR(255),
    Customer_Address VARCHAR(255),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

实践中的Data Vault建模

下面我们通过一个实际例子来展示如何在项目中应用Data Vault建模。假设我们有一个电商系统,需要整合客户、订单和产品等信息。

image.png

步骤一:定义Hub表

首先,我们为客户、订单和产品定义Hub表。

-- 客户中心表
CREATE TABLE Hub_Customer (
    Customer_HashKey CHAR(32) PRIMARY KEY,
    Customer_BusinessKey VARCHAR(255),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

-- 订单中心表
CREATE TABLE Hub_Order (
    Order_HashKey CHAR(32) PRIMARY KEY,
    Order_BusinessKey VARCHAR(255),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

-- 产品中心表
CREATE TABLE Hub_Product (
    Product_HashKey CHAR(32) PRIMARY KEY,
    Product_BusinessKey VARCHAR(255),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

步骤二:定义Link表

接下来,我们定义Link表来表示客户和订单、订单和产品之间的关系。

-- 客户与订单关系表
CREATE TABLE Link_CustomerOrder (
    CustomerOrder_HashKey CHAR(32) PRIMARY KEY,
    Customer_HashKey CHAR(32),
    Order_HashKey CHAR(32),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

-- 订单与产品关系表
CREATE TABLE Link_OrderProduct (
    OrderProduct_HashKey CHAR(32) PRIMARY KEY,
    Order_HashKey CHAR(32),
    Product_HashKey CHAR(32),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

步骤三:定义Satellite表

最后,我们为每个Hub和Link定义Satellite表,用于存储相关的属性信息。

-- 客户属性卫星表
CREATE TABLE Sat_CustomerDetails (
    Customer_HashKey CHAR(32),
    Customer_Name VARCHAR(255),
    Customer_Address VARCHAR(255),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

-- 订单属性卫星表
CREATE TABLE Sat_OrderDetails (
    Order_HashKey CHAR(32),
    Order_Date DATE,
    Order_Amount DECIMAL(10, 2),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

-- 产品属性卫星表
CREATE TABLE Sat_ProductDetails (
    Product_HashKey CHAR(32),
    Product_Name VARCHAR(255),
    Product_Price DECIMAL(10, 2),
    Load_Timestamp TIMESTAMP,
    Record_Source VARCHAR(50)
);

总结

image.png

Data Vault建模是一种灵活且扩展性强的数据仓库建模方法,特别适用于复杂和动态的数据环境。

它通过Hub、Link和Satellite表的组合,提供了一种结构化的方法来存储和管理大量的业务数据及其变化历史。

在实际应用中,Data Vault建模方法能够有效应对数据源和业务需求的变化,为企业提供稳定可靠的数据整合解决方案。

希望本文对您理解和应用Data Vault建模有所帮助。如果您在实际项目中遇到任何问题,欢迎留言讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flash申请内存失败,导致老化问题解决

背景 在闪光灯初始化阶段客制化了一个buffer,下发到kernel的闪光灯驱动中用于保存读取闪光灯寄存器的值。功能测试都是正常的,但是一旦开始批量跑产线老化测试会有1/4500左右概率的后主摄拍照卡住。定位根因是闪光灯初始化失败,进一步原因就…

记一次ndk版本升级

概述 事情的起因是做一次android版本的业务迭代,发现程序crash掉了。经过分析,原因是中台部门对libc_shared.so库进行了升级,正好我们的业务也会用到libc_shared.so库,导致两个库版本冲突。具体crash的原因可以参见参考文献1。 …

Coldrage Dagger

剃刀高地【寒怒匕首 Coldrage Dagger】 2020.11.26.剃刀高地刷【寒怒匕首】-1_网络游戏热门视频 2020.11.26.剃刀高地刷【寒怒匕首】-2_网络游戏热门视频

【M365运维】Outlook和Teams里不显示用户的组织架构

【问题】 由于一些误操作,把用户账户禁用并重新启用后,发现在Outlook和Teams里无法查看用户的组织结构图了。如下图所示: - 在Outlook 里,用户标签页的组织一直显示“正在加载...",成员身份也是“找不到任何组。…

【项目实训】数据库内容丰富

经团队讨论,对前端页面展示数据进行了增加,于是相应的修改数据库 经团队成员使用大模型对各公司面试经验中问题的总结优化,我们打算将大模型的回答存储到数据库中,以显示在前端页面 于是在数据库中存储大模型的回答:…

同三维T700转换器 USB转HDMI转换器

让USB摄像头变成HDMI输出,支持4K60输出 一、产品简介: 此转换器可以把USB信号转成HDMI信号,支持4K60 HDMI输出,有效解决了USB摄像头连接电视、显示器、导播台的问题,带USB控制口,可升级/接蓝牙接收器&#…

【微服务网关——hystrix-go类库】

1.hystrix-go类库 hystrix-go 是 Netflix 开源的 Hystrix 库在 Go 语言中的实现,用于处理服务中的故障和延迟问题。它通过提供熔断器(Circuit Breaker)、隔离、降级、限流、以及实时监控等机制,帮助开发者构建健壮的分布式系统。…

初学51单片机之长短键应用定时炸弹及扩展应用

51单片机RAM区域划分 51单片机的RAM分为两个部分,一块是片内RAM,一块是片外RAM。 data: 片内RAM从 0x00 ~0x7F 寻址范围(0-127) 容量共128B idata: 片外RAM从 0x00~0xFF 寻址范围(0-255) 容量共256B pdata&am…

ADC位数、增益调制与参考电压

位数:12bit、10bit、8bit 一般就是对应的ADC值分别为:4095、1023、255,也就选用对应位数时ADC的最大值。 增益的作用 增益设置用于放大或缩小输入信号,使其适配到ADC的输入范围。增益设置可以通过配置SAADC的通道配置寄存器来实…

java基于ssm+jsp 毕业生就业信息管理系统

1管理员功能模块 管理员输入个人的用户名、密码、角色登录系统,这时候系统的数据库就会在进行查找相关的信息,如果我们输入的用户名、密码不正确,数据库就会提示出错误的信息提示,同时会提示管理员重新输入自己的用户名、密码&am…

高通安卓12-安卓系统定制1

1.改变系统默认语言 从build/make/target/product/full_base.mk 2.修改开机图片 安卓原版操作方式 找到生成脚本:device\qcom\common\display\logo\logo_gen.py 其中readme.txt有操作说明 命令: sudo apt-get install python-imaging python ./logo_…

[AIGC] Doris:一款高效的MPP数据仓库引擎

在大数据处理的领域中,Apache Doris(原百度 Palo)是一个高效的MPP(大规模并行处理)数据仓库,最初由百度开发,现在已经成为Apache的孵化项目。 (图片取自百度) – 文章目录 1. Doris的基础知识…

RocketMQ:日常开发中有哪些使用MQ的场景

什么是消息队列? 消息队列是一种通信方法,允许应用程序通过发送和接收消息来互相通信。这些消息/任务/指令存储在一个中间介质中(即队列),并由生产者发送,消费者接收。 使用场景 场景一:任务…

输出100以内的质数

质数&#xff1a;只能被1和自身整除的数 let count; for(let i2; i<100; i){for(let j1; j<i; j){if(i % j 0){// 只要能被整除&#xff0c;count就加1count;}} if(count 2) {// 从1到自身被整除完之后&#xff0c;如果count只有两次&#xff0c;则说明i为质数co…

【技巧】如何检查多个GPU之间是否支持P2P通信

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 需要用到cuda_samples&#xff1a;GitHub - NVIDIA/cuda-samples 该工具的详细解释可以看这个&#xff1a; 【知识】详细介绍 CUDA Samples 示例工程…

[数据集][目标检测]电力场景下电柜箱门把手检测数据集VOC+YOLO格式1167张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1167 标注数量(xml文件个数)&#xff1a;1167 标注数量(txt文件个数)&#xff1a;1167 标注…

Leetcode Hot100之链表

1.相交链表 解题思路 快慢指针&#xff1a;分别求出两个链表的长度n1和n2&#xff0c;在长度较长的那个链表上&#xff0c;快指针先走n2 - n1&#xff0c;慢指针再出发&#xff0c;最后能相遇则链表相交 时间复杂度O(mn)&#xff0c;空间复杂度O(1)代码# Definition for singl…

白敬亭章若楠甜度报表的难哄大师

#白敬亭章若楠&#xff0c;甜度爆表的难哄大师#&#x1f389;&#x1f389;&#x1f389;各位小伙伴们&#xff0c;你们还记得那个让我们心跳加速、嘴角上扬的CP组合吗&#xff1f;没错&#xff0c;就是白敬亭和章若楠&#xff01;他们可是凭借一部新剧&#xff0c;再次让我们感…

520. 检测大写字母

题目 我们定义&#xff0c;在以下情况时&#xff0c;单词的大写用法是正确的&#xff1a; 全部字母都是大写&#xff0c;比如 “USA” 。单词中所有字母都不是大写&#xff0c;比如 “leetcode” 。如果单词不只含有一个字母&#xff0c;只有首字母大写&#xff0c;比如 “Go…

World of Warcraft [CLASSIC] plugin lua

World of Warcraft [CLASSIC] plugin lua 魔兽世界lua脚本插件 World of Warcraft API - Wowpedia - Your wiki guide to the World of Warcraft D:\World of Warcraft\_classic_\Interface\AddOns zwf.lua function CountdownFunc()CountdownFrame CreateFrame("Fram…