【数据仓库设计基础1】关系数据模型理论与数据仓库Inmon方法论

2023-10-27

关系模型被广泛应用于数据处理和数据存储,尤其是在数据库领域,现在主流的数据库管理系统几乎都是以关系数据模型为基础实现的。

一. 关系数据模型中的结构

关系数据模型基于关系这一数学概念。接下来解释关系数据模型中的术语和相关概念。

我们使用一个分公司-员工关系的例子。假设有一个大型公司在全国都有分公司,每个员工属于一个分公司,一个分公司有一个经理。

1.关系

由行和列构成的二维结构,对应关系数据库中的表,如分公司表和员工表。

注意,这种认识只是我们从逻辑上看待关系模型的方式,并不应用于表在磁盘上的物理结构。表的物理存储结构可以是堆文件、索引文件或哈希文件。

  • 堆文件是一个无序的数据集合
  • 索引文件中表数据的物理存储顺序和逻辑顺序保持一致
  • 哈希文件也称为直接存取文件,是通过一个预先定义好的哈希函数确定数据的物理存储位置

2.属性

由属性名称和类型名称构成的顺序对。对应关系数据库中表的列,如地址(Variable Characters)是公司表的一个属性。

在关系数据模型中,我们把关系描述为表,表中的行对应不同的记录,表中的列对应不同的属性
属性可以以任何顺序出现,而关系保持不变,也就是说,在关系理论中,表中的列是没有顺序的

3.属性域

表示属性的取值范围。每一个属性都有一个预定义的值的范围。域描述了属性所有可能的值。
如下表列出了分公司-员工关系的一些属性域。
在这里插入图片描述

 

4.元组

关系中的一条记录,对应关系数据库中的一个表行。

元组可以以任何顺序出现,而关系保持不变,也就是说,在关系理论中,表中的行是没有顺序的

 

5. 关系数据库

一系列规范化的表的集合。

 

6.关系表的属性

关系表有如下属性:

● 每个表都有唯一的名称。
● 一个表中每个列有不同的名字。
● 一个列的值来自于相同的属性域。
● 列是无序的。● 行是无序的。

 

7.关系数据模型中的键

1)超键

一个列或者列集,唯一标识表中的一条记录。

2)候选键 ing

仅包含唯一标识记录所必需的最小数量列的超键。 表的候选键有三个属性:

● 唯一性:在每条记录中,候选键的值唯一标识该记录。
● 最小性:具有唯一性属性的超键的最小子集。?
● 非空性:候选键的值不允许为空。

在我们的例子中,分公司表编号是候选键,如果每个分公司的邮编都不同,那么邮编也可以作为分公司表的候选键。一个表中允许有多个候选键。

3)主键
唯一标识表中记录的候选键。主键是唯一、非空的。没有被选为主键的候选键称为备用键。

对于例子中的分公司表,分公司编号是主键,邮编就是备用键,而员工表的主键是员工编号。

主键的选择在关系数据模型中非常重要,很多性能问题都是由于主键选择不当引起的。

在选择主键时,我们可以参考以下原则:

  • 主键要尽可能地小。
  • 主键值不应该被改变。主键会被其他表所引用。如果改变了主键的值,所有引用该主键的值都需要修改,否则引用就是无效的。
  • 主键通常使用数字类型。数字类型的主键要比其他数据类型效率更高。
  • 主键应该是没有业务含义的,它不应包含实际的业务信息。**无意义的数字列不需要修改,因此是主键的理想选择。**大部分关系型数据库支持的自增属性或序列对象更适合当作主键。
  • 虽然主键允许由多列组成,但应该使用尽可能少的列,最好是单列

4)外键
一个表中的一个列或多个列的集合,这些列匹配某些其他(也可以是同一个)表中的候选键。
注意外键所引用的不一定是主键,但一定是候选键。

当一列出现在两张表中的时候,它通常代表两张表记录之间的关系。

如:分公司表的分公司编号和员工表的所属分公司。它们的名字虽然不同,但却是同一含义。
分公司表的分公司编号是主键,在员工表里所属分公司是外键

所以主键所在的表被称为父表,外键所在的表被称为子表

 

二. 关系完整性

关系数据模型有两个重要的完整性规则:实体完整性和参照完整性。在定义这些术语之前,先要理解空值的概念。

1.空值(NULL)

表示一个列的值目前还不知道或者对于当前记录来说不可用。

空值是处理不完整数据或异常数据的一种方式。空值与数字零或者空字符串不同,零和空字符串是值,但空值代表没有值。因此,空值应该与其他值区别对待。

空值具有特殊性,当它参与逻辑运算时,结果取决于真值表。Oracle的非、与、或逻辑运算真值表。
在这里插入图片描述

举例,如果一个分公司的经理离职了,新的经理还没有上任,此时公司经理列对应的值就是空值。

 

2.关系完整性规则

1)实体完整性
在一个基本表中,主键列的取值不能为空。

基本表指命名的表(就是一般我们定义的表),记录物理地存储在数据库中,与之对应的是视图。
视图是虚拟的表,它只是一个查询语句的逻辑定义,其中并没有物理存储数据。

2)参照完整性
如果表中存在外键,则外键值必须与主表中的某些记录的候选键值相同,否则外键的值必须为空。

如:员工表中的所属分公司是外键。该列的值要么是分公司表的分公司编号列中的值,要么是空(如新员工已经加入了公司,但还没有被分派到某个具体的分公司时)。

 

3.业务规则

业务规则的例子包括属性域和关系完整性规则。属性域用于约束特定列能够取的值。
 

4.关系数据库语言

  1. DDL是Data Definition Language的缩写,意为数据定义语言,用于定义数据库结构和模式。典型的DDL有create、alter、drop、truncate、comment、rename等。
  2. DML是Data Manipulation Language的缩写,意为数据操纵语言,用于检索、管理和维护数据库对象。典型的DML有select、insert、update、delete、merge、call、explain、lock等。
  3. DCL是Data Control Language的缩写,意为数据控制语言,用于授予和回收数据库对象上的权限。典型的DCL有grant和revoke。
  4. TCL是Transaction Control Language的缩写,意为事务控制语言,用于管理DML对数据的改变。它允许一组DML语句联合成一个逻辑事务。典型的TCL有commit、rollback、savepoint、set transaction等。

 
 

三. 规范化

关系数据模型的规范化是一种组织数据的技术。规范化方法对表进行分解,以消除数据冗余,避免异常更新,提高数据完整性。

先看一个不规范化的例子:
在这里插入图片描述

  • 修改异常:上表中张三有两条记录,因为他隶属两个部门。如果我们要修改张三的地址,必须修改两行记录。假如一个部门得到了张三的新地址并进行了更新,而另一个部门没有,那么此时张三在表中会存在两个不同的地址,导致了数据不一致。
  • 新增异常:假如一个新员工加入公司,他正处于入职培训阶段,还没有被正式分配到某个部门,如果deptNo字段不允许为空,我们就无法向employee表中新增该员工的数据。
  • 删除异常:假设公司撤销了D3这个部门,那么**在删除deptNo为D3的行时,会将李四的信息也一并删除。**因为他只隶属于D3这一个部门。

规范化是通过应用范式规则实现的。最常用的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。

1)第一范式(1NF)表中的列只能含有原子性(不可再分)的值。

上例中张三有两个手机号存储在mobile列中,违反了1NF规则。为了使表满足1NF,数据应该修改为如下表所示。
在这里插入图片描述
 
2)第二范式(2NF)
第二范式要同时满足下面两个条件:

  • 满足第一范式。
  • 没有部分依赖

部分依赖的例子:
员工表的一个候选键是{id, mobile, deptNo},而deptName依赖于{deptNo},同样name仅依赖于{id}即一行中存在两个依赖,因此不是2NF的。

为了满足第二范式的条件,需要将这个表拆如下四个表:
在这里插入图片描述

在这里插入图片描述
 
3)第三范式(3NF)
第三范式要同时满足下面两个条件:

  • 满足第二范式
  • 没有传递依赖

例如,员工表的province、city、district依赖于zip,而zip依赖于(员工)id,换句话说,province、city、district传递依赖于(员工)id,违反了3NF规则。

为了满足第三范式的条件,可以将这个表拆分成employee和zip两个表,如下图:
在这里插入图片描述
把传递依赖的这几列放到一起,进一步减少数据冗余。

 

在关系数据模型设计中,一般需要满足第三范式的要求。

满足3NF的表,重点在于一个表良好的主外键设计。规范化带来的好处是通过减少数据冗余提高更新数据的效率,同时保证数据完整性。

三范式要有一定的度

我们在实际应用中也要防止过度规范化的问题。规范化程度越高,划分的表就越多,在查询数据时越有可能使用表连接操作。而如果连接的表过多,会影响查询的性能。
关键的问题是要依据业务需求,仔细权衡数据查询和数据更新的关系,制定最适合的规范化程度。
还有一点需要注意的是,不要为了遵循严格的规范化规则而修改业务需求。

 
 

四. 关系数据模型与数据仓库

关系数据模型可以提供高性能的数据更新操作,能很好地满足事务型系统的需求,这点毋庸置疑。但是对于查询与分析密集型的数据仓库系统还是否合适呢?

对这个问题的争论由来已久,基本可以分为Inmon和Kimball两大阵营,Inmon阵营是应用关系数据模型构建数据仓库的支持者。

Inmon方法是以下面这些假设的成立为前提的:

  • 假设数据仓库是以企业为中心的,初始的数据能够为所有部门所使用。而最终的数据分析能力是在部门级别体现,需要使用数据集市对数据仓库中的数据做进一步处理,以便为特定的部门定制它们。
  • 数据仓库中的数据不违反组织制定的任何业务规则。
  • 必须尽可能快地把新数据装载进数据仓库,这意味着需要简化数据装载过程或减少数据的装载量。
  • 数据仓库的建立必须从一开始就被设计成支持多种BI技术,这就要求数据仓库本身所使用的技术越通用越好。
  • 假设数据仓库的需求一定会发生变化。它必须能完美地适应其数据和数据结构的变化。

基于这些假设,使用关系数据模型构建数据仓库的优势和必然性就比较明显了。

1.非冗余性
数据冗余越少,需要装载的数据量就越少,装载过程就越快。数据仓库的数据源一般是事务型系统,这些系统通常是规范化设计的。如果数据仓库使用相同的数据模型,意味着数据转换的复杂性可能会降低,同样可以加快数据装载速度。

2.稳定性
由于数据仓库的需求会不断变化,我们需要以一种迭代的方式建立数据仓库。
 
关系数据模型的通用性
众所周知,组织中最经常变化的是它的处理过程、应用和技术,如果依赖于这三个因素中的任何一个建立数据模型,当它们发生改变时,肯定要对数据模型进行彻底修改。为了避免这个问题,关系数据模型的通用性正是用武之地。
 
变化合并ing(how)
另一方面,由于变化不可避免,数据仓库模型应该能比较容易地将新的变化合并进来,而不必重新设计已有的元素和已经实现的实体。

3.一致性
数据仓库模型最本质的特点是保证作为组织最重要资源的数据的一致性,而确保数据一致性正是关系数据模型的特点之一。

4.灵活性
该模型支持由组织制定的政策和约定的规则,同时为数据集市分析数据提供了更多的灵活性,使得数据库存储以及数据装载方面也是最有效的。当然,关系数据模型的缺点也很明显,它需要额外建立数据集市的存储区,并增加相应的数据装载过程。

 
 
参考:《Hadoop构建数据仓库实战》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据仓库设计基础1】关系数据模型理论与数据仓库Inmon方法论 的相关文章

  • 数据仓库模型设计V2.0

    一 数仓建模的意义 数据模型就是数据组织和存储方法 它强调从业务 数据存取和使用角度合理存储数据 只有将数据有序的组织和存储起来之后 数据才能得到高性能 低成本 高效率 高质量的使用 高性能 良好的数据模型能够帮助我们快速查询所需要的数据
  • 启动httpd服务:SSLCertificateFile: file ‘/var/www/miq/vmdb/certs/server.cer‘ does not exist or is empty

    启动httpd服务 SSLCertificateFile file var www miq vmdb certs server cer does not exist or is empty 启动httpd服务 失败 复制代码 root te
  • 详解用户画像

    01画像简介 用户画像 即用户信息标签化 通过收集用户的社会属性 消费习惯 偏好特征等各个维度的数据 进而对用户或者产品特征属性进行刻画 并对这些特征进行分析 统计 挖掘潜在价值信息 从而抽象出用户的信息全貌 如图1 1所示 用户画像可看作
  • R语言实用教程薛毅清华出版社课后题答案

    有R语言实用教程薛毅课后题答案习题1 5 详情请到我的页面资源查看
  • Hive Sql 最强最完整学习笔记

    一 DDL语句 数据定义语句 对数据库的操作 包含创建 修改数据库 对数据表的操作 分为内部表及外部表 分区表和分桶表 二 DQL语句 数据查询语句 单表查询 关联查询 hive函数 包含聚合函数 条件函数 日期函数 字符串函数等 行转列及
  • 数据挖掘相关的10个问题

    NO 1 Data Mining 和统计分析有什么不同 硬要去区分Data Mining和Statistics的差异其实是没有太大意义的 一般将之定义为Data Mining技术的CART CHAID或模糊计算等等理论方法 也都是由统计学者
  • Hudi 基础入门篇

    Hudi 诞生 Apache Hudi由Uber开发并开源 该项目在2016年开始开发 并于2017年开源 2019年1月进入 Apache 孵化器 且2020年6月称为Apache 顶级项目 目前最新版本 0 9 0版本 Hudi 一开始
  • hive中get_json_object函数

    原数据 表名 explode test 列名 sale info source 7fresh monthSales 4900 userCount 1900 score 9 9 source jdmart monthSales 7900 us
  • 大数据--pyspark远程连接hive

    上一篇文章介绍了python连接hive的过程 通过地址 端口号访问到hive并对hive中的数据进行操作 这一篇文章介绍一下怎么通过windows本地pyspark 本地部署好的spark 远程虚拟机的hive 完成本地pyspark对h
  • ETL数据库数据采集&订单数据采集

    问题解决 增加目标数据库配置信息 结果写出MySQL的数据库相关配置 target host localhost target port 3306 target user root target password mysql target
  • Hive千亿级数据倾斜解决方案

    数据倾斜问题剖析 数据倾斜是分布式系统不可避免的问题 任何分布式系统都有几率发生数据倾斜 但有些小伙伴在平时工作中感知不是很明显 这里要注意本篇文章的标题 千亿级数据 为什么说千亿级 因为如果一个任务的数据量只有几百万 它即使发生了数据倾斜
  • 列存数据仓库怎样更高效

    很多数据仓库产品都采用了列式存储 如果数据表的总列数很多而计算涉及的列很少 采用列存就只读取需要的列即可 能够减少硬盘访问量 提高性能 特别是数据量非常大时 硬盘扫描和读取的时间占比很大 这时候列存的优势会很明显 那么 是不是只要用了列存就
  • clickhouse导入数据 DBeaver大坑

    测试数据有一亿条需要导入数据库 使用DBeaver自带导入数据功能 结果放置一晚才导入一千万条 估计导入设置有问题 于是寻找合适方式 记录如下 首先将待导入的csv数据表45G 传输到clickhouse所在的服务器 在数据库中提前建好表
  • HDFS 分布式文件系统详解

    1 HDFS概述 Hadoop 分布式系统框架中 首要的基础功能就是文件系统 在 Hadoop 中使用 FileSystem 这个抽象类来表示我们的文件系统 这个抽象类下面有很多子实现类 究竟使用哪一种 需要看我们具体的实现类 在我们实际工
  • 商务智能-第六章 数据挖掘

    Lecture6 Data Mining 1 数据挖掘 在数据库及数据仓库中存贮有大量的数据 它们具有规范的结构形式与可靠的来源 且数量大 保存期间长 是一种极为宝贵的数据资源 充分开发 利用这些数据资源是目前计算机界的一项重要工作 1 1
  • DTCC 2023丨云原生环境下,需要什么样的 ETL 方案?

    2023年8月16日 18日 第14届中国数据库技术大会 DTCC 2023 于北京隆重召开 拓数派受邀参与本次大会 PieCloudDB 技术专家邱培峰在大会做了 云原生虚拟数仓 PieCloudDB ETL 方案设计与实现 的主题演讲
  • Databend 存储架构总览

    目的 通过本篇文章带大家理解一下 Databend 的存储结构 Databend 内置的 Table 引擎为 Fuse table engine 也是接下来要花重点篇幅要讲的 另外 Databend 还支持外置的 Hive table 及
  • DAMA-DMBOK2重点知识整理CDGA/CDGP——第2章 数据处理伦理

    目录 一 分值分布 二 重点知识梳理 1 语境关系图 2 引言 3 业务驱动因素 4 基本概念 一 分值分布 CDGA 2分 2单选 CDGP 0分 不考 二 重点知识梳理 1 引言 预警关系图 数据处理伦理定义 如何以符合道德准则及社会责
  • 头歌—密码学基础

    第1关 哈希函数 题目 任务描述 本关任务 利用哈希算法统计每个字符串出现的个数 相关知识 为了完成本关任务 你需要掌握 1 密码学哈希函数的概念及特性 2 安全哈希算法 密码学哈希函数的概念及特性 我们需要理解的第一个密码学的基础知识是密
  • 数据仓库与数据挖掘复习资料

    一 题型与考点 第一种 1 解释基本概念 中英互译 解释简单的含义 2 简答题 每个10分有两个一定要记住 考时间序列Time series 第六章 的基本概念含义 解释 作用 序列模式挖掘的作用 考聚类 第五章 重点考密度聚类的定义描述

随机推荐

  • STM32-内存管理实验

    一 内存管理简介 1 如何在LCD上实现SD卡文件浏览 需要读取所有文件名到内存 然后显示到LCD 一般的方法是定义一个数组来存储所有文件名 1 需要知道最大文件名的长度 比如255字节 2 需要知道文件的个数 如果没有内存管理 则需要定义
  • 差分进化算法(Differential Evolution,DE)实例详解

    差分进化算法是 differential evolution DE 是基于群体智能理论的优化算法 是通过群体内个体间的合作与竞争而产生的智能优化搜索算法 对比进化计算 它保留了基于种群的全局搜索策略 采用实数编码 基于差分的简单变异操作和
  • SAP PO上传异步接口(PO从对方中间表读取数据)

    导语 最近的项目上出现了一个奇奇怪怪的需求 上传接口居然不是外围系统给我传输 而是他数据丢到他的中间表 然后PO去取过来 真就他不动 我自己动 下面说一下需要怎么来实现吧 其实跟PO下传接口写入中间表一样 只不过方向变了 还有一些小变动 这
  • HBASE列族不能太多的真相 (一个table有几个列族就有几个 Store)

    HRegionServer内部管理了一系列HRegion对象 每个HRegion对 应了table中的一个region HRegion中由多 个HStore组成 每个HStore对应了Table中的一个column family的存储 可以
  • Mac 快速打开终端快捷键

    Mac下没有打开终端的快捷键 需要自己设置 主要是利用Mac的Automator来创建打开终端的服务 并设置快捷键 直接看图说话 找到Automator 创建打开终端的服务 编写打开终端的命令 其中的 Terminal 改成其他的应用名就能
  • mysql高级教程

    mysql高级教程 1 索引相关 1 创建索引 创建索引 ALTER TABLE test test ADD INDEX myindex name USING BTREE CREATE INDEX myindex ON test name
  • 算法课四

    算法报告四 Dijkstra算法 最短距离 16122020 钟顺源 一 题目大意 给出一张图 并给定起点和终点 问起点到终点的最短距离是多少 有两个特殊要求 1 如果从顶点i到顶点j有不止一条最短路径 那么输出路段数最少者 2 如果具有最
  • 使用frp配置内网穿透

    1 服务端配置 服务端即在公网环境下的服务器 需配置frps服务 1 1 下载frp 下载地址是https github com fatedier frp releases 要注意下载的版本 由你的服务器机型决定 我下载的是frp 0 34
  • Windows 网络凭证

    前言 单位内部 员工之间电脑免不了要相互访问 eg 访问共享文件夹 这就引出网络凭证的概念 即你用什么身份访问对端计算机 实验环境 创建共享文件夹 WinSrv 2008上新建的文件夹sharedata 共享给任何人 任何人都是参与者 即具
  • matlab 随机函数 基于,[转载](zz)Matlab 随机函数

    随机函数 包括rand rands randn 根据MATLAB中的相关解释 rands函数一般是用在神经网络的权值和阈值的初始化时 范围是 1到1 rand函数 产生均匀分布的伪随机数 randn函数 正态分布的均值为0 方差为1的随机数
  • 【多尺度密集递归融合网络:超分】

    A novel image super resolution algorithm based on multi scale dense recursive fusion network 基于多尺度密集递归融合网络的图像超分辨率算法 随着卷积
  • Activity劫持实例与防护手段

    原文地址 http blog chinaunix net uid 29170659 id 4930737 html 本文只用于学习技术 提高大家警觉 切勿用于非法用途 什么叫Activity劫持 这里举一个例子 用户打开安卓手机上的某一应用
  • postman如何进行更新呢?

    一般来说 postman我们要用最新的版本 最新版有些比较好的特性 如何更新呢 第一种 postman是自动更新的 什么都不用设置 就会自动更新 更新的界面表现是 第二种 手动设置 打开postman 在file里面选择setting up
  • (七)图像处理中常用算子Laplacian\Sobel\Roberts\Prewitt\Kirsch

    1 拉普拉斯 Laplacian 算子 1 1基础介绍 最简单的各向同性导数算子是拉普赖斯算子 其具有旋转不变性 对于两个变量的函数 f x y f x y f
  • java将一个文件或者目录复制到另一个文件下

    java将一个文件或者目录复制到另一个文件下 列如 把 F cc下的所有文件复制到 F home下面 如果是文件的话那就是 F JSON JSON jpg 和 F JSON JSON jpg import java io import ja
  • 如何计算归并排序算法的时间复杂度?

    如何计算归并排序算法的时间复杂度 什么是归并排序 计算时间复杂度 什么是归并排序 归并排序的概念十分简单 就是 分而治之 的思想 这里我直接从网上找了一份对归并排序算法的比较好的介绍排序算法 计算时间复杂度 关键是怎么计算时间复杂度 我们在
  • VTK安装与配置补充2

    本文参考自 https blog csdn net sinat 25923849 article details 78889674 1 原材料 1 1 VTK 最新 Release 文件包 https www vtk org downloa
  • Jenkins使用总结,2.0 新时代:从 CI 到 CD

    Jenkins近阶段使用的总结篇 只写了个引子 却一直未动手写完 今天补上 前几篇文章提到在内网jenkins直接构建部署升级线上环境 job都是暴露在外面 很容易被误操作 需要做简单的权限控制 以防止误操作 导致生产环境挂掉 但jenki
  • Zotero PDF translate翻译CNKI报错

    错误信息 请求错误 此翻译引擎不可用 可能是密钥错误 也可能是请求过快 可以尝试其他翻译引擎 或者来此查看相关回答 https zotero yuque com staff gkhviy pdf trans age09f 请注意 这些错误与
  • 【数据仓库设计基础1】关系数据模型理论与数据仓库Inmon方法论

    文章目录 一 关系数据模型中的结构 1 关系 2 属性 3 属性域 4 元组 5 关系数据库 6 关系表的属性 7 关系数据模型中的键 二 关系完整性 1 空值 NULL 2 关系完整性规则 3 业务规则 4 关系数据库语言 三 规范化 四