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

news2024/11/28 18:01:32

文章目录

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

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

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

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

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

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构建数据仓库实战》

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

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

相关文章

2022/9/13总结

Vue 路由的封装抽离 为了便于维护 ,我们通常需要将路由模块抽离出来 在vue中,如果要写路径,可以写绝对路径 使用 代表从src目录下去寻找,能避免出现很多错误 声明式导航 -- 导航链接 vue-router提供了一个全局组件router-l…

nodejs系列-使用nodejs链接MongoDB数据库问题总结

参考文档 mongodbMongoose 问题1. 不支持preferredcms_db_name、cms_db_collection选项 throw new error_1.MongoParseError(${optionWord} ${Array.from(unsupportedOptions).join(, )} ${isOrAre} not supported);^MongoParseError: options preferredcms_db_name, cms_db…

SVN 和 GIT 命令对比

参考 https://blog.csdn.net/justry_deng/article/details/82259470 # TortoiseSVN打分支、合并分支、切换分支 https://www.huliujia.com/blog/802a64152bbbe877c95c84ef2fdf3857a056b536/ # 版本控制:Git与Svn的命令对应关系 TortoiseSVN打分支、合并分支、切换…

Qt应用开发(基础篇)——菜单栏 QMenuBar

一、前言 QMenuBar类继承于QWidget,该类提供了一个水平菜单栏。 菜单栏使用 QMenuBar菜单栏,顾名思义是菜单QMenu和动作QAction的容器,一般在软件的顶部经常会见到它。菜单栏包含了一系列下拉的菜单,使用addMenu()函数添加QMenu菜…

【ICASSP 2023】ST-MVDNET++论文阅读分析与总结

主要是数据增强的提点方式。并不能带来idea启发,但对模型性能有帮助 Challenge: 少有作品应用一些全局数据增强,利用ST-MVDNet自训练的师生框架,集成了更常见的数据增强,如全局旋转、平移、缩放和翻转。 Contributi…

leetcode 673. 最长递增子序列的个数

2023.9.13 做本题之前先复习一下 最长递增子序列 ,在此基础上还要加个count数组,用于记录当前下标 最长递增子序列的个数。 本题还是有些难度,日后再来二刷。

lv4 嵌入式开发-7 文件IO(概念、打开、关闭、读、写)

目录 1 文件I/O 介绍 2 文件I/O – 文件描述符fd(File Descriptor) 3 文件I/O – open 4 文件I/O – close 5 文件I/O – read 6 文件I/O – write 7 文件IO – lseek 8 标准I/O – 思考和练习 掌握文件描述符的含义 1 文件I/O 介绍 什么是文件…

php 实现stripe支付流程

1.申请账号获取密钥key 2.申请创建商品,创建价格,创建支付, //创建商品 public function create_product(){ $_key self::STRIPE_KEY;$stripe new \Stripe\StripeClient($_key);$arr $stripe->products->create([name > $good…

Arcgis多值提取至点所有波段数值一样

Arcgis多值提取至点所有波段数值一样 问题描述 进行多值提取多波段后的结果,所有波段数值都是一样的。 原因 操作流程问题,输入栅格只选择了一个栅格文件 解决方案 实际上,每个波段都会对应一个栅格文件,要把这些添加进去 这…

【网络编程】深入理解TCP协议二(连接管理机制、WAIT_TIME、滑动窗口、流量控制、拥塞控制)

TCP协议 1.连接管理机制2.再谈WAIT_TIME状态2.1理解WAIT_TIME状态2.2解决TIME_WAIT状态引起的bind失败的方法2.3监听套接字listen第二个参数介绍 3.滑动窗口3.1介绍3.2丢包情况分析 4.流量控制5.拥塞控制5.1介绍5.2慢启动 1.连接管理机制 正常情况下,TCP需要经过三…

淘宝/天猫获取商品销量详情 API 返回值说明

item_get_sales-获取商品销量详情 API测试工具 taobao.item_get_sales 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_…

SEO优化排名的技巧与注意点(百度SEO排名的五大注意点)

关键词排名是指在搜索引擎中,用户搜索相关关键词时,网站出现的顺序。SEO优化是提高网站排名的一种方法。优化关键词排名的目的是提高网站流量和知名度。但是要注意遵循百度SEO排名的规则。 下面介绍一下百度SEO排名的五大注意点和优化关键词的六种方式。…

Arcgis提取每个像元的多波段反射率值

Arcgis提取每个像元的多波段反射率值 数据预处理 数据预处理阶段需要对遥感图像进行编辑传感器参数、辐射定标、大气校正、正射校正,具体流程见该文章 裁剪研究区 对于ENVI处理得到的tiff影像,虽然是经过裁剪了,但是还存在黑色的背景值&a…

JDK、eclipse软件的安装

一、打开JDK安装包 二、复制路径 三、点击我的电脑,找到环境变量 四、新建环境 变量名:JAVA_HOME 变量值就是刚刚复制的路径 五、在path中建立新变量 双击path 打印以下文字 最后一直双击确定,安装环境完成。 六、双击eclipse 选择好安装…

Sentinel控制台配置 持久化到nacos

sentinel控制台,使用方便,功能强大。使用官方的jar包,配置不会持久化,sentinel重启后会导致,之前的规则全部丢失,下面一起改造源码实现规则数据的持久化 sentinel源码地址 (github访问太慢&am…

React TypeScript 定义组件的各种方式

目录 举例说明1. 使用 class 定义2. 使用函数定义2.1 使用普通函数2.2 使用函数组件 举例说明 比如我们要定义一个计数器 Counter,它包含一个 label 和一个 button,计数器的初始值由外部传入,点击 button 计数加 1: 这虽然是个简单组件&…

第25章_瑞萨MCU零基础入门系列教程之看门狗定时器-WDT

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

iOS17正式版9月18日正式发布!怎么更新即将发布的iOS17正式版?

苹果在今天举办的“好奇心上头”发布会结束后,推送了iOS 17和iPadOS 17发布候选版本(Release Candidate Version),同时宣布将于9月18日面向iPhone和iPad 用户,推送iOS17/iPadOS 17正式版更新。苹果表示iOS 17的设计理念…

C# Onnx Yolov8 Detect 物体检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…

自动化办公更简单了:新版python-office,有哪些更新?

#职场经验谈# 大家好,这里是程序员晚枫,小破站/小红薯都叫这个名。 去年4月开源了一个Python自动化办公项目:python-office,GitHub和Gitee都能看到。1行代码实现复杂的自动化办公任务,帮助不懂代码的小白,…