00:00
好,那么接下来的话呢,我们来讲一个叫ER模型啊,这里边呢,我们提到说诶数据库的设计啊,是牵一发而动全身的啊,这个大家应该有这样的一个概念了,就是说我们一旦数据表设计好以后,我们往里边也添加了很多数据了,后期呢,如果发现我们的表设计呢,是有问题的啊,这个时候的改动呢,是成本极高的,对吧?那么我们说有什么办法呢?在我们这个立项啊之前就看到啊,或者就能够去设计咱们这个数据库当中啊,这么多张表之间的一种关系啊,当然了不管这个关系了,首先呢,得涉及到你到底有哪些哪些表,然后呢,表中呢应该有哪些字段,这个表跟表之间的关系是什么样子的,诶然后呢,通过什么字段呢来进行这种连接啊,这个呢是我们在立项之初呢,就要想的一个问题,那说呢,有没有一个工具呢,可以让我们去使用啊,这呢就提到了叫ER模型。啊,不管呢,是我们在立项之初,而且的话呢,你想想,如果说我们一个项目呢,已经建好了,需要呢做这个二次开发,或者说呢,你这个项目在运营过程当中出现了一些问题,那我们呢,这时候说能不能看一看我们现有这个项目当中,这个表是一个什么样的一个情况啊这个时候的话呢,我们仍然需要用到这个叫ER模型。
01:08
所以这个ER模型的话呢,它其实是让我们啊,为了创建这个数据库当中这些表的一个工具,咱们不是为了创建ER模型而创建ER模型的,它是为我们来服务的啊这个大家要明确一下,那也就是说呢,如果说咱们一个项目啊,这个项目当中呢,非常小啊,就几张表就搞定了,就好比是呢,比如大家呢,写一个移动端的安卓应用啊,或者iOS应用,对吧,那么这个对于客户端的这种应用来讲呢,涉及到表呢,其实是非常少的,几张表就够了啊,顶多呢十几张表,你要觉得说呢,诶整个ER模型有点麻烦啊,那这个不写不写就不写了是吧?诶也可以hold得住啊,这个一旦呢,我们这个项目呢,比较大的时候呢,可能达到上百张表,几百张表,乃至于说更多,那么这个时候的话呢,我们一定是有必要呢,呃,先要做一个建模分析的。是吧,要进行一个建模分析,然后呢,我们要使用这个ER模型,把整个,哎,我们这个项目当中涉及到这个表,还有表中的字段,以及表之间的关系啊,需要给它刻画出来,OK啊,所以说我们开发项目的实质啊,就是一个建模的过程。
02:08
啊,为什么说我们叫呃开发工程师呢,工程师对吧?呃就是脑海当中这个最初呢,像我在学编程的时候啊,一想到工程师就想盖房子一样是吧,戴个安全帽啊,那叫工程师,那其实我们这个做这个软件的这个建模跟我们真正盖房子那个建模啊,其实是类似的是吧,都叫工程师啊是非常合理的。好,那这里呢,我们就提到这个叫ER建模啊ER模型,呃,这个ER模型的话呢,咱们在其实讲这个上篇的时候呢,其实是不是就讲到过啊,上篇的里边我们提到这个数据库概述的时候,是不是我就引出了我们这个。诶,关营数据库里边这个设计的规则是吧?诶这里边我们就提到了一个叫ER的一个模型啊,一呢叫NT啊,二呢叫relationship啊这样,然后呢,这个实体啊,啊这个呢叫关系啊,真正我们要说三要素的话呢,其实除了实体关系之外呢,还有一个呢,是不是叫属性啊。啊,还有一个叫属性啊,包括呢,我们在讲上面的时候呢,也提到过了,说表跟表之间的这种关系啊,我们有一对一的,有一对多的,有对对多的,还有这种自我引用的关系,OK,这个咱们上面呢,其实都提到过了,那现在的话呢,我们稍微呢在诶这个简略的啊做一个复习,包括呢做一个深入的说明,行,那首先的话呢,我们也提到了叫ER模型的三要素啊,刚才也提到了叫做实体属性和关系,对吧,那么这个实体的话呢,我们就可以看作呢,叫做数据对象。
03:30
啊叫数据对象啊,你比如说咱们也接触过很多这样的表了哈,这个员工表啊,这个呃,学生表啊,这个订单表啊,商品表啊是吧?诶那具体的我们说的这个表呢,其实就是一个数据对象啊,那我们在这个ER模型当中用这个句型呢来表示,呃这里呢,提到说这个实体啊,呃又分成了两种类型,一种呢叫做强实体啊,一种呢叫做弱实体,所谓的强实体呢,诶你看啊,就是不依赖于其他实体的这个实体。啊,不依赖于别人,那这叫强势体,那显然呢,弱势体呢,是不是就依赖于别人呢?啊,那它就叫弱势体啊,叫弱势体啊哎,我们在这个文化圈呢,是不是有这种叫强势文化,还有这种弱势文化之说,是吧?哎,强势体弱势体OK,好,那么什么叫这个属性呢?啊属性的话呢,其实咱们因为已经接触过很多张表了哈,诶我们就直接说了,属性呢,就属于我们这个实体里边呢,是不是一个字段了,比如说你在这个,诶超市里边这个地址啊,联系电话呀,员工数啊,诶我们员工表里边的这个员工的名字啊,员工的ID啊,员工的薪资啊,是吧,这都是属于这个属性,那我们在这个一二模型当中用这个椭圆型来表示啊,这个大家稍微记一下。
04:37
然后呢,我们就提到这个关系吧,关系呢,它是来刻画咱们实体跟实体之间的一种关系啊,实体跟实体之间关系,这种关系的话呢,我们用这个菱形啊来进行一个表达。OK行啊,这块呢提到个注意说这个实体跟属性啊,大家要容易要要记得去区分啊,有时候你要整不清楚的话呢,明明是个属性,你给大家建成个实体了,实体的话呢,是要以表的方式呢来给大家确定下来的,那明明它整个属性你给他造成实体啊,可能就不太合适了,对吧?诶大家要去区分这样的这个概念啊,那这里边就提到了,说可以独立存在的呢,是实体。
05:11
啊,你比如说我们提到这个联系电话,你说联系电话能独立存在吗。联系电话你是不是得说清楚跟谁的电话呀,是吧?呃,哪儿的电话呀,哎,所以说呢,不能够独立存在啊,独立存在的呢是这个实体啊,不可再分的呢,是属性,哎你看这个说的还是非常的诶到位的是吧,不可再分的是属性啊,地址你再分咋分呢?啊,员工数再拆咋拆呢?是吧?哎,不可再分呢叫属性好这个呢,大家去体会一下啊OK,就随着你的经验越来越多呢,其实呢,你基本上一看什么是实体,什么是属性呢,基本上也是一目了然的啊OK。只是刚开始的时候呢,可能会区分不开,然后下面的话呢,我们就来定位一下叫呃,实体属性和关系,那关系呢,是不是我们就提到了这几种不同的关系了,对吧?有一对一的关系啊,有一对多的关系,还有多对多的关系。啊,一对一啊,一个实体跟一个实体呢,它是一一对应的啊,一个人对应着一个身份证的信息啊,一对一的关系啊,一个身份证信息也属于一个人,OK,然后呢,这个一对多的关系啊,我们这个一对多的关系呢,在实际的开发当中呢,其实场景还挺多的,对吧?那挺多的,比如说呢,一个班级表啊,一个班级是不是对应的很多的学生啊,反过来呢,这个一个学生呢,只能对应一个班级啊,表示的它是一对一的啊,确保你不是这个多对多的关系啊啊。
06:26
这个还有什么呀,还有我们说一个部门是吧,有很多的员工啊,一个员工呢,属于啊一个部门啊,是一对多的关系。那么多对多的关系呢?啊,是不是也有很多对吧?哎,多对多的关系呢,你比如说我们这个供货商和这个超市啊,一个供货商啊,是不是可以给多个超市去供货,然后一个超市的话呢,是不是也可以从多个这个供货商这块呢来进货呀,哎,是一个多对多的关系,好再比如说呢,这个叫选课表啊,这个选课表里边呢,有很多的科目啊,一个科目呢,可以有很多学生来选,然后一个学生呢,是不是也可以选很多的科目啊,这个呢,又是一个多对多的关系。
07:01
没问题是吧?呃,还比如说呢,我们说这个订单是吧?呃,一个订单是不是里边呢,可以包括多个商品是吧?诶这个一个商品是不是也可以呢,分布在多个订单当中啊,所以也是这种多对多的关系啊,这个呢,前边呢,咱们也都讲过一些啊,这个就举一些例子,好,那下边的话呢,我们就开始具体这个叫建模的一个分析了,诶我们看如何呢去建模,这呢,咱们得有一个场景,那这个场景的话呢,咱们就是以这个电商的业务为例啊,因为电商业务呢,这个比较复杂,所以我们做了一定的简化啊,这儿呢是拿咱们商务呢叫商品会啊,咱们讲的这个电商这个项目呢,我们为例啊,进行一个说明。这个简化里边呢,你比如说针对我们这个商品表里边Su啊,涉及到真正我们在这个创建这个数据库的时候呢,在商品表里边需要体现这样的概念,但是咱们这里呢,就做了相关的这个简化,我就只提SQ,就SQ呢就不提了啊OK,那么在我们这里的这个电商业务当中,咱们就简化为八个实体,诶八个实体分别对应的呢,就是我下边罗列罗列出来的这八个啊,你数一下啊,这八个行,那么在这实体当中啊,我们首先强调一下,这里边这个叫用户实体和我们的叫商品分类实体,这是两个呢,叫强实体啊,不依赖于其他这个呃实体存在的啊,而我们其他的这些实体呢,它多少呢,都是依赖于我们这个用户实体存在的。
08:17
OK,行,那这呢,我们就首先呢来做一个建模,实体的话呢,我们用这个句型来表示啊,关系的话呢,我们说了用这个菱形来表达对吧?好,那这里边儿我们就刻画出来了,目前呢,只包括了两个要素啊,一个呢叫实体,一个呢叫关系。好,那么在这个表里边呢,其实我也标识了,他们这个关系呢,是一对一的啊,一对多的还是多对多的,所以呢,首先呢,咱们来做一个剖析啊,那这呢,呃,一共是有八个这个句型框,那就是八个实体了,哎,这个呢,用户和我们这个叫商品分类,这是两个强实体,其他都是弱实体,那我们从这个用户出发,那用户的话呢,是不是有这个地址啊。诶大家呢,都买东西是吧?诶你一个用户呢,是不是可以有多个地址,诶你有你家里的地址,有你公司的地址,还有你老家的地址,对吧?诶这个是一对多的关系啊这个没问题,好,那么这个用户呢,跟这个购物车,诶我们说一个用户呢,是不是你就一个购物车呀?啊那一个购物车呢,是不是也归属于一个用户啊,哎,所以说呢,它是一个啊一对一的关系。
09:15
哎,这是一个一对一的关系,OK。好,然后呢,这个用户的话呢,咱们可以下单买东西,那你一个用户呢,是不是可以多次下单呀,啊就光双11有可能就下好几个单,对吧?诶一个用户啊,有多个订单啊,这个是一对这个多的关系啊,一个订单是不是就归属于具体的一个用户了啊,一对多的关系啊好,那么这个订单和这个订单详情这块啊,一个订单啊,你看这个订单详情,我这写的是一对多的关系啊,因为订单呢,诶里边呢,可以有多个订单详情啊,因为一个订单里边呢,可以包括多个是不同种类的商品啊,所以是一对多的关系。好,然后。这个呃,先看这吧,这个用户的话呢,可以发表这个评论啊,那评论呢,那你一个用户呢,你可以发多个评论对吧?诶针对多个商品,针对一个商品啊都可以啊商品有的时候呢,我们只让他发一个评论了啊,有的呢是设置成了说还可以再次评论是吧?OK啊但总之的话呢,一个用户呢,是可以发多个评论的啊,一个评论的话呢,是不是归属于一个用户啊,所以是一对多的关系,好那么这个商品跟评论之间呢。
10:17
啊,一个商品诶是不是可以有多个评论,然后这一个具体的评论的话呢,是不是只归属于一个具体的商品了,所以也是一对多的关系。啊,一对多的关系,然后这个订单跟商品之间,它呢,就是典型的多对多的关系了啊,一个订单中多个商品,一个商品啊,也可能分属在不同的订单当中,所以是多对多,好,那么这个商品跟这个商品分类呢?诶,这又是一个一对多的关系。啊,就是一个商品分类里边呢,是不是可以有多个商品,然后呢,一个商品呢,是不是只能归属于一个商品分类啊,啊这个呢,就是一对多的关系。好,这个刚才跟说绕口令似的啊,咱们这儿呢,就把这个实体啊,实体之间的这种关系我们就捋清楚了。啊,这个事呢,我们就先告一段落,诶我们只涉及到了是不是两个要素对吧,然后接下来的话呢,我们就需要呢,做这个具体的细化了啊,那具体这个细化的话呢,我们是不是要在这个结构的基础之上,我们把这个属性给它加上呀。
11:12
诶把属性加上属性呢,咱们说了用这个椭圆来表示对吧?啊,那这块呢,我就直接呢就罗列出来了啊,因为咱们是讲整个这个建模的过程啊,不是呢,咱们实际呢,去写这个电商项目啊,说里边该有什么字段是吧?那这个呢,我们就直接呢拉下来说一共有八个实体,每个实体当中哎具备的这样的一些字段都有什么啊这呢,我就做了一个罗列啊,相当于必要的时候呢,也做了一个简化处理好,那这样的话呢,我们几个实体的一个属性呢,就列出来了,然后呢,我们再把它统一的呈现在咱们这个ER模型当中。诶,这个ER模型当中,大家看到的就是我们,呃,这样的一个场景啊,密密麻麻的一个场景,行,那这个图形是不是现在呢,能够展示给我们了啊,挺好是吧,那么下一步呢,该做什么了呀。哎,下一步的话呢,我们是不是要考虑把这个ER模型诶,转化为我们具体的数据表了呀。
12:02
对吧,诶转换成具体数据表啊,那如果说呢,你要是呃想查看一个数据库中的ER模型是什么样的呢?诶其实你可以考虑就看这样一个图景,看看这个呃实体啊属性还有呢,我们这个关系啊是什么样子的。哎,这个图呢,就是表达的就比较清楚了啊,这呢当然了是针对我们这个电商项目的一个简化,咱们实际的电商项目当中,不可能就这几张表的,对吧,OK啊。好,那么接下来的话呢,我们就看这样的一个转化关系了啊,那这个转化关系的时候呢,诶,我们有这样的一个转化的一个准则,或者叫原则啊,这个大家呢,需要去记住的啊,你要不记住这个原则的,你就不知道该如何转了,准则什么呢?一个实体啊,就咱们先看这个表啊,这个什么能够转成表,第一个一个实体啊,就能够转化成一个表。那那就意味着我们这里边画的这个矩形的是不是都对应的是一个独立的表了,对吧?哎,没问题。好,那么除了一个实体能够转化成一个表之外呢,我们还说啊,一个多对多的关系啊,也会转化成一个表。
13:00
啊,一个多对多的关系呢,也会长成个表,这个咱们在讲这个,呃,上篇的时候呢,其实诶就也提到了这么个事儿,哎,大家你看一下啊,咱们讲上篇的时候呢,提到过这个多对多的关系,哎,当然我说到了说哎要想表达这种多对多的关系呢,必须要创建第三张表,通常呢,称为叫连接表,当然你叫中间表也行啊,比如这个表,这个表,哎,这是多对多的关系,那怎么表达这种关系呢?我们必须有个中间表。啊,下边还举例了学生课程是吧,然后呢,想刻画的话呢,我们得有一个这个中间表啊,选课的一个信息表是吧,订单产品还有这个订单的详情表啊,就这样个道理,OK啊行,这个我们就关掉了,还回到我们这个现在内容来去刻画啊,这个大家一定要注意一下,然后接下来的话呢,这个一对一的关系,一对多的关系,这种呢,我们通过外界呢来刻画就可以了。啊,这个就可画就行啊,然后下边呢,我们提到一个属性,属性呢就是我们表里边字段啊,这个比较简单,行,那有了这样一个准则之后,下边我们是不是就开始动手去做这个事儿啊,哎,动手做这个事儿好,首先的话呢,说一个实体转成是一个数据表啊,这个没毛病是吧,我们上面呢提到了是不是有八个实体吧。
14:04
哎,八个试体那时候有八个表对吧?诶这块呢,我们稍微再说一下哈,诶我们这里边呢,确实是有八个表,但是呢,这八个表里边的这个表哈,诶这个表呢,其实大家先忽略掉它什么意思啊。就是我们这其他的七个实体的话呢,其实对应的是七个表,它对应的,呃,这七个表呢,对应的就我们刚才说的第一种情况,就是一个实体对应的一个表啊,那我们这个叫订单详情,这个订单详情啊,其实是体现在我们刚才讲的这个准则里边的第二个点,也就是说呢,订单跟商品呢,它不是多对多的关系嘛,我们需要拿一个表呢来去刻画,诶那这个表呢,其实就是我们上边这个订单详情表。啊,所以说我们这里边儿列举出来呢,呃叫八个实体,呃是咱们以这个实体跟表对应关系上来说的,其实这个呢,是由于这两个关系啊,决定出来的这样的一个实体啊,这个大家要注意一下,OK。行,那下边呢,我们就来这个讲解啊,下面讲解的话呢,首先呢,我们先考虑一个实体转成表,那实体的话呢,咱们先来考虑谁啊。
15:02
啊,咱们先来考虑这个强实体,诶老师为什么先考虑强实体,或者说我们就按照顺序想整哪个整哪个呢,也别这样啊,因为呢,你想我们这个什么叫强实体啊,什么叫弱势体,或者我们为什么要划分出来强实体的话呢,它不依赖于别人,那这时候你是不是把这个表造好以后呢,你在这个区,当然这个强实体全都先全都造完啊,造完以后呢,如果说这个实体是个弱实体,因为呢,你要依赖于别人的话,呃,依赖于别人是不是你在造这个表的时候呢,直接呢,就该把一些这个外接呀等等的该加是不是就加上了呀。啊,你依赖于别人嘛,是吧?诶所以是这个样子的,所以咱们在这个转化的时候呢,一定要先转化这个叫强实体啊强实体呢有两个,第一个呢叫用户实体,那这个用户呢,里边有相关的一些字段啊,这个大家去提供就行,那这里边呢,有一个大家诶我们之前可能没提过,就这个comment啊,就是加了一个相当于一个备注一样啊指明这个字段呢,它具体一个含义是什么啊,就是这样个意思。好,这个呢叫用户实体,然后呢,还有一个呃强实体是不是我们叫商品分类这个实体啊,哎,商品分类实体这个实体的话呢,我们稍微的多说两句,这个体的话呢,我们在这个设计的时候呢,把它分成了呃两个表来去做存储啊,一个呢叫一级分类表,一个呢叫二级分类表啊跟我们这个实际情况呢,也是符合的,那当然你比如说呢,我们打开这个京东是吧。
16:15
诶大家打开京东呢区查看的时候,那我们这块看到呢,其实就相当于是一个叫一级分类啊,一级分类的一个表啊,你看有这么多家用电器,手机运营商数码等等是吧,那比如说呢,你这里边儿啊,去点了一下这个手机,那么下边呢,呈现给我们的这块呢,诶你可以理解成了就叫二级分类。啊,其实主要原因呢,就是因为我们这个呃,栏目呢太多了,然后我们就相当于给他画了画这个层级啊,就像我们写书一样呢,是不是也有一级目录,二级目录,三级目录是吧,就这样一个概念。好,那么我们要是分成这个一级分类二级分类两个表的话呢,那就长这个样子,一级分类里边呢,有个ID有个name啊就完了啊,你比如说我们这个ID啊,有个一是吧,这个name的话呢,就叫这个家居啊,或者呢叫手机,OK,然后二级分类的话呢,也有一个你二级的一个ID,你二级的一个名称,还有呢,对应的你这个二级归属于哪一个一级。
17:06
啊,你比如说归属于我们刚才这个,呃,这个第二个叫手机的啊,这个呢,就是这个呢,就是二是吧,然后你这个里边呢,有你自己的ID,你这呢,就是手机这个栏目下的,比如说手机配件。哎,就是这样的一个名称,OK,行,那有的同学可能会想说,老师,我为什么要这样去去划分是吧,我就用一张表刻画行不行?来咱们说一下一张表刻画的问题。如果说呢,我们这个,呃,叫什么商品分类是吧,这个表我们用一张表来刻画的话呢,首先有个ID,有个呢,你当前这个分类的名称,还有呢,要加个字段叫负啊分类的编号。啊,那么如果说我们是呃,真实的叫一级分类的这个栏目了啊,那就相当于你有个ID,有个姓名,那一级分类的话,这个是不是全是no。对吧,来全是照,那么二级分类栏目的话呢,就是呃,这是你的ID,你的名称,然后这块呢,是不是关联,其实相当一个自己用了啊关联一下你归属于哪一个,呃,一级分类的那个编号是多少,是这意思吧?哎,那有同学可能会想说,诶这样感觉也挺好的,没啥问题,诶我们说下边啊,我们来说这个问题有什么,诶从这个业务层面上来讲,还有呢,从我们这个诶范式的要求结果上来讲,这样设计呢都不好。
18:13
啊,为什么都不好呢?诶当然你想哈,如果说呢,我们要想查询这个,诶判断这个呃负分类账号是否为空,诶我们的要要查询这个一级分类的话,呃,一级分类的话呢,我们刚才说的一级分类的这个是不是肯定都是为空的,这个没问题吧。对吧,但是呢,如果说我们要是有这种二级分类啊,就是首先呢,你这个允许为空,所以呢,我们这个呢,呃,就是没有这个非控的约束了啊,那是不是就有可能用户呢,添加了一个二级分类,然后呢,二级分类的这个位置呢,他也没有写。哎,没有写一个具体的赋值,相当于呢,你这个二级分类这块是不是也是空了,那这个时候呢,你是不是就有可能把这个二级分类就误认为是一个一级分类了。啊,那时候就混乱了。是吧,就乱套了啊,造成这个业务数据的一个混乱啊,这是一个点,然后再一个点的话呢,呃,如果呢,此时呢,我们想去找这个叫二级分类,二级分类的特点呢,是不是就是我们这个字段呢,它一定是非空的。
19:05
就这个字段非空的话呢,一定是二级分类对吧?啊,刚才我们讲的相当于是你要是空的话呢,不一定是一级分类啊,这就是业务的混乱啊,如果呢,你要找这个字段呢,是非空的啊,那就是二级分类,但是你这个字段的话呢,一旦要加上is not闹的时候,我们说过了is闹闹是不是没有办法去使用这个索引啊,啊相当于你这时候呢,这个索引还用不上。啊,从优化上来讲呢,也差点意思。是吧,这是我们从这个整个业务上来讲啊,那另外呢,从我们这个范式的规范上来讲的话呢,说这个呢,也不太符合我们这个第二范式啊,为什么呢,第二范式呢,我们提到了这个,诶这呢叫主键了,那其他的这些呢,非主键的这种属性的话呢,我们或者你叫非候选键的这个属性啊,非主属性是吧,都可以啊然后呢,你的这些字段的话呢,是不是要完全依赖于我们这个叫诶这个这个主见对吧。啊,依赖我们这个主属性,那像我们里边的这个字段呢,诶,它因为很多值呢,都是闹了啊,它其实呢,就不是依赖于这个里边的一个编号了,啊,不是严格依赖于它了,所以呢,也不太符合我们这个叫第二范式,那不管它是从业务上来讲,还是从这个范式上来讲,我们说都要对它进行改造,把它拆成两个表。
20:10
啊,这样表达是最好的,OK,像这个呢,我们关于这个实体就说了,然后剩下的话呢,就是我们所谓的叫弱实体,诶那我们呃,咱们算成有七个实体吧,诶刚才那会儿说有八个,咱先把那个叫订单详情先抠掉,对吧?诶七个实体减去两个强实体是不是还剩五个呀?OK,诶这就是诶一个具体这个细节我们就不说了啊一个诶两个诶这个的话呢,就是我们所说的那个,就是诶表描述多对多关系的这个订单详情啊,先不考虑它啊三个四个诶五个,哎,是不是就这五个就可以了。诶五个加上上边那两个是不是就七个了,诶然后的话呢,我们再来看一个多对多的关系,转化成一个表,就提到了叫商品和订单,诶这两个表对吧?这两个表的话呢,我们诶体现这种多对多关系呢,我们就用个中间表,这个中间表呢,就是我们所谓的叫订单详情表,然后这个订单详情表里边啊注意我们设计这个表的话呢,里边是不是要体现你这个商品这个表,还有这个订单这个表里边儿这个主件呀。
21:07
诶这呢是我们这个商呃订单详情表自己的这个主件,然后呢,这个呢,就相当于是我们这个订单里边的这个主件,然后下边这个SQID呢,就相当我们商品这个表里边这个主件,诶然后除此之外啊,这个这都得有的是吧?诶除此之外的话呢,你再去诶该提供其他的一些比如商品的名称啊呃,商品购买的个数啊,这个操作的时间呀,哎,你需要呢,加一些字段你再去加。这个呢,就构成了我们描述这个多对多关系的一个中间表,OK啊,这就可以了。啊,可以了是吧,好,那下边呢,我们是不是把这个表确定了,然后的话呢,这个关系当中还涉及到了有个一对一和一对多的啊,一对一和一对多的话呢,我们就用这种外界呢,哎,去做一个刻画就行啊,刻画就行啊比如说。哎,这个举了例子啊,我们是以这个例子来说的,嗯,我把这一块稍微的,哎把哎把这块是吧。诶稍微拿过来就方便的咱们去表达啊啊叭,如说这块,嗯这块里边呢,我们在这叫商品评论表里边,那是不是就这个表啊,那这个商品评论表的话呢,诶怎么着啊,商品评论表的话呢,它跟我们这个商品表,还有我们这个用户表呢,你看是不是都是这个一对多的关系,对吧?那么这一对多的关系呢,我们就用这个外界呢去衡量就可以了,比如说我们在这个呃商品评率这个表里边呢,我们加上一个叫UID。
22:22
这个UID呢,是不是就跟我们这个用户这个表里边这个ID呢,做一个关联对吧?然后呢,这个频率表里边呢,再有一个叫SID啊,它呢,就跟我们这个商品表里边这个SQID呢,做一个关联来体现这个叫哎哎外建的这样一种关联,然后呢,我们这个用户呢,跟他这个购物车呃,一对一的关系啊,是不是也去建立这种外建啊这样一种关系就行,对吧。好,那这块呢,我们针对这个外界呢,再啰嗦两句,咱们在讲上篇约束的时候呢,其实提到过这个外建啊,不光是知道怎么创建,而且还说了在实际开发当中,咱不建议呢,在这个表的设计当中是应用外景约束啊,啊这块呢,其实是同样的道理啊,这个外界的好处呢,就是保证数据一致性啊,不用多说了啊,但是不好的地方呢,是不是就导致我们这个性能会下降啊,因为呢,你再去添加数据的时候呢,是不是先要考虑从这个主表当中去做一个判断,然后呢再考虑个从表,对吧。
23:10
嗯,然后的话呢,诶,我们在处理数据的时候呢,就很麻烦啊,像这个电商平台,当这个访问量突然很大的时候啊,这是我们设置外界的话呢,就一定会对性能产生影响,那怎么办呢?那结论呢,就是我们在应用层面呢,去做这个数据的检查。而且呢,这里边我们还要强调在应用层做这个数据检查呢,其实是一个非常正常的一个需求啊,你看我还举了一个例子,你比如说我们这个学生的选课系统啊,学生呢,需校去选课是吧?诶这个学生选课的话呢,正常来讲,你应该也有这种外界的一个关联了,因为呢,你不能让学生去随便呢乱去写那个课程ID,那可能就没有了是吧?诶这呢,其实就相当于是个外界关联,但是呢,我们在这个呃客户端呈现的时候呢,一般情况下啊,比如说这个学生他要选课了,这个选课的话呢,这个课程ID呢,他一般呢,是不是都是一个下拉框。呃下拉框呢,能够呃列出来你到底有哪些这个课,哎或者的话呢,你让他去呃写这个具体的呃文本内容是吧,写完之后的话,他去搜索,如果没搜到的话呢,就重写,总之的话呢,我们在这个呃客户端这块呢,其实是不是就可以加上这样的一个限制了,你只能从这里边去找,那其实自然而然的话呢,就相当于是达到了我们外界约束同样的一个效果了。
24:16
OK啊,所以说呢,我们在应用层呢,去设置体现这个外径的功能啊,其实也是非常合情合理的啊,这个大家一定要关注一下啊。好,那么关于我们提到的这个,呃,实体和关系咱们都已经刻画完了,下边呢,是不是就是属性的问题啊,属性这块比较简单,就是体现为我们表中的字段,呃,在表里边我们去设置具体这个字段啊就可以了,具体这个设置方式呢,咱们讲哎创建表的时候呢,都基本上提到过啊,这呢就不多说了,行,那么至此的话呢,咱们是不是就把诶这个整体呢,关于这个电商里边先去创建一个ER模型,然后呢,把这个ER模型诶转化成我们具体的电商项目当中这个表,这样一个过程呢,我们就说完了。对吧,诶通过这个呢,大家也能够感受到呢,就是我们这个ER模型呢,咱们呢,就是一个工具啊,是为了方便大家呢,呃,在你创建项目之初,然后呢,对整个我们这个项目中这个表结构的一个设计啊,有个更清晰的一个认识啊,按照这个结构我们再接着去创建这个表啊,它是一个很好的工具啊,不要把它当成是一个冗余的一个啊,就是限制你工作的这样的一个东西了,它是为你所用的啊,这个大家一定要注意。
25:20
啊,下边就个小节啊,主要体现就是我们这个要素是吧,啊以及的话,我们这个如何转化遵循的这个准则啊,就说到这儿。行,然后大家下来的话呢,诶再去体会体会我们这个ER模型啊,应该说呢,难度不大,但是呢非常实用。
我来说两句