数据仓库3NF基础理论和实例

一、引言

  最近在梳理大数据模式下的数据仓库数据模型,花了点时间,系统的回顾一下传统数据仓库数据模型设计的理论,作为笔记分享给大家,很多资料来自互联网和读过的数据仓库理论和实践相关的熟悉,无剽窃之心,共勉吧。

二、3NF

(1)1NF-无重复的列

  数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

  如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。

  说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

(2)2NF-部分依赖

  非主属性完全依赖于主键[消除非主属性对主码的部分函数依赖]。

  第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。

  第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是属性完全依赖于主键。

(3)3NF-传递依赖

 属性不依赖于其它非主属性[消除传递依赖]。

  满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。

三、实例

  下面以一个学校的学生系统为例分析说明,这几个范式的应用。首先第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

  首先我们确定一下要设计的内容包括那些。学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等信息。为了简单我们暂时只考虑这些字段信息。我们对于这些信息,说关心的问题有如下几个方面。

  学生有那些基本信息

  学生选了那些课,成绩是什么

  每个课的学分是多少

  学生属于那个系,系的基本信息是什么。

  3.1 第二范式(2NF)实例分析

  首先我们考虑,把所有这些信息放到一个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)下面存在如下的依赖关系。

  问题分析

  因此不满足第二范式的要求,会产生如下问题

  数据冗余: 同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

  更新异常:

  1)若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。

  2)假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。

  删除异常 : 假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

  解决方案

  把选课关系表SelectCourse改为如下三个表:

  学生:Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话);

  课程:Course(课程名称, 学分);

  选课关系:SelectCourse(学号, 课程名称, 成绩)。

  3.2第三范式(3NF)实例分析

  接着看上面的学生表Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话),关键字为单一关键字"学号",因为存在如下决定关系:

  (学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话)

  但是还存在下面的决定关系

  (学号) → (所在学院)→(学院地点, 学院电话)

  即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

  它也会存在数据冗余、更新异常、插入异常和删除异常的情况。 (数据的更新,删除异常这里就不分析了,可以参照2.1.1进行分析)

  根据第三范式把学生关系表分为如下两个表就可以满足第三范式了:

  学生:(学号, 姓名, 年龄, 性别,系别);

  系别:(系别, 系办地址、系办电话)。

时间: 2024-12-30 07:08:48

数据仓库3NF基础理论和实例的相关文章

SQL Server 2008中数据收集器和管理数据仓库

08年8月份发布的SQL Server 2008充满了许多新特性.其中一个新特性就是数据收集器.与这一新特性相关联的是管理数据仓库(MDW).数据收集器功能非常强大,数据库管理员借助这一工具,能够收集不同来源的统计数据,而管理数据仓库就是用来存放存储这些数据. 一.什么是数据收集器? 数据收集器是SQL Server 服务器上的一个核心组件,它收集来自多种来源的数据,并将收集的数据存储在称为管理数据仓库的关系数据库中.数据采集器使用SSIS和SQL 代理的作业来实现这一功能. 数据收集器按照不同

解读基于数加的大数据仓库解决方案

数加是阿里云为企业大数据实施提供的一套完整的一站式大数据解决方案,覆盖了企业数仓.商业智能.机器学习.数据可视化等领域,助力企业在DT时代更敏捷.更智能.更具洞察力.数加平台构建在阿里云云计算基础设施之上,简单快速接入MaxCompute等计算引擎,支持ECS.RDS.OCS.AnalyticDB等云设施下的数据同步. 数加平台采用了先进的"可用不可见"的数据合作方式,并对数据所有者提供全方位的数据安全服务,数据安全体系包括:数据业务安全.数据产品安全.底层数据安全.云平台安全.接入&

数据仓库3级范式(3NF)基础

一.引言 最近在整理理大数据模式下的数据仓库数据模型,资料来自互联网和读过的数据仓库理论和实践相关. 二.3NF (1)1NF-无重复的列 数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性. 如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系.在第一范式(1NF)中表的每一行只包含一个实例的信息.简而言之,第一范式就是无重复的列. 说明:在任何一个关系数据库中,第一范式(1NF

胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例

一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 CREATE TABLE IF NOT EXISTS t_day_detail( id STRING, lastday FLOAT, today FLOAT, highest FLOAT, lowest FLOAT, today_end FLOAT, today_jisuan FLOAT, updow

数据仓库建模方法初步

一.前言 数据仓库得建模方法同样也有很多种,每一种建模方法其实代表了哲学上的一个观点,代表了一种归 纳,概括世界的一种方法.目前业界较为流行的数据仓库的建模方法非常多,这里主要介绍范式建模法,维度建模法,实体建模法等几种方法,每种方法其实从本质 上讲就是从不同的角度看我们业务中的问题,不管从技术层面还是业务层面,其实代表的是哲学上的一种世界观.我们下面给大家详细介绍一下这些建模方法. 二.3NF范式建模方法 范式建模法其实是我们在构建数据模型常用的一个方法,该方法的主要由 Inmon 所提倡,主

数据库规范化三个范式应用实例

规范|规范化|数据|数据库|应用实例 规范化为什么重要?目前很多的数据库由于种种原因还没有被规范化.本文中解释了其中一些原因,并用不同形式的范式(normal form)规范化了一个保险公司的理赔表.在这个过程中表的改变以及添加的一些附加表使数据库效率更高.错误更少.更容易维护. 数据库的规范化是优化表的结构和把数据组织到表中的实践,这样做数据才能更明确.规范化使你能够改变业务规则.需求和数据而不需要重新构造整个系统. 通过改变存储数据的方式--仅仅改变一丁点--并改变访问这些信息的程序,你就可

数据库范式1NF 2NF 3NF BCNF

(转自:http://www.itisedu.com/phrase/200604241410105.html) 设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式.关系数据库中的关系必须满足一定的要求,即满足不同的范式.目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).第四范式(4NF).第五范式(5NF)和第六范式(6NF).满足最低要求的范式是第一范式(1NF)

数据库设计范式(实例)

设计|数据|数据库|数据库设计 关系数据库设计之时是要遵守一定的规则的.尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍. 在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手. 第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值 都是不可再分的最小数据单位,则称R是第一范式的关系.例:如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码) 规范成

SQLSERVER数据仓库的构建与分析

server|sqlserver|数据     SQLSERVER数据仓库的构建与分析   (一)基本概念:     1.多维数据集:多维数据集是联机分析处理 (OLAP) 中的主要对象,是一项可对数据仓库中的数据进行快速访问的技术.多维数据集是一个数据集合,通常从数据仓库的子集构造,并组织和汇总成一个由一组维度和度量值定义的多维结构.     2.维度:是多维数据集的结构性特性.它们是事实数据表中用来描述数据的分类的有组织层次结构(级别).这些分类和级别描述了一些相似的成员集合,用户将基于这些