
大家好,我是渣哥,是一个每天都在攒钱植发的程序猿。

上周跟上上周分别跟大家聊了聊咱们数据库设计的E-R图和三大范式,那么有同学可能会问了,那我现在要设计数据库了,该用什么来设计数据库呢?
那么我们今天就来了解一下,如何用工具创建数据库模型,以及如何把数据库模型变成真正的数据库结构,并通过一个小的选课模块,来完整体验一遍数据库设计的流程。
本文目标:
●初步熟悉NaviCat 15 for MySQL的使用
1)使用NaviCat创建数据库模型
2)将数据库模型导出到数据库的两种方式
●通过一个选课模块,体验数据库设计的完整流程。
1)E-R图分析
2)关系模型分析
3)数据库模型设计
4)导入成数据库
全文共6431字, 阅读预计需要10分钟;
温馨提示:建议准备好工具,边看边练。
咱们中国有句老话:工欲善其事,必先利其器,讲的接地气一点就是:磨刀不误砍柴功,那咱们既然想砍柴,挑一把称手好用的砍柴刀就非常有必要。
网上数据库模型设计的软件有非常多,比如:
PowerDesigner,功能非常多非常强大,但是界面全英文不说,操作还不是很人性化,并且很容易崩溃(原谅渣哥的渣电脑)。
PDMan,现在改名叫
元数建模了,全中文界面非常友好(废话,因为人家就是咱国内团队开发的),功能也很强大,对各种数据库都有很好的支持,还能智能生成数据库文档,这个后面渣哥要去学学怎么使用。
NaviCat for MySQL,这个本来是一个数据库管理软件,但是它也带了数据库模型设计的功能,另外模型设计完毕之后,还能直接导入成数据库,渣哥特别喜欢这个,今天就以这个软件为例,咱们学习一下数据库设计吧。
(悄咪咪说一句,之前电脑,MySQL是直接装在我本机上的,电脑配置也比较低,开机启动MySQL,又比较费内存,所以花了一点时间,弄了一个Linux虚拟机装了MySQL,弄了远程连接;期间踩了不少坑,如果有同学想要搞一下的,跟渣哥说,渣哥写一个教程)。
下载链接:NaviCat 15 for MySQL下载链接
https://www.navicat.com.cn/download/navicat-for-mysql
进入之后,根据自己的系统下载对应的安装包,然后安装的话,就是一步步的下一步操作,这就不用渣哥教了吧。
值得一提的是:这是一个收费的软件,可以默认试用14天,渣哥在这里提示一下各位同学,有条件的情况下请尽量支持正版。
安装完成后,应该就可以看到这样的软件界面。

因为咱们今天需要学习的是使用NaviCat 设计数据库模型,所以NaviCat的其他功能请各位同学先自己学习一下,今天咱们先去点击右边的模型图标。

然后点击新建模型。

选择默认的数据库和版本。

进入模型设计页面。

设计数据库模型也非常简单。选到表,然后在主界面添加一张表,这样就为这个模型新建了一张表,可以双击表去修改表的字段、表名等属性,其实非常的简单。
那么接下来咱们就来结合前面讲到的E-R图和数据库设计的知识,尝试使用NaviCat来新建一个简单的选课模块的数据库模型设计吧。
现在有这样一个选课模块的需求:每一名老师可以开设自己想要教授的课程,课程数不限,但是一门课程只能由一名老师来上,然后由学生来进行选课,每一名学生的选课数不限;
这个模块比较简单,那我们首先来进行E-R图的分析:
E-R图设计
1.首先我们来确定这个模块中的业务实体:
这个模块中涉及到的实体有:老师、课程、学生。

2.然后我们确定这些实体分别都有哪些属性
老师一般有教师编号、姓名、性别等属性;
课程一般有课程编号、课程名称、授课时长、学分等属性;
学生一般有学号、姓名、性别、入学时间等属性;

3.属性确定好了之后,我们看一下实体之间是否存在关系。
老师和课程之间存在关系;
课程和学生之间存在关系;
老师和学生之间,不存在直接关系;

4.第四步呢,我们来确定每一个实体的关键字属性。
老师的关键字属性就是老师的编号,通过唯一的老师编号可以区分每一个老师;
课程的关键字属性就是课程的课程编号,通过唯一的课程编号,可以区分每一门课程;
学生的关键字属性就是学号,每一个学号就对应着一名学生。

5.第五步我们来分析关系的类型
首先来看老师跟课程的关系类型,根据上面的需求得知,一名老师可以开设多门课程,但是一门课程只能由一名老师来上,那么老师跟课程的关系就是一个一对多的关系,一名老师对应对门课程,那就在表示关系的菱形两边分别写上1和n来代表这是一个一对多的关系;

然后我们看一下课程跟学生的关系,根据上面的需求得知 ,一名学生可以选多门课程,一门课程也会拥有多名学生,那么课程跟学生的关系就是一个多对多的关系,那我们同样的写在E-R图上吧;

好的,至此我们针对这个选课模块的E-R图就已经分析完毕了,看看我们最终的效果吧:

好了,E-R图设计好了之后呢,我们就要把E-R图转化为关系模型,关系模型就是要将E-R分析成一个二维的表,用于描述关系与对象的属性,一般用R(A,B)表示,我们可以简单把R理解为表名,A、B都是表中的字段;
根据上面的E-R图,我们先来分析一些简单的关系模型。
首先是老师:老师(教师编号,姓名,性别)
然后是课程:课程(课程编号,课程名称,学时,学分)
最后是学生:学生(学号,姓名,性别,入学时间)
好的,我们上面把实体的对象分析完了,存在一个问题,关系呢?
上面的关系模型中好像没有体现出各个实体的关系呀,那么这个关系该怎么去体现呢?
其实也很简单,
如果是一对一关系的话,需要分析一下实体的主从关系,然后在从的实体中添加上主实体的主键;
如果是一对多的关系呢,需要在多的那个实体添加上一的实体的主键;
如果是多对多的话,就之间新建一个 表用于存放两边的实体;
那么我们把上面分析得出的关系模型做一下修改吧:
老师(教师编号,姓名,性别)
课程(课程编号,课程名称,学时,学分,
教师编号
)学生(学号,姓名,性别,入学时间)
选课表(选课记录ID,学号,课程编号)
好的,那么我们关系模型也分析好了之后我们就要进行数据库模型设计了,这时候就要用到我们的NaviCat了。
打开我们的NaviCat,现在要进行数据库模型的设计了;数据库模型设计也非常简单,只需要根据上面分析得出的关系模型创建对应的表,指定字段的具体数据类型就可以了,那我们开始吧!
因为是演示,主要是讲一下设计思路,那么我这边就全部使用中文了,但是在实际的设计中,表名和字段名一定一定是不能使用中文
的,这个一定要记清楚。
首先是老师表的设计,老师表的表名我们就简单直接的写"老师表",然后通过上面的关系模型我们得知,老师表里需要有三个字段,分别是教师编号、姓名、性别。
教师编号我们设定他的数据格式为由五位数字组成的字符串,比如00001号教师这样,那么我们在设定数据类型的时候呢,就可以使用char这种数据类型,char是定长字符串,相比于varchar更节省空间,
然后就是姓名这个字段了,姓名的话没得说,我们用varchar就可以了。
然后就是性别,性别的话,我们使用tinyint,因为性别非男即女,但是为了数据的健壮性,我们也要考虑极为特殊的情况,所以这边不能使用boolean类型;

然后呢是课程表的设计,表名我们就写课程表,课程编号我们就假定他是一个12位数字组成的字符串,所以我们用char(12),课程名称这个不用解释了,用varchar就好,学时和学分,这都用tinyint(2)就好,关键是教师编号这个字段,因为我们上面有分析到,教师和课程是存在一个一对多的关系的,一个老师可以开设多门课程,一门课程的授课老师只有一个,所以需要在课程表里添加上老师的课程编号来指明某门课程是由哪位老师来授课的,但是在这里请注意,逻辑上,我们在这里应该设置一个外键字段就是这个教师编号,去连接到老师表里的教师编号这个主键,但是呢,实际情况中我们往往不会真的去设计一个外键关联,因为这样的话对性能的影响会比较大,所以呢,我们在这里只要设置这样一个字段作为逻辑外键即可,不需要真的去为这个字段添加外键关联,这样的话会比较合适。

再然后是学生表的设计,表名的话不用说了就是学生表,学生表这边就不用多说了,值得一提的是这个入学时间,入学时间应该是一个年月日的日期格式,比如2021-09-01这样子,所以我们数据类型应该选择Date,至于学生跟课程的关系,因为这两个是一个多对多的关系,所以我们需要创建一个学生选课表来存储对应的数据;

最后就是学生选课表,这里边体现的就是学生与课程的选课关系,一个学生可以选择多门课程,一门课程也会有很多学生选择,所以我们需要有这样一个学生选课表,将每一条选课记录,记录下来,后面需要查询某个学生选择了哪些课程,某一门课程被哪些学生选择了,通过关联查询很容易就可以查询到。

好了,那么至此,咱们针对这个选课模块的数据库模型设计 就已经设计好了,来看下模型长什么样子吧:

模型设计完成之后呢,咱们就要将模型转化为真正的数据库了,来看看如何使用NaviCat来将数据库设计模型转化为真正的数据库吧。
将模型转化为数据库总共有两种方式,
一种是将数据库模型导出为SQL文件,然后在数据库中执行即可;
另一种呢就是使用NaviCat的同步到数据库的功能将模型直接导入到数据库中
如果我们设计的数据库模型需要共享给其他人的话,最好是将导出为SQL文件,这样便于分享,如果是自己本地玩玩的话,直接同步到数据库就可以了。

第一种方式只要选择导出SQL,然后选择SQL文件的保存位置就可以了,非常简单,这边就不多说了。
第二种方式呢其实也很简单,只需要选择同步的位置就可以了,也是非常简单的。
同步好了之后就可以在目标数据库中看到我们刚刚设计的那四张表了,是不是非常简单?

好了,本篇我们先讲了一下使用NaviCat进行数据库模型设计,然后通过一个小小的案例,结合前面几篇所学到的知识,带着大家体验了完整的选课模块的数据库设计流程,到这里整个数据库设计的系列文章就结束了,相信这几篇文章看下来的你 ,已经掌握了数据库设计的整体思路,但是这只是开始,后面的路还很长,要学的知识还很多。
一起加油吧!少年!
我是渣哥,我们下期再见!








