MySQL数据库作为数据存储的介质为应⽤系统提供数据存储的服务,我们如何设计出合 理的数据库、数据表以满⾜应⽤系统的数据存储需求呢?
-
⻋库:是⽤来存放⻋辆的,⻋库都需要划分⻋位,如果不划分⻋位,⻋⼦杂乱⽆章的存放可能会导致⻋辆堵塞,同时也可能造成场地的浪费——有限的场地能够停放最多的⻋辆,同时⽅便每⼀辆⻋的出⼊。
-
数据库:是⽤来存放数据的,我们需要设计合理的数据表——能够完成数据的存储,同时能够⽅便的提取应⽤系统所需的数据。
一、 数据库设计流程
前言:数据库是为应⽤系统服务的,数据库存储什么样的数据也是由应⽤系统来决定的。 当我们进⾏应⽤系统开发时,我们⾸先要明确应⽤系统的功能需求——软件系统的需求 分析
1. 根据应⽤系统的功能,分析数据实体(实体,就是要存储的数据对象)
比如我们喜闻乐见的电商系统它的实体通常有:商品、订单、用户......
再比如我们上学时的教务管理系统:学生、课程、成绩......
2. 提取实体的数据项(数据项,就是实体的属性)
比如商品正常情况下有的实体属性:商品名称、商品信息、商品价格.....
再比如用户:用户名、用户id、用户密码.....
3. 根据数据库设计三范式规范视图的数据项 检查实体的数据项是否满⾜数据库设计三范式
如果实体的数据项不满⾜三范式,可能会导致数据的冗余,从⽽引起数据维护困难、破坏数据⼀致性等问题
第⼀范式 :要求数据表中的字段(列)不可再分
第二范式 :不存在⾮关键字段对关键字段的部分依赖
第三范式 :不存在⾮关键字段之间的传递依赖
4. 绘制E-R图 (实体关系图,直观的展示实体与实体之间的关系)
实体关系图又称E-R模型图,是一种提供了实体,属性和联系的方法,用来描述现实世界的概念模型。通俗点讲就是,当我们理解了实际问题的需求之后,需要用一种方法来表示这种需求,概念模型就是用来描述这种需求。
基础元素
1) 实体 实际问题中客观存在的并且可以相互区别的事物称为实体。实体是现实世界中的对象,可以具体到人,事,物。可以是学生,教师,图书馆的书籍。
2)属性 实体所具有的某一个特性称为属性,在E-R图中属性用来描述实体。比如:可以用姓名、年龄、性别来描述人。
3) 实体集 具有相同属性的实体的集合称为实体集。例如:全体学生就是一个实体集,(200170901,爱坤,男,1999/12/12)是学生实体集中的一个实体。
4) 键 在描述实体集的所有属性中,可以唯一标识每个实体的属性称为键。键也是属于实体的属性,作为键的属性取值必须唯一且不能“空置”。
5) 实体型 具有相同的特征和性质的实体一定有相同的属性,用实体名及其属性名集合来抽象和刻画同类实体称为实体型,其表示格式为:实体名(属性1,属性2,……)
6)联系 世界上任何事物都不是孤立存在的,事物内部和事物之间都有联系的,实体之间的联系通常有3种类型:一对一联系,一对多联系,多对多联系。
事物之间的关系
1)一对一联系(1:1):
对于实体集A中每一个实体,实体集B中最多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A和实体集B具有一对一联系。
一般来说,一个班级只有一个正班长,且一个班长只在一个班中任职,所以我们说班长和班级之间具有一对一联系。
(2)一对多联系(1:n):
实体集A中每一个实体,实体集B中有n个实体(n ≥ 0)与之联系,反之,B中的每一个实体,实体集A中至多只有一个与之联系,则称实体集A与实体集B具有一 对多联系。
一般来说,一个班级中有若干个学生,而每个学生只在一个班级中学习,则班级与学生之间具有一对多的联系。
(3)多对多联系(m:n):
因该不难推测,多对多就是实体集A中每一个实体,在实体集B中有n(n ≥ 0)个与之联系,反正实体集B中每一个实体,A中也有m(m ≥ 0)个实体与之联系。我们则称A与B具有多对多联系。
一门课程同时有若干个学生选修,一个学生一次可以选择若干门课程,所以课程与学生之间的联系属于多对多的联系。
E-R图的绘制
基本要素的表示方法: 长方形——实体 椭 圆——属性 菱 形——联系 说明:在相应的框内要写上实体名、属性名或联系名。
绘制方法: 实体与属性用直线相连 实体与联系用直线相连 联系与属性用直线相连 同时在菱形与矩形的连线上标上联系的类型。 (1:1、1:n、m:n)
5. 数据库建模
-
三线图进⾏数据表设计
-
PowerDesigner
-
PDManer
我平时是用PDManer,别问为什么不用PowerDesigner因为我菜还是PDManer简洁适合我这个小白
6. 建库建表 编写SQL指令创建数据库、数据表
这个我相信各位应该非常熟练了吧!
DROP TABLE IF EXISTS SIMS_COLLEGE;
CREATE TABLE SIMS_COLLEGE(
`COLLEGE_ID` VARCHAR(32) NOT NULL COMMENT '学院ID' ,
`COLLEGE_NAME` VARCHAR(90) COMMENT '学院名称' ,
`SHORT_NAME` VARCHAR(90) COMMENT '学院简称' ,
`INTRO` VARCHAR(900) COMMENT '学院介绍' ,
`PROFESSION_NUMBER` INT COMMENT '专业个数' ,
`STUDENT_NUMBER` INT COMMENT '学生人数' ,
`PRESIDENT` VARCHAR(90) COMMENT '院长' ,
`TENANT_ID` VARCHAR(32) COMMENT '租户号' ,
`REVISION` INT COMMENT '乐观锁' ,
`CREATED_BY` VARCHAR(32) COMMENT '创建人' ,
`CREATED_TIME` DATETIME COMMENT '创建时间' ,
`UPDATED_BY` VARCHAR(32) COMMENT '更新人' ,
`UPDATED_TIME` DATETIME COMMENT '更新时间' ,
PRIMARY KEY (COLLEGE_ID)
) COMMENT = '学院';
7. 添加测试数据SQL测试
太多太长了我懒得写,大家脑补一下。