文档章节

数据库设计

C
 Claroja
发布于 2017/05/08 23:22
字数 1430
阅读 22
收藏 0

精选30+云产品,助力企业轻松上云!>>>

1.相关概念

(1)实体(entity):我们用数据库要描述的对象,可以是具体的,也可以是抽象的。比如“一个学生”、“一本书”、“一门课”等等;当然也可以是“学生与老师的关系”。

(2)字段(fields):就是我们看到的列(column),代表了我们要描述实体的属性。

(3)记录(record):就是我们平常所说的行(row),代表了我们要描述不同的具体实体。

(4)码(key):表中可以唯一确定一个元组的某个属性(或者属性组),我们在数据表中叫做键。

(5)主键(primary key):用于唯一标识一个表中的一条记录的键。

(6)外键(foreign keys):对连接父表和子表的相关记录的主键字段的复制。

(7)完全函数依赖(full functional dependency):次属性完全依赖一个主属性,或者一个主属性组

(8)部分函数依赖(partial functional dependency):次属性依赖于主属性组中的某一个属性

(9)依赖表(dependent table):也称为弱实体(weak entity)是需要用父表标识的子表。

(10)关联表(associative table):是多对多关系中两个父表的子表。

2.数据设计参考范式

2.1第一范式(1NF):属性不可拆分



         图2.1.1“邮箱”属性的值被分为两列,不符合第一范式。而图2.2.2“邮箱”的属性被分割,也不符合第一范式。更改后的图2.1.3则符合了第一范式,属性不可拆分。

 

2.2第二范式(2NF):去除部分依赖,保留完全依赖

姓名

课程

分数

教材

价格

小王

英语

91

英语书

10

小魏

数学

85

数学书

9

小王

数学

96

数学书

9

小魏

语文

100

语文书

8

图2.2.1:符合第一范式,但不符合第二范式


         现在我们有一张符合第一范式的表,但他仍然会给我们带来很多麻烦。

         如果想要增加一门课程,如何操作?

 

姓名

课程

分数

教材

价格

小王

英语

91

英语书

10

小魏

数学

85

数学书

9

小王

数学

96

数学书

9

小魏

语文

100

语文书

8

 

物理

 

物理书

 

 

物理

 

物理书

 

 

物理

 

物理书

 

图2.2.2:插入异常

        

         每次插入“物理”都要插入一次“物理书”。而且,主要的“姓名”字段为空,这个叫插入异常。

 

姓名

课程

分数

教材

价格

小王

英语

91

英语书

10

小魏

数学

85

数学书

9

小王

数学

96

数学书

9

图2.2.3:删除异常

        

         由于高年级不再需要“语文课”,那么我们先把含有“语文”的记录都删除掉,这个时候我们同样把“课程”和“教材”关系也删除了,我们就不知道“语文”这门课要用什么“教材”了。这个叫删除异常。

 

姓名

课程

分数

教材

价格

小王

英语

91

英语书

10

小魏

数学

85

数学书

9

小王

数学

96

数学书

9

小魏

语文

100

语文书

8

图2.2.4:更改异常

        

         我们要把“数学书”这个教材换成“高级数学书”,那么所有的先关记录都要更改一遍,是不是很麻烦?这个叫更改异常。

         为了解决上述三个问题,我们就引入了第二范式(2NF)

         (姓名,课程)>>(分数)

         (姓名,课程)>>(教材)

         由于“姓名”和“课程”这两个字段能确定剩下的字段,我们就称这样的字段组合为“码”,而码中的每个字段我们称之为“主属性”。非码的字段我们称之为“次属性”。

         我们注意到,在(姓名,课程)>>(教材)的这个关系中,存在(课程)>>(教材)。就是课程可以单独确定教材,那么“老师”这个字段,对“姓名”和“课程”键的依赖就叫做部分依赖(因为它部分依赖与组合键中的“课程”字段)。而“教室”、“时间”则完全依赖于“姓名”和“课程”的组合键。

通过拆分表,我们消除“部分依赖”。



上述三个问题是不是都解决了?在以后的学习中我们会学习到如何把两个表关联起来。

 

2.3第三范式(3NF):符合2NF,并且消除“传递依赖”



         每学期学校都会购书,而每年的书的价格都不一样,比如今年“数学书”涨价卖“11”块,我们就要把所有的含有数学书的记录的价格都更改一遍,还是存在异常?

         在这里,“课程”>>“教材”>>“价格”,那么“价格”对“课程”就是“传递依赖”。这个时候我们需要把“课程”表再次拆分,消除“传递依赖”。



         最终我们得到了满足三个范式的表格。即图2.3.1(拆分1)、图2.3.3(拆分3)、图2.3.4(拆分4)所组成的表格。



         对比一下我们最初的表,是否很整洁呢?


3.结束语

         数据库设计的三个范式是我们在设计数据库时可以参考的规则,但并不是我们必须要做的规范。所有的技术都要服务于我们的具体业务,而不应该为了好的技术而技术。

         同样做数据库也是如此,比如如我我们是为了维护网站,或者做销售系统,主要是为了储存信息,即On-Line Transaction Processing联机事务处理过程(OLTP),三个范式则给我们提供了比较好的参考依据;但是我们如果只是为了做数据分析,即Online Analytical Processing联机分析处理过程(OLAP),则完全可以抛弃三个范式。



C
粉丝 1
博文 128
码字总数 44892
作品 0
南京
私信 提问
加载中
请先登录后再评论。
数据库设计(一)概念、内容、步骤和参考资料

概念 百度百科对数据库设计的给了如下的描述: 数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种...

osc_kcuhx0s1
2018/02/23
3
0
团队作业第五次—项目系统设计与数据库设计

<center>团队作业第五次—项目系统设计与数据库设计</center> 格式描述 团队名称: 云打印 课程名称: 软件工程实践 作业要求: 项目系统设计与数据库设计 作业目标: 项目需求分析 博文下载: 下...

osc_9wm81b2v
2019/04/15
2
0
【数据库系统原理】 数据库相关理论

第一章 主要是基本概念讲解和 历史发展 (1)数据库的基本概念,包括什么是数据,数据库,数据库管理系统,数据库系统等(2)数据库管理技术的发展,包括人工管理阶段, 文件管理阶段,数据库...

傻子点点
05/13
0
0
数据库设计和ER模型-------之数据库系统生存期(第二章)

数据库设计 概念:开发人员利用开发环境表达用户要求、设计构造最优的数据模型,然后据此建立数据库以及其应用系统,这个过程称为数据库设计 数据库生存期 1968年首次提出“软件工程”的概念...

osc_rlhs4hdf
2018/01/22
2
0
三大系统软件(数据库,操作系统,编译器)书籍推荐

三大系统软件有数据库,操作系统,编译器。有种说法是程序员的水平从掌握三大系统软件的程度来看。会编译器的比会操作系统牛,会操作系统的比数据库牛,什么都不会的水平堪忧。这里主要推荐国...

HappyBoyLi
2019/05/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

西安索命拉土车!(又遇上一场车祸)

西安是一座厚重的古城。 1、拉土车 大家知道我是陕西人,现在也定居到西安。 其实在2010-2013年在西安工作过3年,那段时间真的是见识到了西安拉土车的疯狂。 那时候西安软件园还比较偏僻,高...

osc_1ls4yaq1
4分钟前
0
0
大牛聊Java并发编程原理之 线程的互斥与协作机制

可能在synchronized关键字的实现原理中,你已经知道了它的底层是使用Monitor的相关指令来实现的,但是还不清楚Monitor的具体细节。本文将让你彻底Monitor的底层实现原理。 管程 一个管程可以...

osc_9gohs268
5分钟前
0
0
Linux进程内存管理对程序开发者的影响详谈

本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使...

linuxprobe2020
6分钟前
0
0
小伙子,你懂线程池的创建吗?

为什么阿里巴巴要禁用Executors创建线程池?看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过源码分析禁用的原因 一、线程...

osc_uie90flw
6分钟前
0
0
Java连载129-广播数据包、网络编程总结

一、广播数据包 1.特性 这种通信类似于广播,要想实现这个功能,需要使用特殊的IP地址,要想实现多播或者广播通信的主机必须加入一个D类地址,D类地址的十进制表示范围为224.0.0.0~239.255.2...

osc_8nnvoyb1
7分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部