00:00
都来说啊,那之前呢,我们说的都是一些这种数据库的基本操作啊,那下边我们来说点别的东西,说些什么呢?那我们一个数据库里边的这个文档,或者说一个数据库里边的集合,我们来看一下啊,那刚才我这创建了一个这个myca,现在里边就一个numbers对吧?Numbers,那我们真正开发里边我一个数据库里边,它会不会说就有一个集合呀,对,肯定不会,肯定肯定会有很多个集合对吧?很多个集合,然后呢,集合里边还会有很多的这个文档啊,那所以接下来我们要说的这么多文档,这么多集合,他们之间有没有一些什么关系呢?我们要说一下什么呢?我们叫做文档之间的。关系啊,文档之间的关系,那文档之间有什么关系,那我们说我们的mango DB,它是一个叫做非关系型数据库,叫做no circle吧,诶no circle,那是不是就意味着它里边的数据就没有关系啊,那不是没有关系,咱们这块也运作不起来,所以这块我们来说一下,我们关系主要分三种,一个叫做一对一,一对一我们叫做一个one two one啊一对一还有什么呢?还有叫一对多啊,一对多我们叫做一个one to many啊one two many或者的其实也可以叫什么呀,叫多对一,Many to one啊many to one,多对一我们叫做一个many to one,那多对一,一对多是不是就一样的呀?哎,就反过来说的啊,反过说的还有一种我们叫什么呢?叫做一个多对多啊,多对多,我们叫做many to many。
01:42
哎,Money to money,哎,那可能对于第一次看到这个东西的同学会感觉到这个挺奇怪的是吧?哎,挺奇怪的,那我们来看一下什么叫一对一,什么叫一对多,那一对一的关系,注意在我们这一块其实很在我们开发里边,其实一对一呢,不多,一对一的关系很少啊,很少一对一的关系只要指的是什么呀,只我这个文档对应着其他人呢,它只能对应什么呀,对应一个一个文档一个对应一个的直接举例子了,那我们现实生活中哪些属于一对一的,那可能最典型就是我们这什么呀,夫妻,哎,夫妻最典型的是那个夫妻啊好了,夫妻不是一对一啊,你们都那么开放了是吧,夫妻还不是一对一,我们说的是法律规范呀,是吧,你说你说你你你知道你身边人都不是一对一是吧,反正我知道都是一对一是吧,我身边人还都是比较健康的是吧,说你们现在什么情况是吧。
02:42
哎,夫妻什么意思啊,一个夫人对不是一个这个一个丈夫是吧?一个丈夫不是夫人是吧?哎,一个丈夫一个丈夫干嘛呢?一个这个丈夫,哎,是不是对应一个妻子呀,对应一个这个妻子,那必须得是这样一个关系啊,合乎我们法律上讲的,那夫妻最典型的就是什么呀?是一个一对一的关系啊,一对关系,那也就是说我这个丈夫必须得是对应这个妻子,那同样这个妻子也必须得对应这个丈夫,是不是还能体现出一个一对一的关系啊,哎,一对一对,那我们数据库里边,我们文档里边有没有这样的关系啊,也有,但是其实呢,它相对来说没有那么多啊,没有那么多,那我们来说一下,我们怎么在我们的数据库里来体现出我们这个一对一的关系,怎么体现出一对一的关系。
03:35
我这两个文档怎么体现出他们是一对一的来,咱们举个例子是吧,方式有很多,那我们来说在我们这个mango DB中,我们可以什么呢?我们可以通过这个内嵌文档的这个形式来体现出什么呢?体现出这个一对一的关系啊,什么叫内嵌文档?老总之前说了,文档里边我是不是再放一个文档啊,那怎么能体现出一对一呢?那比如说咱们来看一下,我在这儿来创建一个啊,我先看看当前数据库是谁,前数据库执行一下,当前是my test直接来什么呢?DB啊,点样一个,我这来什么呢?我先创建一个这个集合,叫做一个wife wife什么呢?And,叫做一个Hu wife and husband,点一个这个insert,也就是说这个集合的名字很明显了,放什么呀?放妻子和丈夫的对吧?Wife是妻子,这个husband是一个丈夫,那么怎么体现出这个一对一了,好,我这插。
04:35
一个的时候我就体现出来了,我来一个中号啊,我放一个这个数组,我插入多了,怎么写呢,我这来一个对象,对象里边我们来一个这个name name呢,我叫做一个黄龙。黄蓉这明显是个妻子是吧,还是个妻子,那我怎么体现出郭靖的和的丈夫呢?怎么体现出的?哎,那我这直接来一个属性,就叫husband husband什么呢?冒号,我来一个对象,对象name叫什么呢?叫一叫郭靖,叫一个郭靖,那我们来看现在你说能不能体现出一个一对一的关系。
05:14
是不是能体现出来郭靖它是不是等于是黄蓉的一个属性啊,这两个是不是在在一起的呀,还一起的,那通过这种方式就体现出了一个一对一的关系,一查我就知道了,黄蓉是郭靖的这个妻子,这个什么呀,郭靖是黄蓉的这个丈夫啊,丈夫能看懂这意思吧,哎,然后你说再多来几个,再来领,其实是不是就一个意思了,来一个意思了啊来再来一个,来个谁呢?来一个潘金莲,潘金莲这个是武大大郎是吧,两个这个真挚的爱情啊,那现在我们来看,我现在是不是就有两个一对一的关系了,来我这一查数据库,咱们一直行走,你插进去两条数据,然后直接来一个DB,点一个这个and husband,第二一个fight,这一直行。
06:09
是不是体现出来了,这是一个内嵌文档,因为我一旦把这文档嵌到这里边,是不是就不可能嵌到别的里边去了,哎,别让你说啊,内嵌文档把这个把直接把他的作为一个这个妻子的一个属性,就能体现出这么一个一对一的关系,那这是一种比较简单的处理方式啊处理方式,但是在我们现实的开发里边,一对一相对来说干嘛呀,相对来说比较少啊,相对来说比较少啊,然后再来看一对一,完了以后说我们这个一对多,一对多啊,或者说多对一在我们这块是最多的,哎,很多情况下都是一对多,都对一对这种关系,那我们想想有什么?什么东西是一对多的,他们就举例子了,什么东西,哎父母和孩子是吧?哎父母和孩子,哎父母还有这个孩子,哎父母孩子,那我们说了,哎一个父母可以有什么呀?哎多个孩子一哎多个孩子是不是对应一个父母,可以对应一个父母啊,哎或者说这么说,一个父母可以有多个孩子对吧?但是一个孩子是不是只能属于一个父母啊,哎父母和孩子或者说什么呀,老师和这个呀,学生,老师和学生,这就比较复杂了,因为什么呀,他既可以是一对一,也可以是一对多,也可以是什么呀,多对多,一对一什么呀,我这老师就教你这一个学生,这学生就我这一个老师什么呀,一对一,一对多呢,我一个老师可以教多个学生,那多个学生是不是就有一个老师啊,那现在我们上课这种情况目前来讲是不是就是一个一对多呀,哎一对多,但是多个多行不行啊,哎,我上大学的时候,我一个老师可以教多个学生多个班,那同样学生是不。
07:48
这些可有多个老师啊,所以老师和学生这边比较,哎,比较多一点啊,比较多一点,那其实最典型的,其实父母和孩子都不那么典型,最典型的什么呢?我们说用户和这个订单,用户和订单。
08:04
你上京东买东西,你是不是要提交订单呀,我问你一个用户能有多少个订单,哎,是不是多个订单呀?哎,多少订单,那我说了一个订单属于几个用户,哎,一个订单是不是只能属于一个用户啊,哎,所以有可能会出现多个订单对应一个用户的情况,但不会出现什么呀,一个订单对应多个用户,所以这块多个用户,一个用户有可以有什么呀,多个订单,但是一个订单只能属于一个用户,这就是一个什么呀?诶一对多对一或者一对多的关系啊,然后再来看还有什么呢?还有我们的博客。或者说我们文章吧,文章还有什么呢?和这个评论,想想我一个文章或者一个帖子,我下边是不是可以有多个评论啊,哎,多个评论,但是我一个评论是不是一定属于某一个文章啊,哎,一定属于一个某一个文章啊,一对多那还有什么呀,就是很多了,诶用户和这个文章,一个用户可以发表多篇文章对吧?一个文章一定属于某一个用户,这些都是一个一对多的关系,那这个一对多我们怎么映射,怎么映射,用内嵌文档行不行?
09:17
行不行?哎,我们说也可以什么呀,通过这个内嵌文档来映射我们这个一对多的关系,怎么映射,比如说拿我们这个文章和评论举例子,我一个文章是不是和多个评论呀,那我评论怎么体现出何专的关系呢?在文章里直接加一个属性,这个属性表示什么,表述文章的所有的什么呀,评论,那这时候只需要干嘛呀,把这属性变成一个数组,里边放评论是不是行弟哎,所以注意一对多也可以通过内嵌文档来完成,那这块我就不演示了,跟这基本上是一样的,只是把这个属性变成了一个什么呀,数组了啊数组了,那我们来说一下其他的方式,这种方式我们说呢,直接用来做内嵌文档的方式,会有一个小的问题,什么问题呢?我这个我这个评论它理论上讲是不是可以无限多呀,所以当你这个评论太多的时候,会导致你的数据库干嘛呀。
10:17
啊,变得越来越越来越大,那所以呢,我们想想有没有什么别的办法。有没有什么别的办法?那好,我们来一个例子吧,比如说我来一个用户和订单,这来一个一对多,我们用什么呢?用户和我们这个订单,用户呢,我们叫做一个user user,哎,订单呢,叫做一个user,是不是两个表啊,哎,不是两个表,两个集合啊,两个集合在这,我直接先来一个DB,哎,点什么呢?点一个这个users,点一个这个insert,我先插入两个数据。那我要体现这关系,我先整两个这个数据,数据呢,我这来一个这个username,等于一个这个孙悟空,咱们随便写两个啊,简单一点,我就要用户名啊,就要用户名,然后再整一个什么呢?再整一个这个猪八戒。
11:12
诶,用户名等于一个猪八戒啊,然后在这我这一执行走,你是不是插入两个数据啊,哎,两个数据,然后在这DB点一个users,点一个find find外边我们一查询一看是不是两个,一个是孙悟空,一个是抓戒,好那现在我们在整订单,DB点一个ODR点一个也third,我要插入订单了,现在我先插入一个啊订单呢,订单我们就没有什么name不name的了,对吧,但是他可能会有一个订单的一个订单的编号是吧,订单编号之类东西,那他或者说什么呢?订单里边会有一个这个商品的一个这个列表是吧?商品列表,那假如说我咱们就为了能体现出它是一个订单,我来什么呢?我在里边放一个list表示商品的列表,这来一什么呢?来一个苹果,这来一个,这个香蕉西香蕉,这来一什么呢,大压梨诶这边。
12:13
这什么意思啊,在我这个订单里,我用户买了什么呀,三个产品,苹果香蕉,还有这个大阿梨,但是这里边儿注意我这写的不好,为什么?因为真正订单的话,你光我这仨行不行。不行,还得有产品的具体的规格,价格数量是不是都有啊,我就简单写一下啊,简单写一下好,那现在来看,我怎么能体现出我这个订单和他们的一个关系,如说我这个订单是属于谁的呢?是孙悟的,我怎么能体现出这个订是孙悟怎么体现出。怎么体现出来?哎,看这我在这里边加一个字段,我叫什么呢?叫做一个U字的一个ID,然后ID干嘛呢。我写的是孙悟空的ID,那这样我们能不能体现出这个订单是孙悟空的,哎,来我们这一执行,咱们来看现在我就插入了一个,是不是插入一个呀,在这儿我来看一下,直接DB点一个这个order order给没点S啊,点一个fund,我这一直行,现在来看我是不是插这么一个订单呀,他有一个user ID,这个ID是不是跟孙悟空的一样啊,那通过这个ID我是不是就可以判断出这个订单是孙悟空的呀?哎,孙悟空,那咱们再插插吵几个啊,孙悟空再买点别的吧,买点这个。
13:34
这个西瓜我买水果是吧?西瓜就就买买个西瓜,买个西瓜,再买个香蕉,香蕉刚才买过了是吧,再买一个吧,也没啥影响是吧?好,那然后我在这再提交一个,现在不有两个订单了,哎,两个订单啊,那假设干嘛呢?我还要给这个猪八戒,是不是要订单呀,那怎么办呀,猪八戒的话ID换成谁呀?换成猪八戒,哎,这换做了是吧,换成这个猪八戒,猪八戒买个啥呢?
14:09
猪八戒吃西瓜是吧?猪八戒吃肉吧,买猪肉,猪肉不太合适是吧?买个牛肉吧,牛肉是吧?哎,牛肉牛肉再买个什么呢?买一个这个这个漫画吧,老姐看漫画是吧?吃牛肉看漫画来直接性走,现在我是不是有三个订单了?哎,有三个订单了,那问题来了,我怎么来判断这个订单是谁的?哎,是不是看ID啊,一看这两个ID是孙悟空的ID,表示这两个订单是什么呀?是孙悟空的,一看这个ID是猪八戒ID,这个订单是不是猪八戒的呀?能看懂意思吧,就映射了一个这个一对多的关系,那我问你了,我这个订单可不可能属于多个人,现在来看。哎,因为这个ID它它是唯一的吧,I唯一他不可能属于别人,只能属于这个ID的这个,哎所属的这人,那现在我们来看他这怎么用啊,那比如说我现在做一件事,我要干嘛呢,我要。
15:03
我要干嘛呢?我要查找我们这个用户孙悟空的订单。怎么唱?怎么查?哎,那我查订单是不是查欧里找啊,但是我要查到孙悟空的订单,我是不是得先得知道孙悟空的ID啊?那怎么获取孙悟空的ID,我直接来个DB,点一个users,点一个find find,我这来什么呀?Username username叫做一个孙悟空啊,孙悟空大家注意我这个查完的是不是一个数组啊,我要的还不是他,我要的是什么?我要的是他的ID属性吧?哎,ID属性怎么查?哎,我这需要首先要改一个find什么呢?One find y,然后直接点一个下滑键ID,那这样的结果是不是获取的ID使用值啊,能看懂这意思吗?然后干嘛呢?我就直接挖一个这个。ID user ID等于它,我是不是整一个变量来接收它呀,哎,我来看看这个是不是啊,直接保存,然后在这我运行一下走,结果是不是获取到ID了,哎,获取到ID以后我要查找孙悟空的订单,怎么查怎么查,哎,DB点一个order,点一个find find,我这来什么呢?来一个叫做一个U的下划线ID值是不是也是U的下划线ID啊,注意这两个的区别能看懂吗?前边是属性名,后边是属性值吧,哎,属性值所以在这这两行我一块一执行,我们来看往下看。
16:38
是不是看到的是孙悟空那订单,哎,你说我想看猪八戒订单怎么办啊,把这变成猪八戒,我这一看走你是不是这么一个呀,能看懂这意思吧,哎,所以注意,这是我们叫做一个一对多啊,或者多对一的一个关系的一个映射啊,多一关系映射我们怎么映射的,是不是在另一个表里,在多的这个表里,把一的那个方,那个ID是不是设置为一个属性啊,哎,属性这样就进行了一个关联啊,这是一个多一啊,一对多的关系,我们这块用的比较多,但是咱们就现在来说,咱们用的其实都不多是吧,因为咱们主要做前端开发的,但是这块你也干嘛呀,你要了解好一说一对多,多对一,你得大概知道是怎么回事,包括我们往后边做这个项目也会用到这个一对多,这也是我们用的这个最多的啊,最多的好,那接着来说下边一个叫做多对多,多对多就就稍微的复杂一点了,是吧?哎,比如说什么呀,多多就什么,想想咱们上网的时候有没有多对多。
17:39
分类,还有商品。能懂这意思吗?分类还有商品,我们先说我一个分类里边能不能包含多个商品,比如说我商我商品有分类,比如说有个分类叫厨具,我的锅数不数厨具锅铲的刀,案板什么什么什么什么漏勺是吧,筷子各种各样,你能想到的这些是不是全都属于厨具啊?哎,所以我一个分类下边是不是可以有多个商品啊?哎,那我一个商品可不可以属于多个分类?哎,我有一个电饭锅,它是不是既属于厨具又属于电器啊?哎,电器,那我有一把刀,这刀是既属于厨具,那如果有一分类是武器,这边属于武器对吧?哎,属于武器能砍人的对吧?哎,能砍人的,那能这意思吧?哎,那我可能这个洗衣板也可能属于这个,这个洗护用品是吧?也可能属于什么呀,这个家暴用品是吧,等等一系列的,那这些东西是不是一个商品可以属于多个分。
18:48
对,同样一个分类里边也可以包含多个商品呀,哎,这就是一个什么呀,多对多的关系啊,对的关系,那还有什么呀,还有刚才我们说老师和学生,哎,老师和这个学生,其实更典型的是多对多,一个老师可以有多个学生,一个学生也可以对应多个老师啊,这是一个多多的关系,那多对多我们怎么体现出来?
19:13
多都这么体现出来,其实多对多和这一对多其实是类似的,怎么类似呢?那现在注意我这一对多,我这个user字ID是一个值对吧,是一个值,那我要多的多呢,我变成一个数组,是不是就多就多了,哎就多就多了啊,所以这块东西多一多可以怎么来,也可以来采用这种方式去映射,那比如说我们来。写一个来写一个什么呢?写一个就写一个,咱们简单点写一个老师和学生,这是一个,这个多没多,多一多怎么体现出来,那我这块我需要先干嘛呢?我先创建一个列表,表示一个老师,我直接来一个这个DB,点一个这个T,哎呀,Teachers teachers点一个什么呢?Teacher是不是就是复数了是吧,这么写吧,点一个这个insert insert们来什么呢?我先插入几个老师,老师,比如说我来一个,来一个name name我们叫做一个洪七公,再来一个name name我们叫一个这个黄,黄药师,黄药师,然后再来一个内幕,来一个这个龟仙人,龟仙人是吧,这三个这个老师是吧,三个老师,然后现在我们这一。
20:45
执行一操作,然后在这我们来看一下,直接DB点一个TT点一个find,一查询,现在我们是不是有这么三个老师,哎,那我先来看,那怎么体现出一个一对多,多对多的关系啊,多多的关系,那我这块来什么呢?DB点一个s to students点一个这个inser,我来插入几个学生,插入几个学生,这来一个数组啊。
21:13
先来一个,先来一个什么呢?Name叫一个郭靖,哎,郭靖,那假如说我们郭靖他既是我们这个洪七公的这个徒弟,又是我们这个黄药师的徒弟是吧,那怎么体现出来,那之前我们怎么写的,我直接来一个TT一个ID,然后假如说要是洪七公的徒弟,我就直接写一什么呀,写一个洪七公是不是就OK了,但是这样问题来了,这样问题是又变成。一对多了吧,I11个小时对应多个选项,那这时候它干嘛呢?哎,我把ID变成一个数组,就ids的一个负数干嘛呢?我来一个走,这是一个,然后干嘛呀,再来一个黄药师,那这样我郭靖的徒弟不是师傅就有了,有两个了吧,哎,有两个了,来再来一个。
22:09
CTRLC,你再来个谁呢?来个这个悟空,孙悟空,孙悟空呢,比如说孙悟空带过仨师傅,洪七公,黄老师,龟仙人都学过,怎么办呀?哎,把这3D是不是都写呀,那这样我们说通过这种方式是不是就体现出来一个什么呀,对多了,来在这儿我们来执行一下。一执行,执行完了我们来查一下,我们这个students这块一直行。我们来看这一看,哎,孙悟空有几几个师傅呀,123是不是三个师傅呀,郭靖有几个师傅呀,两个师傅,那同样你看这两个师傅是不是同时教郭靖还有孙悟空,这就体现出一个多对多的关系呀,哎,其实多一多就是把一对多那个字段变成一个什么呀,数组是不是就OK了啊,就OK了啊,这是一个多对多,我们就不再去细说了,这是我们说的一个文档之间的一个关系,用的最多的其实是我们那什么呀,一对多,但是这几种关系你得都能干嘛呀,能理解,要让你去映射的话,假如说让你映射的话,你要怎么去映射啊,映射好,我们这来听一下。
我来说两句