大数据----数据仓库设计基础(实列演示)


常见的数据仓库模型有:关系数据模型、多维数据模型、Data Vault模型。
关系模型、多维模型已经有很长的历史,而Data Vault模型相对比较新。

关系数据模型

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

关系数据模型中的结构

假设有一个大型公司在全国都有分公司,每个员工属于一个分公司,一个分公司有一个经理,分公司经理也是公司员工。在这里插入图片描述
1.关系
由行和列构成的二维结构,对应关系数据库中的表,如示例中的分公司表和员工表。
**表的物理存储结构可以是堆文件、索引文件或哈希文件。**堆文件是一个无序的数据集合,索引文件中表数据的物理存储顺序和逻辑顺序保持一致,哈希文件也称为直接存取文件,是通过一个预先定义好的哈希函数确定数据的物理存储位置。

2.属性
由属性名称和类型名称构成的顺序对,对应关系数据库中表的列,,如地址(Variable Characters)是公司表的一个属性。
在关系数据模型中,我们把关系描述为表,表中的行对应不同的记录,表中的列对应不同的属性。

3.属性域
属性的取值范围。每一个属性都有一个预定义的值的范围。属性域是关系模型的一个重要特征,关系中的每个属性都与一个域相关。域描述了属性所有可能的值。
域的概念是很重要的,因为它允许我们定义属性可以具有的值的意义。
在这里插入图片描述
分公司编号和员工编号都是字符串,但显然具有不同的含义,换句话说,它们的属性域是不同的。

4.元组
关系中的一条记录,对应关系数据库中的一个表行。元组可以以任何顺序出现,而关系保持不变。

5.关系数据库
一系列规范化的表的集合。 这里的规范化可以理解为表结构的正确性。
“关系、属性、元组”和“表、列、行”。在这里它们的含义是相同的,只不过前者是关系数据模型的正式术语,而后者是常用的数据库术语。

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

7.关系数据模型中的键
(1)超键
一个列或者列集,唯一标识表中的一条记录。

(2)候选键
仅包含唯一标识记录所必需的最小数量列的超键。表的候选键有三个属性:
唯一性:在每条记录中,候选键的值唯一标识该记录。
最小性:具有唯一性属性的超键的最小子集。
非空性:候选键的值不允许为空。
在例子中,分公司编号是候选键,如果每个分公司的邮编都不同,那么邮编也可以作为分公司表的候选键。一个表中允许有多个候选键。

(3)主键
唯一标识表中记录的候选键。主键是唯一、非空的。 没有被选做主键的候选键称为备用键。 对于例子中的分公司表,分公司编号是主键,邮编就是备用键,而员工表的主键是员工编号。
选择主键的原则:
主键要尽可能地小。
主键值不应该被改变。如果改变了主键的值,所有引用该主键的值都需要修改,否则引用就是无效的。
主键通常使用数字类型。数字类型的主键要比其他数据类型效率更高。
主键应该是没有业务含义的,它不应包含实际的业务信息。

(4)外键
一个表中的一个列或多个列的集合,这些列匹配某些其他(也可以是同一个)表中的候选键。注意外键所引用的不一定是主键,但一定是候选键。
分公司表的分公司编号是主键,在员工表里所属分公司是外键。同样,因为公司经理也是公司员工,所以它是引用员工表的外键。主键所在的表被称为父表,外键所在的表被称为子表。

关系完整性

关系数据模型有两个重要的完整性规则:实体完整性和参照完整性。
1.空值(NULL)
空值可以意味着未知,也可以意味着某个记录没有值,或者只是意味着该值还没有提供。空值是处理不完整数据或异常数据的一种方式。**空值与数字零或者空字符串不同,零和空字符串是值,但空值代表没有值。**Oracle的非、与、或逻辑运算真值表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.关系完整性规则
(1)实体完整性
**在一个基本表中,主键列的取值不能为空。**例如,分公司编号是分公司表的主键,在录入数据的时候,该列的值不能为空。
(2)参照完整性
如果表中存在外键,则外键值必须与主表中的某些记录的候选键值相同,或者外键的值必须全部为空。
员工表中的所属分公司是外键。该列的值要么是分公司表的分公司编号列中的值,要么是空(如新员工已经加入了公司,但还没有被分派到某个具体的分公司时)。

3.业务规则
定义或约束组织的某些方面的规则。

4.关系数据库语言
关系语言定义了允许对数据进行的操作,包括从数据库中更新或检索数据所用的操作以及改变数据库对象结构的操作。关系数据库的主要语言是SQL语言。
SQL是Structured Query Language的缩写,意为结构化查询语言。SQL语言又可分为DDL、DML、DCL、TCL四类。

DDL是Data Definition Language的缩写,意为数据定义语言用于定义数据库结构和模式。典型的DDL有create、alter、drop、truncate、comment、rename等。

DML是Data Manipulation Language的缩写,意为数据操纵语言用于检索、管理和维护数据库对象。典型的DML有select、insert、update、delete、merge、call、explain、lock等。

DCL是Data Control Language的缩写,意为数据控制语言用于授予和回收数据库对象上的权限。典型的DCL有grant和revoke

TCL是Transaction Control Language的缩写,意为事务控制语言,用于管理DML对数据的改变。它允许一组DML语句联合成一个逻辑事务。典型的TCL有commit、rollback、savepoint、set transaction等。

规范化

规范化方法对表进行分解,以消除数据冗余,避免异常更新,提高数据完整性。

不规范化带来的问题
没有规范化,数据的更新处理将变得困难,异常的插入、修改、删除数据的操作会频繁发生。

假设有一个名为employee的员工表,它有九个属性:id(员工编号)、name(员工姓名),mobile(电话)、zip(邮编)、province(省份)、city(城市)、district(区县)、deptNo(所属部门编号)、deptName(所属部门名称),表中的数据如表所示:

由于此员工表是非规范化的,我们将面对如下的问题。

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

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

(1)第一范式(1NF)
表中的列只能含有原子性(不可再分)的值。
上例中张三有两个手机号存储在mobile列中,违反了1NF规则。为了使表满足1NF,数据应该修改为如表所示。
在这里插入图片描述
(2)第二范式(2NF)
第二范式要同时满足下面两个条件:
满足第一范式。
没有部分依赖。

例如,员工表的一个候选键是{id,mobile,deptNo},而d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值