大家好,我是jacky,很高兴跟大家分享本课时的内容,从本节课开始,就开始了我们第二章的学习,第一章我们抛出了若干问题,从第二章开始往后,都是解决问题的一个过程;
第一章的案例中,我们拿手机销售公司举例,我们看到了因为没有构架数据共享体系,该公司的数据管理是混乱并且低效的,那么本章节,我们就来给这家公司构建一个数据库体系吧;
(一)数据库设计四步曲
数据库设计是整个实际业务项目里最为核心的部分,如果说我们把项目中数据库设计攻克了,那么通常来说,这个项目就成功了一半;如果在数据库设计的环节出了问题,即使我们代码写的再牛,框架用的再熟,项目大概率都是要失败的;
我们说,无论我们要设计的数据库的大小和复杂程度如何,在进行数据库设计时,都遵循着下面这四个步骤:
(1) 收集信息
(2) 标识实体
(3) 标识每个实体需要存储的详细信息
(4) 标识实体之间的关系
1.1 收集信息
在创建数据库之前,我们要充分理解数据库需要完成的任务和功能。简单的说,就是需要了解数据库需要存储哪些信息和数据,要实现哪些功能;拿手机销售公司为例,为了给大家讲的深入浅入,jacky这里就给定这家公司一个任务和功能,就是将手机销售给各个渠道商代理;
- 我们说手机销售给各个渠道商代理这个情景就是我们收集到的信息;
1.2 标识实体
我们说设计数据库的第二个步骤就是标识实体;这里jacky解释下实体的含义,实体可以使有形的事物,比如说人或产品;也可能是无形的事物,比如说金融交易、公司的部门等等。
设计数据库就要在我们的系统中标识出这些实体,那么给我们手机销售给渠道商这个特定场景标识下实体;
- 手机和渠道商
这里jacky特别强调两下:
实体一般是名词,一个实体只描述一件事情,不能重复出现含义相同的实体;
数据库中的每个不同的实体都拥有一个与其相对应的表,按照我们举例的需求,在手机销售管理的数据库中,因为有手机和渠道商两个实体,所以至少有手机表和渠道商表这两张表,再深入的解释,jacky下次课分享,本课时,大家先做一个了解;
1.3 标识每个实体需要存储的详细信息
在标识实体后,我们接下来就要标识每个实体存储的详细信息,也就是实体的属性,这些属性将组成表中的列;比如案例中手机的属性有商品编码、商品名称、单价这3个属性;渠道商有渠道商编码和渠道商姓名2个属性
1.4 标识实体之间的关系
关系数据库有一项非常强大的功能,就是它能够关联数据库中各个项目的相关信息,那么我们给定的手机销售给渠道商这个任务中,把手机和渠道商关联起来的就是销售,大家说是不是;
(二)概要设计-绘制E-R图
我们说每个行业都有各自不同的图形化表达方式:机械行业需要机械制图,建筑行业需要施工图,那么我们数据库设计也需要图形化的表达方式——E-R图,我们也叫实体-关系图,
拿手机销售公司为例,数据库设计就是要把现在公司的销售管理现状制作成模型,这样才便于分析,这个分析中使用的模型就“E-R模型”
2.1 如何绘制
E-R图以图形的方式将数据库的整个逻辑结构表示出来;E-R图的组成包括以下几个部分:
矩形:表示实体集;
椭圆:表示属性;
菱形:表示联系集;
直线:用来连接属性和实体集,也用来连接实体集和联系集
2.2 案例实操
我们看一下这张E-R图,手机这个实体有三个属性,分别是商品编码,商品名称和单价,渠道商这个实体有两个属性,分别是渠道商编码和渠道商名称;这个
手机和渠道商之间就是由手机卖给渠道商这件事联系起来的,这时就可以把“销售”作为关系来考虑了
- 我们再来看这个E-R图,,这个M与N是什么意思呢?就是M种品牌手机销售给N个渠道商,这时我们也可以通过E-R模型分析出手机与渠道商之间存在着多对多的关系,我们给这种实体之间的对应个数一个更学术一点的名称,就是“基数”;
上面就是本课时的分享,谢谢大家
(三)具体设计-三范式
2.1基础铺垫
2.1.1 第一范式(1NF)
- 数据库的列不可分割,如果有的列包含多种信息,可以把它抽取出来成为一个单独的表;
2.1.2 第二范式(2NF)
- 数据表中的每一行,都应该有唯一的标识,即每一行都应有主键区分
2.1.3 第三范式(3NF)
- 数据表中的所有非关键字段,必须依赖于主键
2.2 三范式的核心逻辑
数据库的核心思想
- 为了数据的存储
三范式的核心思想
- 不要出现冗余数据(用最少的空间存储最多的信息),第二范式是避免了冗余行的出现,第三范式是避免了冗余列的出现;