00:00
好,那么这三范式到底是什么呢?咱们还得按照PPT往下捋哈。首先呢,咱们得知道为什么需要设计这个数据库啊。嗯,比如说咱们盖一个茅草屋。茅草屋。呃,以下这个场景来自于三国演义中的三顾茅庐。截的图哈,截的图。哎,盖一个这小破茅屋,是不是也得设计一下啊,提前设计好这个这块放门,这块放房子呀。更复杂一点,现代化的盖一个大厦是不是也需要设计啊?其实无论你干什么,是不是都需要设计一下。对吧?哎,当数据库比较复杂的时候,我们也需要设计一下,不是说拿来就使的啊。现在咱们这几张表都是我给设计好之后,给大家提供应用的。但是如果什么都没有的话,你是不是得自己去设计这个表叫什么,表中都有哪些列呀,这些都需要自己去搞定了。那今天咱们要学习的就是设计数据库。
01:02
设计数据库。那么设计数据库呢?它有好对吧?肯定有好处,良好的数据库设计,它可以节省节省这个储存空间。它能够保证数据的一些完整性。什么叫完整性?还记得吧?是就是靠谱准确是吧,嗯。它能够方便数据库的应用系统的一个开发。哎,每次说到这个第三点的时候啊,其实这前两点。前两点对于咱们数据库开发,就是对程序员来说啊,你根本体会不到。体会不到,他怎么能不能省空间啊,不知道是吧,哎,它准不准确啊,这个咱们平时数据的话就已经看得出来了。那么最后一点,作为咱们程序员是最有深有体会的。最深有体会了。有的时候啊,千万不要死脑筋啊,咱们以后做开发的时候打,比如打一个之前我经历过的事儿哈。就是说以前的数据库呢,已经设计好了,就像咱们现在一样,给你比如说给你四张表。
02:05
然后对这四张表呢,进行各种功能的一个组合开发。比如说咱们现在这个学生成绩,这个是吧,我想查一查加瓦的成绩,我想查一查这学期的总成绩,这种乱七八糟的功能。但是有的时候啊。有的时候他给你提出一种比较特殊的要求,这个特殊的要求呢,咱咱就假设啊,这个特殊的要求我一写我一写呀,这几张表。各种表连接,各种子查询,都无法满足他这样的一个需求。都无法满足这个需求,什么左外联啊,根本就搞不出来它这个功能。这个时候你的脑筋需要活一活啊,它这个数据库设计出来之后,并不是说表的字段啊,表明啊,就永远那样了。你可以对这个表啊进行一些修改。我原来就是开发的时候呢,有这么一个功能,我就费尽脑汁啊,我就这点儿这个脑细胞全用上了,就是写不出来这个circle。
03:07
就是查询这个结果啊,就和想象的是不一样的。呀,这个写了好几天,后来不管三七二十一,我直接对表加了一个列。加了一个外键的一个列好了功能很简单就写出来了。明白我说的什么意思吗?就是数据库这里边儿这几个列哈,并不是一成不变的,有的时候你要设计的疏忽了,你可能这个功能你就写不出来。但是为了咱们把这个功能能写的出来啊,这个表啊,是不是也可以进行二次更改啊。也可以进行二次更改哈。对吧,所以咱们这个第三点说的就是这个问题,如果你这个数据库设计的非常非常棒,非常非常棒,那么咱们在做应用开发的时候,就不存在写不出来的功能。哎,只要怎么查他都能查出来,它是不存在查不出来东西的。
04:05
如果你糟糕的设这个设计的话。浪费空间、浪费内存、数据更新和插入都会经常引发一些错误。就是乱七八糟的设计数据库哈。哎,这是它俩的一个区别。所以良好的数据库的设计至关重要,至关重要。好吧,非常非常重要啊。你设计出好的数据库以后开发一马平川,非常简单。如果你设计的数据库非常非常非常不好的话。你做开发,做应用查询就费劲了,还特别费劲。好吧,这是区别哈。好,咱们来看看设计数据库的步骤哈,首先第一步非常重要,一般第一步呢,大家如果找工作之后啊,一般第一步你涉及不到。你涉及不到的啊,这个第一步一般都是项目经理或者说项目的负责人和客户去沟通。
05:02
对吧,哎,系统的有关人员进行交流座谈,充分的了解用户需求。比如说咱们做一个银行的项目,你是不是咱们公司得派一个人和银行的工作人员去谈功能啊,哎,你们都需要用到什么功能,我怎么跟你们做是吧?哎,需要去交流。这个第一步是收集信息。来收集信息,哎。这个就很重要了,对吧,比如说这里边儿给咱们提的一个事例,是酒店的一个系统。酒店的系统,它这里边儿需要什么功能呢?旅客办理入住手续对吧?哎,后台呢,需要存放客人的各种信息,客房的信息。然后客房的信息里边包含什么床位啦,床位的数量,还有价格。然后客房的管理有什么客房类型,比如说什么总统套房是吧,标准间是吧,啊这个意思啊。然后客房的当前状态,这些东西都需要和酒店的工作人员去进行沟通,去洽谈。
06:07
对吧,好了,这些功能你了解了之后,你干嘛了呢,就回公司开会,首先。跟Java开发一样。做项目结构,首先你要找名词,就是标识实体。咱做Java的时候,假设这么一个功能,你是不是得先把类给我倒出来呀。得先刀类哈,然后这个类里边都有什么属性。都有什么属性?你是不是就知道了。对吧,你看我怎么叨的。呃,数据库要求对象是一般都是名词是吧,名词啊就是找类呢。我在这个酒店信息管理系统中,我就可以倒出两个类了,一个是客人,一个是客房。人是。实体是吧。客房这个房间嘛,它也是实体这两个类找到了。
07:00
这两个类找到了。接下来就是标识每个实体的属性。客人有编号姓名身份证是吧?客房呢,有客房号名称,床位状态。好,这样的话,信息是不是尽量的结构化了。结构化了,最后找这个实体之间的关系。Relationship。客人和客房之间的关系很明显,什么关系啊?就是入住吗?对吧,哎,关系即为入住。OK,谁主谁从的一个过程。好。呃,咱们这些概念分析清楚了之后啊,接下来呢,你就要想象它们之间的映射基数了。映射基数什么叫映射基数呢?在表和表之间的映射基数无外乎这四种,无外乎这四种。第一种是一对一的关系。一对一的关系。这个一对一啥意思,就是,呃,生活中的一对一就是一个对一个,比如说什么呀,你对应你的身份证。
08:08
对吧,是不是一对一啊一对一。比如说一个身份证号对应一个档案编号。是不是也是一对一啊?哎,这是一对一。那一对多的这个映射基数都有什么呢?比如说你可以有好几件衣服。是这意思吧?而你的这些衣服是不是也属于你自己啊?对吧,我才不把我衣服借给别人呢,对吧?哎,这个是你对应的好多衣服。或者说也很多都是一对多呀,一对多啊,在咱们不管是数据库中还是生活中用的是最多的。比如说咱们呢。我这个人我是不是各个网站的什么账号密码,我说都有好几套啊。对吧,我是不是也可以学习很多知识啊。
09:01
哎,是不是都是一对多的关系啊?那么多对一其实就是反过来了,其实就是反过来了,比如说。多对一,生活中的多对一啊,比如说这个香蕉,苹果,大鸭梨都被我吃掉了。是吧,哎,这也是一个多对多一多对一的关系。那么给大家举了这么多例子,大家想一个多对多的关系是什么?生活中的多对多。什么都什么,这个关系是多个对多个呢。买家和卖家是,哎,你看一个买一个店家是吧,一个店家是不是可以有很多很多顾客呀。对吧,而这个顾客呢,是不是也可以去很多别的店铺去买啊。对吧,哎,确实是多对多啊,还有其实咱们生活中周边最贴切的例子就是老师和学生多对多。你想是不是?一个老师可以教很多学生对吧,一个学生也可以有很多老师。
10:04
是吧?哎,多得多,多得多。在这里边儿呢,我给大家举的一个例子是这个啊。客户和订单。一个用户可以生产多个订单,没问题吧?他可以生产多个订单,我今儿买双鞋,明天买双袜子,后天买双拖鞋,是不是一个用户产生三个订单啊,OK吧。那订单和产品之间又是什么关系呢?我这写的是。多的多吧,哎,多多,你看能不能理解产品和订单之间是多的多。一个订单,我里边是不是可以有很多商品啊。对吧。呃,买一双袜子。送辆车。行吧,是不是一个订单对应两个商品啊。对吧。而这双袜子。可以被很多人买吧?对吧,哎,多对多啊对对多。了解了这样的映射技术之后啊,咱们来看一看,会是一个这个数,呃,酒店的婴儿图。
11:07
这个ER图,这个图形啊,这个图形。啊,看一看就得了啊,没必要去学这个画这个东西。没啥意义哈。这个东西,这个word是不是也能画呀。呃,然后呢,这个是客人,客人都有什么属性,光光是不是这么多属性啊,对吧。然后嘞,客房有这么多属性,这么多属性。这么多属性,然后他俩之间什么关系,靠入住去关联,其实啊,刚才咱们说了。呃,跟酒店的工作人员。交谈谈需求,是不是这张图就把刚才的所有需求搞清楚了,就。一张图是不是就清晰了?哎,这个项目经理干就这干这活呢。他会把一个项目用图形的东西给大家描述出来,然后大家开会讨论怎么设计数据库。
12:00
OK。往后看。呃,然后呢,将ER图转成数据库模型图。什么叫数据库模型图呢?就长这个样。就是说拿这种东西啊,把这个表,这是表明这是啥。主见,这是啥?FKY键。OK,那这个单词是什么?那么咱们表呢,就已经见完了。看吧,那这张这两张表,这边是人表,这个是房间表,这两张表来我已经给你这个数据库了。谁是主,谁是从在这两张表,你看你靠的是什么列去关联在一起的。靠的是不是room ID啊?对吧,那你再看room ID在这两张表中,哪张表中room ID是主键?
13:02
这很明显告诉你了是吧。所以。主表出来了。这回能分得清主从了吧?哎,这个就是从表。还是那句话呀,不要一味的这个第一印象,哎呀,这个客人人住房间,人为主板,不是那样的啊,不是那样。好吧,你得看你设计出来的这个东西怎么去设计出来的啊。然后呢,咱们开始学习这三板斧了,之前都是。给大家说的是数据库设计的一个步骤。好,想象一下,把这个步骤记录下来,来。第一步干嘛?设计数据库的步骤?收集信息。第二步。标识实体,说白了,这个实体的意思就是。找名词,或者说名词的意思就是。
14:03
表明。表明。对吧。表找到了,那就是。标识。属性。标识属性。喂。表就实体吧。标识属性。OK。最后一步就是建立实体与实体间。的关系。第五步。第五步。画图。整个就是这几步。整个就是这几步。图形画出来了之后,第六步。第六步,开始真正的。编写。语句啊,语句表。
15:01
好,那这个到底怎么去建表,到底怎么去建表,而表中每个列都是什么这块需要。根据。三大范式。来,见表。好,接下来咱们就学习一下什么是三大范式。
我来说两句