00:00
好,也就是说啊,我们有什么呢?传统传统项目,什么叫传统项目,传统项目指的就是传统的这个企业级的这个项目,你给这个企业做一个这个办公的这个系统办公的软件。不管是这个CS结构还是BS结构的。例如。OA听过没?啊,OA叫做。办公自动化系统。我们这个阶段用的什么呢?CRM,客户关系管理系统,OK吧,普通CMS这个啊,内容管理系统,或者是什么ERP啊等等等等这些企业用的这些软件OK吧,你看现在为什么都玩的是这个OA无纸化办公啊,你总不能请个假。还添一个这个A4纸吧。诶,咱们班是不是还填A4纸呢,请假对不对,好啊,那是因为啊,咱们过几个月就毕业了,咱们用A4纸能方便一些,其实我们在这个以后入职的时候,或者说是在咱们这个老师之间办公,其实都是用的是系统,用的是软件,OK吧,好,那么这种啊,大家注意啊,企业级的这个办公的这个系统啊,注意啊,你可以想象一下。
01:16
对于计算来讲的话,是不是不会很多呀。对于日期的比较来讲的话,也不是那么特别的敏感呢,我指的是特殊的比较啊,谁比谁大几周。谁比谁大是一个闰年是这种形式,不会对不对,对于这些系统来讲的话,是不是我们玩的都是什么呢?都是内容啊。比如说今天谁给谁发一个消息,明天我接收到一个新闻,是这样吗?谁叫什么名字,他的电话是什么,他的基本信息是什么,他的个人描述是什么,是这样吗?所以说类似于这种系统啊,我们习惯于什么呢?所有的字段一律使用什么呢?以字符串的形式来表现,OK吧,哪怕你是一个数值,哪怕你是一个日期,我们统一使用字符串,为什么统一使用字符串呢?在我们开发的时候。
02:10
疑律什么呀,死定啊,超级方便OK吧,超级方便OK吧,好,那老师那咱们这个用死这个日期能不能比较啊,简单的比较能比啊,谁比谁大,谁比谁小啊,你这个日期啊,对于咱们这个用户来讲啊,你这个登录时间有没有失效啊,这些东西该比我们都还是能比的。OK吧,好,对于这个啊,比如说年龄啊,或者说是这个入职时间呢,这些时间都是能比的,简单的字符串都能做到,所以说我们用最简单字符串就行了,OK吧,但是对于啊,一些个比如说超级规模的一个项目啊,大型的项目,比如什么叫大型的项目呢,大家想一想。与钱相关,例如哎,银行级别的项目是这样吧,或者是什么呢?医疗项目,医疗项目是很大规模的人得收费啊,对不对,再比如。
03:08
电商。什么叫电商?诶淘宝京东电子商务嘛,对不对?好,对于这些系统来讲的话,我们习惯于什么呢?它有些时候对于咱们这个日期,因为这个日期它涉及到这个订单,涉及到这个什么退退返货之类的操作,对吧,他对于这个日期的这个业务,以及对于数值啊,计算这个钱的这个业务啊,比如说利率啊,打折让利啊,他要求很高,OK吧,你用字符串啊,其实是完成不了的,所以说对于这种啊这个超级规模的这个项目来讲的话,我们才是干嘛呢。什么哎,该是什么类型,咱们就是什么类型,能理解吧,该什么类型就什么类型,OK吧,所以说啊,一般来讲以后企业里边啊,都是走这几个套路,OK吧,好,那么接下来我们来看一看对于这个外界这个约束的这个作用啊,什么叫外界约束同学。首先我们先来考量一下什么是外线呢?外线咱们应该都知道吧?
04:03
啊,比如说我现在画一个啊。ID啊,比如说来一个。Name。好,先来个班级A01。A02,再来个A03,比如说来一个三个班级吧。Classroom。比如说。一年一班啊,下班。一年二班在下边一年。咱们OK吧,好,下边我再来一个TBL来一个。Student student啊,我这个B打头吧。B002B。003行吧,这个也是啊,来一个ID,来个name,我就随便来啊,张三李四。
05:07
王五,OK吧,这两张表之间啊,大家想一想啊,既然我们玩的都是啊关系数据库,这说明咱们表和表之间是应该建立起关系的,对不对?但是仅仅从我们现在的表结构来看。两张表之间有关系没我们关系时候,数据库是用什么来维护关系啊?外建呢,对不对?好,我们应该在哪建立外键。啊。是吧,这个东西就不需要去想了啊。好,我们现在啊,班级和学生是什么呢?一对多的关系,OK吧,你说反过来是不是就是多对一的关系啊,对吧,那将来咱们这个实际项目开发啊,其实啊,一半以上的这个需求,一半以上的关系都是一对多或者多对一的关系,OK吧,一对一最少。多对多其次一对多和多对一,其实最多的OK吧,好,那么对于一对多的关系好我们永远是在哪呢?多的一方来创建外建关联,维护两张表之间的关系啊,OK吧好,谁是多呢?是学生是多呀,对不对?所以说他应该来一个什么呢?来一个。
06:30
ID是这样吗?比如说张三是。这就一年一班呗,对不对,我就随便来了啊。啊行行假设啊,三个人都是一年一班的行吧,好,这个就是属于我们的一个外建,OK吧,但是大家注意啊,这很明确是一个外线关联,但是。他现在是不是一种外界约束呢?这个概念你得知道什么叫外界约束。哎,组建,哎建这个东西叫什么来着?Primary key还记得不?
07:06
那外键叫什么呢?Foreign key。是这样吗?Foreign key OK吧,好,外建约束foreign key在我们实际项目开发中啊,其实是不创建的,是不创建的,好,我先来给你看一种这个效果啊这块啊,这个容容易产生一些个这个歧义啊,这什么玩意儿作业干掉。喂,干掉什么同学?A。你们那个是不是那个我看看啊,这些东西都都做完了是吧,行留着吧,这里边儿这个表我都干掉了啊。删一下啊啊删除表了。好,咱比如说啊,新建一个标啊呃,一和多先建的先建一还是先建多同学。
08:05
先进肯定先建一,为什么先建一,因为多会引一,是这样吧,OK啊,你在有classroom ID之前,你必须得先得有classroom这张表,对不对啊,所以说我先来一个ID啊,类型我随便来一个啊我。好,再来一个,比如说来一个内蒙玩串啊。好,TBL,咱们来一个class,哎,这个TBL这个前缀什么意思?这代表是table的意思,OK吧,好,呃,将来咱们实际项目开发中啊,除了TBL也可以用,TB也可以用T直接代表的都是table表的意思,让我们在这个系统中啊,一看到这个前缀,就知道这个标识符是一张表,OK吧,这是我们以后约定俗成的一种结果啊,好。行啊,我们再来一张表啊。
09:04
来ID我。嗯,再来一个叫也得叫name对吧,学生表嘛,对不对,255啊好,咱们保存一下,这个叫t BL student OK吧,好保存好,那大家注意看啊,在我们这两张表里边啊,现在通过这个表结构来观察。是不是还没有关联呢,对不对,所以说我得在学生表里边来个什么呢。拉room ID还记得吧?串来个255,但是大家注意啊,我现在仅仅只是建立起了一个普普通通的字段,我们把它约定成什么呢?这是关联classroom那张表的外键,这仅仅只是我们的约定,能理解吗?OK吧,保存就完事了。
10:01
OK吗?但是我有没有做这个操作,我点一下他,我给他做个外线,我做我没做OK吧,我没做。啊,也就是说他是外建啊,仅仅只是我们的这个约定,OK吧,Foreign key外键约束我们不真正的产生,那大家可以思考一下为什么。为什么?嗯。删除的时候,其实在做开发的时候,大家知道做开发的时候,其实删除它是一个什么呢?挺别扭的一个点,挺难测试的,对不对?如果你真正建立起了一个外界的这个约束,大家想一想啊,我现在想要删除这个一年一班是不是删不了啊,为什么?但一年二班和一年三班能删对不对,一年一班为什么删不了啊。
11:04
诶,是不是因为这块有一个外界约束引用它呢,对不对,所以说啊,你还得来回找这个表,其实对于我们现在这两张表来讲的话,没什么,你一下就找到了,将来的表情我可复杂了,你看做测试的时候可闹心了,OK吧,这其实只是其中的一点啊,但这一点没什么,最重要的一点是什么呢?就在于在我们做查询的过程当中,OK吧,大家现在想一想,比如说我现在想要查询这个student表里边所有的记录,经常要写这么一条语句啊,形容说from表啊。对吧?好,那么当我们在性表的时候,ID name还有一个classroom ID对不对,如果你建立起了一个真正的这个外界元素,那大家注意了啊。这个外键约束啊,会通过你这个外线A01啊,会给你自动去查询谁呢。这个一年一班,也就自动管理这张表,多表连查是很耗时间的,OK吧,好,但是我现在的这个需求,大家想一想我现在的这个需求。
12:05
我要不要查询张三的所对应的班级,我现在是不是没有这个需求啊?我现在需求是不是仅仅只是去查询学生表啊?对吧,我没有这个需求,但是呢,我通过这个外勤的约束,它会自动的给你这个关联上OK吧,但其实啊,如果数据库不给你关联的话,将来我们在做MY或者hibernate,它那个啊加载策略的时候,它也会自动给你关联上OK吧,所以说呢,我们在这儿啊,仅仅只是要查询学生表的详细息,我不想查询你班级表,能理解吧,所以说一般情况下这个约束啊,会造成这个总统问题,所以说一般来讲外建都是仅仅只是我们的约定而已,而不是真正的去建立约束,OK吗?行了。
我来说两句