00:03
好。然后我们上次课给大家大概说了一下,我们这个,呃,做了我们这个,根据这个他这个软件开发的生命周期,给他做这个CRM项目,我们其实上前两次课主要是一个是给大家讲一下企业软件企业当中他的一些情况,包括软件企业做项目的一些情况。那前面呢,然后呢,后边我们这个上次课又给大家讲了这个,根据他这种软件开发的这种顺序知道吧,这种生命周期,我们来做我们这个CRM项目,那我们前面其实主要是一开始主要是设计,你看吗这些。不是说做项目,不是说上来就写代码,我们前面给大家说了,写代码是最简单的,应该说应该说在整个项目软件开发生命周期当中,他那就整个占这个时间的话,应该占1/3多一点的时间,他连一半时间都占不到,就真正写代码的时间。
01:01
所以我们做项目不是识企业代码,其实最主要就是分析与设计。然后呢,确定需求,就这样。主要是这这些过程比较占用时间。这是我们知道,那我们上次课给大家做这个CRM项目的时候,我们给大家主要是分析了我们这个需求,让大家知道什么是CRM项目,CRM项目到底干什么的,他有哪些模块来组成的,每一个模块有哪些功能,以及功能和功能之间有什么关系,知我们上次给大家分析的这种这种需求,那我们说这个需求他做这个什么,真正确定需求应该是好长时间,很一个漫长的一个时间。大概有的时候都需要几个月的时间,知道吗?当然这些大部分这个他这个起主导作用的都是产品,产品部门的人去来什么主导来做这个产品,这个需求的设计,知道吧,那当然我们说产品不懂技术,他只懂业务,当然我们程序员也会参与。知道吧,做需求调研的时候他会参与啊,这个地方跟大家强调,我们确定需求的时候,基本上页面都已经确定好了,就基本上每个项目都有项目原型,知道吧,页面都已经确定好了啊,页面现在我们以后开发的不用再写页面了,直接把这些静态网页将来改成动态网页就行了。
02:17
这时候我们来跟大家说,前面大家说是最重要的,最重要的一个阶段就是确定需求。然后需求确定好了,要做成什么样的,我们都已经确定了,那下边呢,就准备分析与设计了,看如何做这种项目,这种项目做完之后部署在什么服务器上,到底用几台服务器,用什么品牌的服务器,这都是设计好的,知道吧,然后代码怎么组织,用什么技术来做,这些都是确定,就事先确定好,当然这些确定都是架构,架构师或者叫叫技术总监他们来确定的。给我们这个,我们程序员一般来讲,这个地方不让不让我们来确定知道吗。好,这是我们这然后呢,大概然后后边呢,整体性的一些问题都确定好了,那下边就有一些项目设计了,这些项目设计,项目设计这个这个整体性的这些问题,这些设计其实对我们程序员以后编程影响不是说特别大,知道吧。
03:13
这也只有一个确定整体的方向性的问题啊,我们一我们开发的时候跟我们,我们做以后入职的时候,我们是写代码的,我们是程序员是吧,普通的程序员就是整体性的设计,对我们这个影响不是那么大啊,不是那么大啊,这些他确定用什么技术,用什么服务器,基本上大家用法都是类似,所以大家我们说他确定什么对我们影响不是特别大,真正影响大的是这个项目设计。项目设计真正影响我们将来入职之后编程的,知道程序员的编程这些项目啊,项目设计就是这些,你比如说物理模型设计,设计表的表,我们说这是最关键的,那将来他是确定我们以后写程序要操作表,操作哪些表,这些表是什么样子的,有哪些字段,字段的类型和长度,以及表和表之间关系,那么以后我们写程序其实就是操作表,作为普通的程序员而言的话,对你影响最大的就是这些表。
04:13
就就是这些表,表设计的合理,那我们以后写代码好写,表设计的不合理,那你以后写代码不好写知道吗?甚至你都写不成,功能都做不出来知道吗?所以这一块是我们影对我们影响最大的啊,当然这些表都是项目经理设计的。啊,设项目经理设计知道,那我们他设计将来操作这些表的代码,他不写,他让我们程序员写知道吗。所以这是我们要知道,知道这是物理模型设计,那下边这些设计呢,都不是这些设计上逻辑模型设计,按理说这个地方对我们影响更大,更直接,他告诉你设计哪些类。你写这些功能需要需要创建哪些类,这些类有哪些属性和方法,方法的参数,返回值,以及类和类之间关系,这些他设计好之后,那直接指导我们写代码了,但是我们说实际开发的时候。
05:08
项目经理不可能涉及,不可,不可能给你设计这些这些类,因为什么?因为这些类太多了,这些类一个项目都几百个类,每一个类都有几十个方法,甚至更多的方法。那么如果他都给你设计出来,那你不用干别的了,知道吧,所以当我们程序员,我们说那你基本上就按照他这些类直接写就行了,那项目经理天天也不用干别的了,天天就设计这些,他就忙不过来了,你想他手下十几个程序员,那他人家那些程序员写什么类,他都先给人家设计好,他设计不过来了,所以实际开发的百几乎100%的项目经理不会给你设计这些,但是按照软件工程的角度来讲的话,按理说都应该先设计好。但是项目经理一开始不给我们设计,那谁设计?程序员写每一个功能的时候自己设计自己设计啊,所以这个地方我们在这个阶段我就不给大家讲了,我们做这个CRM项目需要创建哪些类了啊,这些类到底什么样的,我就不给大家讲了,等到我们后边每做一个功能的时候,完成这一个功能需要创建哪些类,这些类有哪些属性,哪些方法,我到时候再给大家设计一个功能,一个功能设计。
06:17
如果一开始还没做项目,还都没做的,你就设计哪些类,那这个时候我们设计的时候,你要说大家设计一个是占时间,也不利我们教学,但是在工作过程中也不会让你这么设计的,一般都是做一个功能,这个功能需要哪些类设计好,然后再写代码完成了就行啊,所以这个地方在这个阶段呢,我就不给大家说这个这些类都设计了,这些类我就不给大家说了,这些逻辑模型我们是不设计了,然后呢,再看这个界面设计,当然已经设计好了,有项目原型就行了。咱们这个CRM项目原型呢,前面我也给大家看了,就那些静态网页是吧,所以这个地方我们也不说了,然后算法设计,我们这些企业级的应用一般不考虑算法,大家做下一个项目的时候,然后互联网项目叫p two p叫互联网金融项目的时候,老师会给他讲一些算法。
07:07
因为咱们企业级应用,应用的用户群体比较固定,总共就这个公司里边这些人用并发访问量没有那么大,所以他对这处理效率的要求没有那么高,所以我们这个CRM项目没有牵扯到算法设计,所以大家我们也不用管了,知道吧,好,那整个项目设计这一块呢,最主要的这个表的设计。而且表是对大家以后编程起到一个至关重要的一个作用,知道吗?啊,所以呢,整个项目设计这块,我们关于这个CRM项目做的时候,我先给大家简单说一下,我们这个CRM项目,它牵扯到一些表结构,知道吧,牵扯到哪些表。啊,然后呢,这些表都有哪些字段,这些字段的类型和长度,以及表和表之间的关系,这个地方我给大家详细的说一下,因为我们以后写代码就是操作这些表。
08:02
表是最重要最关键的,应该说对我们编程而言是最关键的,最重要的是需求分析。做成什么样子的,最关键的是表,知道吗?是这些表,看看你做这些功能,做这个项目需要用到哪些表,这些表什么样子必须确定,包括大家以后的工作过程中,你进入项目组了,项目经理给你分配任务,你今天做这个功能,明天做这个功能,那你所需用到的所需要的两件事儿,第一件事儿,有没有需求文档,有没有项目原型,有的话给他要过来就行了,知道做成什么样子的。这是第一点,第二点问他我要操作哪些表,我要做这个功能,我需要我需要操作哪些表。这些表什么样子的,他都得告诉你为什么,因为他设计的表都是他设计的。你知道这两个,剩下的你就可以做了。这俩缺一不可,你要如果不知道需求,不知道做成什么样子,你没法做,再一个你知道做成什么样子,你不知道操作哪些表,那么一个项目里边有几百张表,你操作哪一哪一张表,你操作哪几张表,你不知道,不知道你没法写代码,因为你的代码就是处理表这块数据的,知道吧,所以说他告诉我说需求确定了之后,最重要的就是物理模型设计了,你知道吗?
09:21
所以那我们这个地方大家设计的时候,按理说这都项目经理设计的,他用这种软件设计,那这种软件呢,我们就不给大家都是一个一个设计这些表了,然后呢,这些表都项目经理设计好,然后呢,我们就把这些表拿出来给大家读一读,到公司当中也是这样。他给你分配任务了,你问他操作哪些表,这些表的字段都是什么含义的,然后他会给你讲,知道吧,或者他有文档交给你,会告诉你这些表都是什么样的,知道吧,那我们这个地方其实这些表也都设计好了。签我们这个整个项目签到十几张表,那我们来看这些表都是什么,都是有哪些表,每一个表都是存哪些数据的,表和表有什么关系?
10:03
知道吗?所以下边我们就给大家利用这个时间,我们给大家看看我们这个CM项目操作哪些表好,下边我们来看看,然后呢,这个啊,这个我们这个CRM项目所牵扯的表结构知道吧,我们这个CRM项目的,然后呢表结构看有哪些表知道吧,这些表都设计好了啊,我就给大家列一下我们要操作哪些表就行了。好,这是我们这,然后呢,大家看这些表都是项目经理设计好的,他怎么设计的,他从需求文档里边找,再一个他从项目原型里边找。读需求文档,读项目原型,读出来,这是他他每天的任务就是读这些分析出来的,看哪些数据需要保存,需要设计张表,需要设计成什么样的表,这是他设计知道吧,啊,当然我们不设计,但是他设计出来之后,我们要操作,我们要知道他如何设计,他为什么这么设计。
11:02
你知道这样的话,那你以后写代码就好写了是吧。好,当然我们这个CRM项目,我们牵扯到这几张码,我给他列一下啊,首先一个来看,首先一个就是说用户我们说了,要想使用我们CRM项目,他必须登录。登录成功之后,然后呢,他才能使用我们这个CRM项目里边核心的那些功能。那他登录的话,他肯定得输入用户名密码,那这些用户名密码在哪个存着呢?肯定在表里边存着,所以在我们CRM项目里边肯定是有一个表用来存用户的信息。这个信息是我们的叫用户表,这个表呢,一会我们给大家看一下知道吧,然后呢,就这个表,这个表叫这个表user这个表,这个表叫我们的这个用户表,这个是用户表,所以将来我们说他输入用户密码之后,一点登录,应该把他的用户密码向后台发取,没发过去后台拿走到这个表格去比对,去看看账号密码是不是正确,如果正确登录成功,不正确登录失败,知道吗?所以这个表里边将来会存很多很多用户的信息,知道吗?
12:09
好,大家从这个表结构这个名字上面,你可以看到的呢,前面的这个这两个英文单词你知道吗?前面这个是吧。对,Table table的缩写,后边这个用户是那两个单词和单词键单,你看吗?用下划线隔开知道吧,啊,这是它的,这是数据库设计的时候命名规则,数据库的表名或者它的字段名,如果有一个单词来组成,那这一个单词所有的字母都是小写。知道吧,那如果有多个单词来组成,单词和单词之间用下划线隔开,这是数据库里边表和字段名的命名规则,它的Java里边不一样,Java里边如果有多个单词来组成一下类名,接口名或变量名的时候,那这个时候按照拖峰命名法,所以它这种不一样,就数据库里边命名规则不一样,所以大家要知道这个好,这是我们的这个用户表啊,这是用户表,好这是这是一张表,那么将来会存很多的这个用户的信息,知道吧。
13:11
好,这时候我们这样,然后呢,还有再看还有什么呢?再看用户登录成功了,然后呢,这个他可以退出这个功能是吧?还有还有什么再看这是一张表,还有一张表,哪个地方表还有这些大家看吗?我们将来做这业务功能的时候,有很多下拉链,你看吗。下拉列表里边的数据大家看过就下拉列表这数据都也都是从数据库里边查出来的,他不能写死的,页面里边都是从数据库里边查出来的,那数据库里边查出来。那数据库里边也要提供相应的表,然后来存储下拉列表里边这些数据。知道吗?所以这些数据也都要存出去了。那存储起来存到哪个表里边,他们也有这种表,哪些表呢?是这个表,这个表叫数据字典表,就是我们将来数据字源表,这个叫数据字典值这个表,这个表主要是存储项目当中所有下拉列表的数据都存到这里。
14:15
到这个表啊,这个表,大家这种表,任何项目里边都有这种表,你以后不管做什么项目,基本上都有这种表,这种表就是存下拉这表这表数据。所以我们以后存下拉列表的数据都是存什么,都存到这里,都是存到我们说都是存到这个数据字典值这个表里边去知道吗。好,这时候我们说这样,还有一个大纲,有数据自然值,还有一个表,还有表,还有哪个表呢?是这样,那我们这个项目里边大概我们说。下拉列表下边这些数据都存到数据资产值这个表里,那我们将来有很多下拉列表。那有很多这种这个下拉列表,所有下拉列表里边,下边这些数据都存到数据资产值那个表里数据了,那这个数据就有问题了。
15:02
有啥问题?所有下拉列表的数据都存到这个表里边,那么将来我要查询,我要显示这个下拉列边,我要查询这个下拉列表表的数据,那这个下拉列表的数据。这个下拉里玩玩数据。我去到那个表里边去查,我怎么知道那个表里边哪些数据是属于这个下载里边。那这个下拉边数据也存到里边,这个下拉边数据也都存里边,所有下拉里边数据都存到数据在直动表边,我要如果只查这个下拉列表里边数据,我怎么查去,我怎么知道属于哪一个呢。所以它还有一个表,专门存储什么下拉列表的类型的。对,到底有哪些下了。在项目里边,每一个下拉列表就将来会对应一个什么,对应一个类型叫下拉列表的类型,知道吗?每一个下拉列表都对应一个类型,所以它还有一张表专门存储下拉列表类型的。
16:02
然后呢,哪一个表叫这个表叫type这个表,这个叫数据字典类型表,数据字典类型表。这个表是专门存储所有下拉链表的类型。叫所有的下拉列表类型。好,然后呢,每一个下拉表在它里边都对应一条记录。然后每一个下列表数据都存到它里边,所以这俩表有关系,有啥关系,我们一会儿再给大家说这俩,反正你现在先知道一个是存储下拉列表的类型的,有几个下拉列表在这里边对应几条记录,然后呢,这个是存储每一个下拉列表下边那些选项值的,每一个选项都在这里边有一条记录。这样啊,那一个类型下边可能有多个选项,那多一个选项只能属于一个类型,它们是有关系的,有什么关系,我一会儿给大家分析,大家先知道这俩表都是存什么数据的。一个存属于自己的这个下拉列表类型,一个存于下拉列表下边那些选项出的,这是这俩表,这是我们将来要操作这俩表,好,这是这俩表,还有哪些表再看,还有还有那什么表呢,你看。
17:11
然后其实在后边的话,还有这些表,有很多这些表,这些表由于这些功能咱们不做,所以我们就不涉及这些表了,我就不给他提这些表,将来我们说在这个有好多张表,好几十张呢。这些我们不做的工作,我们先不说了。那我们还做哪些,我们做这个项目还强调哪表,还强调这个,我们说我们除了做系统管理功能,还做业务管理功能,刚才说的这几个功能,这几个表都是关于系统管理功能,用到跟客户关系没关系,没懂不是操作客户关系的那些表。这也就是系统管理所需要的这些这几张表,当然它不止这些表,还有别的表,别的表别的功能我们不做,我就不给他说了,那下边我们来看看关于业务管理的这些功能需要创建哪些表。
18:00
啊,哪些表呢?首先大家看这是市场活动,这是我们说这个功能是给市场部的人用的,专门让市场部的人来规划一些市场营销活动,他规划的规划出来,这怎么规划,在这儿创建市场活动的名字,市场活动,这个市场活动将来有谁负责去实施,然后呢,这个是什么时间开始实施,什么时间结束,预计成投入多少成本,然后描述信息。这些规划好之后,一点保存都要保存到表里边,那保存表里边儿,那后台要有,要设计一张表来保存市场库存的信息。那所以说后台得有一张表,这一张表肯定项目经理都已经设计好了,就你开发的时候,项目经理肯定开发好了,肯定已经设计好了。所哪哪一张表,这个表我也给大家写一下,就这个表叫activity。艾T,这个表这叫市场活动表,市场活动表这个表将来我们要操作它,它有哪些字段,我们一会儿创建好了之后再给大家说,其实它就是哪些字,它肯定这里边每一个,每一个这种数据跟我说都签到一个阶段,都都签到一个字段,肯定都是存到什么这个表里边相应的字段里边。
19:11
知道吧,所有者名称开始一结束,就场面描述,知道吧。好,这是我们说这张表详细的哪些字段,我现在先不给大家说,就大家我们知道以后在这个规划的这个市场活动,这些信息都存到这个表里边可以添加,当然查的时候也可以查出来,从这个表里边做分页查询,当然删除的时候我想删除那些选出之后你点删除也是从这个表边删,改的时候也是改这个表里边儿数据。知道吗?当然后边导出也是从这把这个数据导出来,把这个表里边儿数据导出来,导入也是往这个表里边导入出去,到我们到后边做的时候再说。总之,这些有关市场营销活动的这些数据都操都那么存到这个表里。这是我们签到这个表,还有一个表来看,还有一个哪个地方大家看这个地方查看市场活动明细的时候,我们说大家可以对这个市场活动发表一些意见,一点保存。
20:09
那说也要保存到数据库里边,它叫备注,叫市场活动的备注,那也要保存到数据库里边,保存数据库里边,那得保存一个表里边,保存哪个表里边,它还有一个叫专门保存关于市场活动意见或者这些备注的这些表,哪一个表叫市场活动备注表意点保存,保证备注表里边,那在查看一个市场活动明细的时候,也能够从备注表准把它下边的所有的意见都查出来。当然也可以对这个意见这个表进行分进行修改和删除。所以大家看这些数据都是保存了另一个表格,哪一个表叫这个activity remark,这个表mark remark是表示备注的意思,它表示叫市场活动备注表,就是存储那些对某一个市场活动发表的意见信息的,知道吗?
21:01
啊,对每一个市场活动都可能发表意见,那些意见都存到这个表格知道吧。好,市场活动都存到这个表里边,对于市场活动发表的意见都存到这个表里边,所以这些这是这两张表知道吧,好,这两张表完了之后,大家还有一张表,哪一个这个地方。市场活动这个模块,就操作这两张表,还有一个线索这个模块,线索这个拈块,我们说将来他的数据大部分来自于市场活动,举办的市场活动拿到一些公司或个人联系方式之后,录到这个线索表格,录到组么时,录在这个地方,往里边填一些表单,然后一点保存,录到线索表里,他还有个线索表。线索表是这个表,这些信息都存到这个表,叫线索表,我们这个地西叫做线索线索表,线索这个模块的信息都存到这里边,对于这个线索这些信息的增删改查都存到这张表。这任务他有哪些字段,到时候大家我们做的时候,详细的说他有几十个字段啊。
22:02
对,所以这是我们说这样,大家看我们说在这个页面上操作都是这个表,还有大家看我说在查看线索明细的时候,也可以对线索发表一些意见,一点保存发表意见。那发表意见保存哪个表格线索也有个线索备注表,专门保存这个有关这些所有线索的备注信息的,它还有一个叫线索备注表叫C这个什么就这个叫table,然后呢叫C,然后呢remark这个表叫线索备注表,线索备注表还有哪些字段,我们到时候做的时候详细的再跟大家说。这是我们说这俩表,那关于线索这个表,线索这个模块主要是操作这俩表。好,这俩这是这俩包,还有一个大纲客户表。将来是吧,我们说客户这个表里边儿数据主要是保存有关公司的信息,有可能从线索转过来的。
23:03
那这中啊,多数应该从线索转过来的,怎么转?我们前面其实大概给大家说了一下,线索发现有购买,初级销售人员发现某一个线索有购买意向之后,会什么会把这个线索转到客户和联系人表里,客户专门保存有关公司的信息,看到吗?那说它也对应一张表。将来也可以在这个地方点创建,往客户表里保存数据,也可以从客户表查修改删除一样,他操作哪个表是客户表,哪一个表就这个表,咱们将来会有这个表,这个customer这个表叫客户表,客户表。这是给初级就是给高级销售人员来使用的,知道吧,那同样的道理,查看客户明细,也可以对这个客户发表一些意见,他也对应一个客户备注表叫customer,然后呢,Remark这个表叫客户备注表,知道好,这是我们说的这个这个表,这个模块主要是操作,主要是操作这个表,这两张表呢,客户表和客户被窝,同样道理,大哥连起来。
24:16
联系人,我们说他的数据也是从线路转过来的。他主要是关于那些个人的信息,那他也保存一张表,这个表是哪一个,是这个联系人这个表,康泰这个表。这个表我们把它叫做联系人表。以后这个模块主要投入这个表。当然联系人也有联系人的备注表,那你点进来你看啊,这个联系人也可以发表一些备注,那我们这个地方叫联系人备注表,然后呢,这个是remark叫联系人备注叫叫好,这时候我们这样还有达康,还有交易这个。交易这个同样的道理也是交易,我们说他数据,应该说当高级销售人员在跟踪跟踪客户这个信息之后,发现有客户有更更强烈的购买意愿了,是会给他创建一个交易。
25:14
创建交易一点这个东创建交易,那创建的交易这一数据也要存到一个表里边,哪个表叫交易表,这个表叫这个时transaction这个表,这个是交易表。交易表,那交易表也有交易的备注,在查看交易明细的时候也可以发表一些意见。那还有一个叫交易备注表,交易备注表知道吗。那除了有这些表达,交易还是这样,我们前面给大家说了,交易处在整个销售环节的最后一个部分。所以它里边的数据对于他们这些贸易或者交入工作而言是最宝贵的资源,为什么?因为只要创建交易了,说明客户基本上就已经很有很大的几率要买了。
26:09
有很大几率要买,为什么?但因为高级销售员都跟踪很长时间了。他都已经确定了要买多少钱的,预计什么时间成交,他已经确定这些了,所以很大几率就达成了,而且大家到这个阶段,其实前面已经去通过投入了大量的人力物力之后,才能什么才能来到这个阶段来,这样所以交易表里边数据是对他们来说是最重要的。知道吧,如果到这个阶段,如果失去一笔交易,假如谈判失败了,那他们前面那些努力都白费了啊,会浪费很大的资源,再一个如果促成一笔交易,我们说他一笔交易都很大,金额都很大,所以它有很大的经济收益,所以呢,他们这些贸易或者销售公司而言,对于这种这个交易标准块数据非常重视。所以他们把交易每创建和交易都分为九个阶段。
27:01
每一个阶段都有高级销售人员去帮客户解决这个阶段存在问题。解决完了之后一直往后推,推推推到成交好达成了知道吗?那这个时候他们什么为了什么跟踪这笔交易,领导都会经常查看交易这个表里边数据,那查看的时候他们要求这他们需求提出来了,他说这个客户张这个交易每每经过一个阶段,都要把这个阶段谈判的这个历程记下来。说这个交易来到这个阶段的时候,成交金额是多少,预计成交日期是多少,把这个关键信息都记下来,他要记录整个每一笔交易的谈判历史,谈判历程记下来。说一笔交易经过了哪些谈判阶段,都要记下来,记到时候记下来什么,也就是说以后什么当这个交易每经过一个阶段,都往历史表里边加条记录。将来在查看一笔交易明细的时候,在下边能够看到哦,这笔交易都经过了哪些阶段的谈判?
28:00
这些历史也要记啊,往一个表里边记下来,保存一个表里边,这个表叫交易的历史表,叫交易的历史表,在这transaction,然后呢,History这个表叫交易的交易历史表,你看它来记录整个交易的谈判历史表。啊,当然这些表都是不是咱们设计的,是项目经理设计的,但是他设计好了之后,你要做这些功能,你必须得知道有这些表,这些表有哪些字段,你必须得知道,这些表和表之间关系,你也必须知道。因为将来你要写代码,要操作他们,如果你要不知道这些表,那你写代码你没法写啊。所以这是我们说整个我们的这个这个CRM项目里边所牵涉的这这些表。其实还有一个表,这个接这个模块我们不做,这个叫任务表,就是给客服用的,客服每天上班的时候都会带着一些任务,知道吗?叫任务表,当然这个咱们这个模块咱们不做,还有一个表叫task。
29:09
Pass这个表叫那么任务表啊,任务表啊,当然这个地方大家简单了解一下就行了,我们主要是操作前面这些表看。这表,这是几张表,你看。这20几张。一个两个三个四个五个六个七个八个九个十个11个12个十三十四张表。对,这是14张表,还有两张表了,还有两张表一会再给大家说这两张表好,大家看,这是我们整个这些表,我们都确定了有这些表了,这些表都在哪呢?大家都在这里边呢。咱们这个表结构的看吧,这些表都已经导出来了,项目经理设计用用那种软件工具,设计好之后都能直接导出来搜入脚本。
30:04
导出来之后呢,把他们都什么都拷贝到我们的这个都都这么都在我们的数据库里边创建出来就行了。创建一个数据库,把这些搜狗脚本导进去,这些表就都有了,知道吗?好,这是我们要说的这些表,那这些表的话,大家我们这个地方来下,下边再看,我们来可以简单打开一个,你看这些表结构大,你可以看一看啊,你可以打开一个,你看这些表结构,这些都是他们设计好,用软件设计好导出来的搜索脚本,你看吧。这些你把他们在你数据库里边一执行,这些表全都串建好了,知道吧,当然有一些还带数据的,一些初始化数据的。好,这是我们知道,当然别的表也都是也都是这种字符脚本知道吧。好,这是我们这样,那下边呢,大概我们就准备这样了,在我们这个什么数据库里边创建一个数据库实例。然后呢,把我们这些搜狗脚本都导入到数据库里啊,导入到数据库里边,然后呢,我们这个地方,然后我们就可以看到他们有哪些字段,这些字段都是什么样子的,知道吧。
31:10
好,这是我们这样这些,然后呢,这样一会儿再一会儿再导入吧,大家可以简单可以简单先看一看啊,我把这些字段说完再导入吧,大家这些表看吧,这是数据字典表,数据字典类型表,数据字典只是这个表,刚才打开的是用户表,用户表user个表看到吗。这些都是设计好的,当然还有哪些表大看,还有这个市场活动这个表,你看市场活动这个表拖过来,这是市场活动这个表,Activity这个表,然后呢,大家看这是市场活动备注表,当然这里边都是它相关的这些字段,除了这些表大看,还有啊,还有这个。这个里边再看还有什么,这是线索这个表,然后呢,这是线索备注表,看到吗?然后呢,这是联系人那个表,然后呢,这是联系人备注表,联系人备注表。
32:01
诶联系人备注表吗?这是客户表,然后呢下边是客户备注表,然后呢还有交易表,然后呢交易历史表,交易备注表知道吗。我们主要的操作,现在我们已经有14张表了,就这个,这些都是设计好的,知道吧。好,大家家这些表我们知道,项目经理我们说他设计了这些表了,你光知道这些表对你编程还远远不够,还得知道表里边的字段到底有哪些字段,这些字段都是什么含义,你得知道,要不然的话,将来你写代码没法写了,我这个字段数据往哪个字段里边添加,那个字段数据往哪个字段开,你也必须得知道。知道吧,好,这是我们说到这些,那我们下边来看看这些表都是有哪些字段,那我们一块来看看,就你写代码之前必须清楚的,不清楚没法写了,那下边我们来看看关于表中的这些字段,是关于表中的这些字段,第一个那你说大概我们说一个表有好多字段,有可能一个表都有几十个字段,你知道吧。
33:05
那么这些字段是不是我每一个字段都研究,也不是这样,实际开发的时候,需求里边都给你告诉你了,每一个字段的含义,知道吧,将来他设计的时候也会有一个备注。每一个字段是什么含义,你看他这个,大家看他这里边儿都有备注,你看吧,项目经理设计的时候。大家看有有的是大家看这都有备注,当然他这个项目经理,但咱们买他这个项目啊,他这个项目经理设计的不太好,他项目经理应该是个新书啊,还有很多设计的有个别的地方不太合理的地方,而且大概你看他添这些备注,你看吗?他只是把某一个别的字段加上备注了,按理说每一个字段都应该加备注。每一个字段是干什么含义的,那他都是告诉你,你到时候一看你就知道了,那他这个字好像不全,你看吧。不全,就是个别的字段加上备注啊,大多数字段都不没给我们讲是吧,知道吧,没给我们加,到时候我们做的时候,到时候我给大家讲哪些字段都有什么含义是吧?那么这么多的被字段,我现在先不给大家把所有的字段都讲出来,所有字段讲了太耽误时间了,我就给大家提几个比较重要的字段,是我们常规性的,这些字段以后你不管做哪一个项目,这几个字段必须清楚的,而且这几个段是最重要的,如果这几个字段你要不不不清楚的话,那么以后写代码不好写了。
34:27
在任何一个表里边儿,基本上都有这些字段,这几个比较重要的字段,大家都你别别别害怕是吧,这些字段你以前都已经学过了。比较重要的几个字段知道吧,那你得知道为什么设计这些字段,这些字段到底是干什么的,再一个这些字段设计好了之后,它是什么类型的,长度是多少,你必须得知道。知道吗?好,这是这这这是我们给大家说说,那有哪几个字段,其中最重要的一个字段设计一张表,大家你认为一个表里面最重要的字段是哪个字段,对主键字段啊,主键字段,任何一个表都有主键字段,按照表设计的范式的原则,第一个范式的原则就是表里边儿必须得有主见。
35:13
啊,必须得有主键这种啊,这种主键字段叫主键字段,这个字段,这一个字段我们说你必须知道为什么设计它,再一个它设计成什么类型,什么长度的,你必须知道。知道之后以后你往表里边添加记录的时候,这个主键值你就知道怎么添加了,知道吧,好大家我们来,那我问大家了,为什么要设计主键字段。为啥每个表都必须有主见呢?没有主见不行吗?对,查询方便啊,还,还有什么?先说这样吧,主键字段的定义是什么?什么叫主键字段?对唯一非空知吧,其实主键字段从他这个数据,从数据库的理论上来讲,主键字段它是这么一个,它是这么定义的,他说在一个表中,在表中,在一个数据库表中,在数据库表中是吧,如果有一组字段,一组字段能够唯一确定一条记录。
36:21
记录则对则可以把对他们设计成主键,可以把它们设计成,然后呢表的主键字段,主键字段这是我们说主键字段的定义,就找。就一个表当中知道吧,如果有一组字段能够唯一确定一条记录的话,那么可以把它们设计成主见,这是主键字段的含义。你问老师不对啊,怎么一组字段主键不是一个字段吗?主键可不可以是多个字段,对,可以叫联合主键,多个字段,然后呢,可以联合在一起作为主键,当然也可以一个字段做主键,知道吧,那有老师,我们以前学的都是一个字段做主键,这时候我们说我们推荐使用,推荐使用一个字段做主键,不推荐大家用多个字段联合在一起做主键,就为什么非要推荐用一个字段做主键呢?
37:24
你想想。多个字段连在一起做主键不行吗?为啥用一个字段做主键呢?对,一个字段做主线以后,查询的时候好查询,操作的时候好操作,为什么它就逐渐就是唯一确定记录的,那么将来我们用的时候,我要确定一条记录,我要如果一个字段做主线,一个值就能确定一个一个一一条记录了,如果是多个字段做主线,你得去拿出来多个值才能确定一条记录,所以以后写程序不好写,所以以后开发的话,几乎100%的情况都是什么。一个字段做主键,所以你很少见多个字段做主键,当然我们从理论上来讲,可以多个字段联合做主键。
38:06
知道吧,但是只不过那样我们以后写代码操作太麻烦了,所以推荐大家使用一个字段做主键,那么一个字段,而且大家看对这一个字段有要求,而且而且对这个字段有要求,你不能随便拉一个字段去做组件。而且要使用那些什么,而且知道吧,这不是必须的,你知道吧,推荐使用没有业务含义的字段,字段做主建没有业务含义的字叫什么叫业,业务含义的业务说白了就是跟现实世界的需求相关联的数据叫业务数据。你比如说大概我要做一个学生管理系统,有关学生的信息全部都是业务,业务信息,有关学生的信息的这些字段都是叫业务字段,你比如说有哪些学生的姓名,学生的年龄,学生的成绩,这些都叫业务数据。
39:04
跟学生的现实世界的属性相关的,这就叫业务字段,或者叫业务数据,那存储业务数据的这些字段就叫业务字段。知道吗?你比如说我要做个客户关系管理系统,有关客户关系的这些什么,这些数据都叫业务数据,那存储客户关系的这些字段,那么这些都叫业务字段,你比如说哪些客户关系,你比如说呃,客户关系,有关客户关系就说公司的名字。联系人的名字,然后呢,联系人的手机号,联系人的这个公司的网址,公司的这个邮箱等等这些这些都属于业务字段。所以我们不推荐使用这种自动做主件。知道吗?不推荐使用的,要采用那些有业务没有业务含义的做主,知道吗?那你比如说大家,我要做个学生管理系统,我要创建一个学生表,我能不能用学生的名字做主见。
40:01
可不可以,我不可以,为啥不可以呢?对学生有可能重名的,再一个学生名是不是有可能是变化的,万一这个学生改名了呢?知道吗?但是能不能用学生的成绩做主去?肯定也不行,对吧?啊,所以说大家我们说这些为什么不能有,不能采用,为什么推荐大家用,但是没有业务函数资源,就是因为业务是变化的,就业务是不稳定的,因为为什么业务呢?因为业务这些数据来自于现实世界,现实世界就是一个变化的世界。就从这个什么,大家以前学什么,大学的时候学过哲学是吧,就是整个世界都是变化,其实大对整个世界都是不停的变化,你这些数据来自于现实世界,现实世界就是变化,你的数据也是变化了,那我说主见是什么,用来确定数据的,如果主见都变了,那这个数据它就不是这个数据了。所以我们说以后设计表的时候,不要采用有业务含义的字段做主键,就是因为业务是不稳定的,因为现实世界是不稳定,那你说老师我用什么字段做主键?
41:12
用一个段没有业务含义段没有业务含义字段是哪一字段别来自于现实世界,那就是什么字段,自己想一个字段随便叫啥都行,只要不是来自于现实世界的,我叫个AA都行,让他做主见也可以知吧。但是大家习惯上剑鸣之意是吧?剑鸣之意叫啥?那个字段叫啥?对,那都是老外设计的,叫什么?有一个单词叫什么?对,矮丹那腿叫什么?叫标识识别的意思是吧,然后把它是吧,写太长了是吧,对,写太长了,我说这个不好写,写个它的缩写ID,所以大家你会发现什么,以后到公司里边基本上见到所有的表都有一个字段,叫什么ID这个字段,这个字段不是来自于现实世界,是设计人员自己想出来的一个字段。
42:02
这个字段是就是什么让他做主见,他没有业务含义,你想让他什么样吗,他就什么样子,所以他以后不会随着现实世界的变化而变化,所以我们说叫什么就是比如什么就是这个字段当么,其实最主要就这个字,就是所有的表基本上都有这个字段,用一个有业务含义,有用没有业务含义的字段都主页是吧,所有的表都有这段,你看你比如说他看我们这些表,你看我几乎所有的表都有,你看吗?ID看吗?还有什么,你看。这个市场活动ID看吧。备注,也有ID,别的表也有,包括那个历史表。等历史表,这些都是ID,几乎每一个表都有ID,怎么。啊,几乎每个表都有ID这个字,这是我们说这样好,现在大家我们知道了,以后我们设计表的时候都有ID这个字段,明白吧?啊,以后项目经理给你设计的时候,它的表几乎也都有ID这个字段,那么这是我们说的这样,那现在大家有表有有这个字段了,那我问你这个主键字段的类型和长度怎么设计?
43:12
设计成到底设成什么?这个ID,这个字段设计成什么类型的,长度是多少,谁来决定呢?数据量来决定了。公数据量来决定的他。那你说这个它的长度可以由数据量来决定是吧,那它的类型呢。类型定义成什么类型呢?整整形的我不定义成整形的,可不可以对那定义成什么类型的瓦套是吧?那长度定义都是多少呢?
44:03
对,也就是说对这个主键字段类型和长度由谁来决定这个问题咋想?真的无人对,你得有原因,你不管说,你不管定义成什么,你得有原因是吧,你不能说我一拍脑子,我看他这个类型顺眼,我我就定义成这种类型的,他不能这样,你得有根据是吧。那我说类型和长度由谁来决定呢?有这个你看看,我说这个你看你承认吗,是吧。主键字段类型的长度将来由主键值的,主键值的你往这个数据库,数据库往这个表里边加数据的时候,有这个主键值的生成方式来决定的。来决定的啊,要怎么生成方式,就是你往这个表里边加记录这个主键值,你生成的是什么主键值,将来这个字段你就定义成什么类型的,你要如果生成这个主键值是数值型的,那你就可以定义成数值型的。
45:04
你要如果生成是字符串,那你就定义是字符串了,大家明白这个意思吧,知道吧,所以相当由这个决定,那如果有这个决定,那包括它的长度也是由这个来决定的,知道吧。所以大概我们说以后你看到,你看到项目经理设计这个主设计表的时候,这个主见值它定义成什么类型的长度是多少,你就能够知道项目经理想让你按什么,将来往这个表里边加记录的时候。按什么方式来生成这个主键值,你看到他给你设计的类型和长度,反过来你就知道,你将来要往里边添加记录时,这主键值怎么生成你就知道了。知道吧,你必须得按照它的意愿来生成,你不能随便生成一个主键值,就这个意思,知道吧,所以说他刚我们说这是我们说主键字段类型的长度,有主键值的生成方式来做,那现在我又问你了,说那主键值的生成方式有几种,先有有有几种。
46:11
对有这么几种方式是吧,一个一个来唱,对有一种是么?大家最喜欢的成序员最喜欢的一种方式,哪一种对自增是吧,自增方式对自增啊,这种自增这这种方式是大家最喜欢的,为啥最喜欢的,因为主键值你不用管是吧,这那你不用管,那你说老这个主键值谁来生成的,对数据库自己生成的,有数据库自身啊,数据库借助数据库自身借助借助数据库自身主件生成机制,生成机制,基本上每一种数据库都提供主件自增的生成机制,你为你比如说大看咱们学MYSQMYSQ就提供自增的生成方式,那你要来讲,假如说你MYSQ生成自增,买MYQ咋生,咋能够自自己生成这个这个主键值自增的这种方式。
47:06
加一个关键,对,加那个关键词increment是不是这样的,对,你创建那个ID的时候加一个increment,那么将来往这个表里边添加记录的时候,你不用管主键值了,它会自己从一开始一直往后增加,知道吗?这是我们说的,当然包括以后大家学别的数据库,像Oracle这种数据库都提供这种逐件这种机制,那Oracle它可能更更稍微复杂一点,他借助序列是吗?那这个我们现在不不给大家详细的说这块,其实你知道每一种数据库。基本上都提供主键自增的生成方式。那这种方式就是从某一个初始值开始,依次往后每次加记录,程序员不用管,会借数据库自己,它会每天加记求自己生成主键值啊这是数据库自己生成主键值,那如大家概这种方式,我们定义这个,假如说这个表以后主键值采用自增这种方式,我们得定义成这个主,这个ID,这个字段,我们定义成什么类型的。
48:06
对in特类型的,或者叫是不是叫数值性的,叫数值性的数值型的是吧?当然我们说在买库里边叫int类型的,那就在别的什么,在别的数据库上有可能叫什么number类型的等等这些,总之它就数值型的,总之就数值型的知道吗?那长度是多少呢?对长度是多少。对,长度有数据量来决定是吧,对,如果数据量我知道有这么多数据,最多的这数据是不是我就定义这么多这么多这么长的是吧?数长度有数据量来决定,好,这是我们说是自增方式,但是自增这种方式其实说实话在实际开发的用的用的不多,就自增这种方式用的不多,也甚至几乎很少使用它,就为什么使用很少使用了,因为它的效率低啊,它的效率太低,效率低啊,为什么效率低,那你你想一想你就知道了,那么自增这种方式你写的时候很,你写的时候很简单了,你不用管它,你很省事了。
49:11
它自动咋实现的,你想过没有,他咋实现的。对,他自己生成,他自己怎么给你自增了,他怎么他怎么这么聪明呢啊,我原来有一条值啊,主见值是一,再添加一条主见值变成二了,再加一变成三了,它怎么自动啊。他他咋做的,他肯定底层通过他的代码做的,那他他怎么做的大哥他是这样。他基本上这种自增这种话,一般都是这么来做的,然后都是这么来做,他在内部数据库内部有一个内有一张内部表,这个表呢就一个字段。这个这个表里边儿,而且只能存一个值。啊,这是一个内部的这个表干什么,它里边就存一个值,一开始这个值,当然这个值一开始是多少,你可以自己设置,在数据库里边可以自己设置,当一般默认情况下就是一。
50:06
它一开始是个一,那么将来呢,你往表里边加记录的时候,每次往表里边加记录的时候,那么这个数据库都会什么都会从这个表里边把这个数据取出来,取出来了给你使用,你不管主键值,它给给你取个逐渐值给你使用,假如你加第一条记录,把这个一给你加上了,然后加完成功之后呢。他还会做一件事,他把这个一,他把里边这个值呢,对加了,给你加个一,默认加一,你要加几,你也可以自己设置,它默认是加一,那就变成二了,然后这一条记录就加完了。你下次又加一条记录你的主见值,你也不管它呢,它又又到这里边就取这个值了,把这个值取来是个二二,然后给你使用,使用完了之后咱们加上,加完之后呢,他又做一件事,帮他干什么。对,又加一了,变成三了。下次再来就翻了,依次整存,诶你说老师这这挺好是吧,但是你想没想过这样,你一条记录一条记录加好,他给你取出来让你用,用完之后给你更新过去了。
51:12
下一次是又增加了,你想没想过这假如我同时加两条记录了?同时来两条记录。咋吧,同时加两条高并发访问环境就可以同时加两条。同时加两条就有问题了,有啥问题?对,同时加两条,那么它也是这样,他俩肯定都来访问这个数据库,这个服务器,那先加谁后加谁,他俩竞争CPU,谁竞争到CPU先加谁,假如他竞争到CPU了,那先加他先加它取出了三给他使用,然后呢,家里边家里边呢。我们说这这么加里边之后呢,刚加里边它的这个线程的,它肯定是通在这这种多线程环境下,这个什么来这个使用这个来运行的,它的时间片到期了,到了到了他就把CPU的使用权交出来了,交出来之后假如说为他什么。
52:09
竞争到了,然后呢,他这一条记录还没加完呢,刚把这个三取出来就让他使用,还没往回更新呢,还没来得及更新呢,他这个CPU这个使用时间到期了,被他竞争到了,他干什么。他添加添加数据库干什么,从这里边取记录。取一个数据给他使用,取出来这个这个这个取出来是几啊。对,还是三还没来得及更新呢,还是三,还是三交给他,交给他什么,上面有一个三了,他又有三重复了。那这是同时来脚头,同时来十头。同时来100条呢,这种冲突的几率是不是更大更大知道吗?所以ID有可能重复。那你说老师自增的不可能重复,当然的数据库不可能让你重复的,数据库如果是什么添加,添加几条记录,如果都重复了,那他这种增的这种机制,数据库是吧,他做的也不好了是吧,他压根就没做成功是吧,所以数据库这不可能让你重复的,那你说为了避免这种重复咋办呢?数据库知道了,你有可能重复,在多线程环境下有可能重复,所以他怎么他采用这种机制干什么,这样他给这个表加了一个锁。
53:25
真正什么真正数据库底层就这么实现了,加个锁,加个锁什么意思,假如你同时来两条,然后呢,这条什么去加去加了,取来一个三他加。加完之后呢,即使CPU到期了,使用时间,这个时间片到期了,然后呢,它什么它失去了,失去之后呢,然后呢,那个失去之后,但是他一旦失去了,他把这个表给你锁住了,将来即使他进程不到,CPU被别的竞程到别的竞到别人去查的时候。不能查这个表,这个表加上锁了。
54:01
不能查这个表,他到期了,他就把CPU释放了,他下次竞争到他就可以继续什么往里边更新,更新完了之后呢,他把这个锁释放掉了,释放掉他就加完了,让了别的别的记录才能加,大家能理解这个意思吗?就是这样就不会再冲突了,知道吧。是吧,那那你你有没有发现这你有没有发现问题啊,对效率变低了,是效率变低了,知道吧,ID不重复,但是效率变低了,所以这种情况下,在实际开发的时候,不再不可能使用它,不可能使用它的。是吧,那你说老师他又加锁,那效率太低了,你如不加锁行不行不行,不加锁一定会冲突的是吧。所以他要为了解决这个锁的问题,他又为了解决这个冲突的问题,必须加锁,加锁效率提高,所以实际开发不可能用淘宝,所以大家知道这种形状,那你说这这种因为没你知道吧,不可能用它,为啥还有这种方式,我说存在就是合理的是吧,但是它也有优点呀。
55:02
它的它的优点是啥?对方便使用方便是吧,叫开发效率,开发效率高,开发效率高叫叫开发人员,这吧叫运行效率低,但是什么开发效率高叫称什么什么开发人员比较省事是吧?啊那是那那那那你想一想大纲什么情况下才会用它,企业里边肯定不会用它,为什么?因为运行效率太低了。那是什么情况下才会用它,做研究的时候是吧,一般在学校比较适用它,学校一般做研究的时候,为了提高这种研究的效率啊,然后呢,用它用的比较多一些,因为我就测试别的一些数据,看能不能这个成功知道吧,所以说大概一般都是在学校做或者研究机构里边才用它,但是在实际开发以外很少用到,好这是我们说这种自增那种方式,好这种方式我们给大家说到这,下边我们继续来看别的方式来看这个,然后自增,这除了自增这种方式还有什么呢?还有什么方式就自己写是吧,对就要自己写,就还有一个叫什么。
56:06
好像叫这个A3是吧,A3的是吧,签名是吧,就生成一个是吧,加一条记录的是自己签名,谁谁自己签的,程序员自己签名,自己加角自己生成,自己成程序员,有程序员知道自己什么手动生成,手动生成主兼值,主键值知道吗?就程序员自己生成,那程序员自己手动生成主键值咋生成。要么自己住,要么要么。对,自己自己程序员自己生成。那程序员程序员能干的事叫什么?就是写程序是吧?那肯定程序员写一段程序,然后呢,每次往表里边加记录的时候,一调这这段程序,然后生成一个主键值就行了,就程序员自己写一段程序生成明白吗?那那我现在问一下他写一段这段程序能不能随便写。
57:00
啊,随便写一段程序可不可以啊,不可以是吧?为什么不可以啊?自己随便写一段程序,为啥不可以啊?音乐。对,因为因为它生成这个这个主键值,它是你可以写一段程序,每次生成一个值,那这个值呢。对这个值它要将来要往数据库里边保存,做主键值的,主键值有什么要求?对唯一非空知道吧,唯一非空,所以他程序员以后写一在这个程序每次必须得一调,每须每次必须得生成一个主见值,而且每次生成主键值是吗?对不一样不能重复知道吗。所以那这段程序好写不好写,对不好写,你自己可以写一段程序,可以生成主键值,但是你要保证不重复。那这个时候就不好写了,那那得怎么写啊。
58:01
对,按规则写是吗?按什么规则写?有有人专门研究这种规则,这种规则叫什么?叫算法是吗?叫算法按照一定的算法写是吗?然后是吧,先生成什么,再生成什么,然后把它们拼接在一起,这样就能保证不重复了。那有人专门研究这种算法是吧?那有什么算法?有很多种算法。啊,所以说做程序学,大家如果是大学里边学计算机软件工程专业的话,肯定有一门课叫算门课叫数据结构与算法,专门让大家研究常用的这些算法,好按照这种算法先做这一件事儿,后做这一件事,然后再做这一件事,然后最终把大的结果拼在一起,就是我们所学校出去了,知道吗?啊,当然我们说的简单,但是这种算法应该是最难的,是啊,就研究这些算法,其是这些,这些才是最难的,研究算法的人才是创造性的劳动,知道像我们写代码其实不是创造性的啊,这是人家研究完了,咱们把代用代码实现它这么来做,这样就简单多了,知道吧,好,这样,当然我说即使别人研究完了,我们要写代码实现了,你得先读懂它就算了。
59:11
你得先读懂它,然后再用代码实现它,知道吧,好,这是我们知道,当然现在我们说目前我们在初中级的开发程序员的话,一般来讲不可能让你自己研究算法啊,也不太可能让你是吧,别人写好了,让你按照这种复杂的算法把代码实现了,其实也不太可能知道。也不太可能是。一般都是别人什么研究好了,然后有一些高手是项目经理等等,这些就技术总监或者架构师,他为什么把算法实现了,我们需要的时候可以掉一掉就生成主降值了,知道吧,好这样,那虽然不让我们这个,不让我们这个来研究算法,并且实现这种算法,但是你得知道每一种算法的特点。这样的话,你才知道我。生成什么样的主键值,使用什么样的算法,调哪一个工具方法,这样的话,我这样的话,我这个什么,这样我以后生成数据的时候,我才能正确的生成我的主键值,知道吗?所以这样的,这是我们说的这样,那所以在现在大家要了解市面上常用的一些什么生成主键值的算法,有哪些算法呢?当然有很多了,大家到网上一搜一大把是吧。
60:24
生成主键值的算法,其中有一个比较著名的一个叫什么,这个叫嗨算法是吧,对嗨算法叫高低位算法是吧,它就是按照什么,就是高位多少计,计算一个高位,然后再计算一个低位,然后如何让它俩结合起来,就生成一个柱间之了,知道吗?那到底这个算法什么样子,我们不研究它,大家知道有这么一种算法就行,它最终得了值是个数值型的,数值型的它是一个数值型的啊吧,每次生成主键值不重复,就按照它这种算法来实现的话,那你到网上可以搜,有人已经实现了,把它的工具类下载下来,然后你就可以直接调它工具类,每次就生成一个主键值,而且是数值型的。
61:09
你知道数值系统,然后长度,长度也是由长度由这个数据量来决定,长度由数据量来决定。长度有出于量的,有这种算法啊,这是我们说的这种方。什么,然后网上有很多这个,但你要说老是我到公司里边谁来写这一般来都是你们的项目经理或者是技术总监或者架构师他们来实现,他们实现完了之后,你直接调就行了。但是你要知道什么时候掉,嗨,这种算法的这个工具类什么时候,那你知道吗?你将来你的这个主键值是一个数值性的,这个时候掉它,这好,这是我们说这种有一些公司在用它啊,有些公司在用,这还漏算法,当然我们说这种算法有个不好的地方,就是说你得自己来做,在公司里边得自己来做,虽然是项目经理来做,或者架构师来做,但是他们也得自己写代码来实现嘛。
62:06
知道吗?就是这种算法。啊,所以在公司有些公司在用它法,当然用的不是太多,用的最多的一种算法,哪一种算法是这种算法,这种UUID这种方法知道吗。这种算法是吧,按照这种算法生成的主键值是一个字符串,这个字符串类型的数据是吧,而且它的长度都已经决定了,长度是32位的,32位就按照这种算法生成的主键值叫生成的一个主键值都是32位的一个定长的字符串,这种这种算法,这种算法到底怎么算呢?你不用管。这是他这个算法来决定,而且他怎么实现的,你也不用管,而且项目经理都不用管,架构师也不用管,那你说谁来做的JDK就帮我们已经实现了。就Java已经知道了Java,那开发人员也知道你以后生成主线值,你可能会用这种算法,因为这种算法它的特点就是每次生成32度转知道。
63:08
而且每次生成的永远不会重复,知道吗?所以他们那些Java,那些底层的开发人员,他们知道你要用了,他们自己已经生成了。有工具类,但然你这你只要安装好JDK之后,你可以直接调它工具类,在那个java.u那个包下包可以直接调知道吧,怎么调,我到后边写代码再跟大家说知道吧,这是我们以后用的最多的一种算法。这是最多的一种,所以大概我们的什么,你要用他们的话,你的数据库底层的那个ID那个类型,你肯定是字符串类型的,而且是定长字符热32位的,你知道吗。啊,所以大家你会看到我们这些数据库的,你看吗?所有的这ID值都是什么?看吗?对32位的定长读数你看。所有的主演者都是这样,你看。30号的定成字数啊,都是项目经理一设计这个你就明你就明白了,以后我往里边添加记录的时候,主键值一定是调JDK的那个什么。
64:07
对UUID的那种工具类那种工具画法一掉就成功了,知道吧。好,这是我们说的这样,我们几乎所有的表都是有这个ID13号定张字状是吗。好,这是我们说的这样,当然我们说这两种,这两种算法是我们以后开发的时候最经常使用的,特别是UID的算法,知道法。他们永远不会重,不会重复,知道吗?好,这是我们知道,当然除了这种算法还有一些别的,像什么让微博用的那种叫snowflake是么?叫什么血蛇那种算法,那那种算法呢,我们以后不不会使用啊,除非你真正入职之后,假如你入职到这个微博做微博的这种公司,但有可能就会用到他们,就他们他们那种算法就是荣耀呢,他们那种算法就是说每次生成生成主件之后,他们会给那个什么生成的时间做关联,知吧,将来刷微博的时候都按着么,按照微博发表的时间会进行排序,说那按照那种算法伸成主见值排序,都是好排,那怎么好排的,咱们也没做过,咱们也不知道,我也不知道,知道吧,所以大家简单了解一下,就是说这种算法不止这两种,还有很多很多别的算法,当然用的最多的就这两种,特别是第二种,知道吧。
65:20
好,这是我们说的这个地方,我们就就给大家说提示这两种是吧,但是说这种算法是我们以后开发的时,就这种组建的生成方式是用的最多的,自己生成,为什么用的最多的,因为它的对它的效率高,就这种效率高。效率高,那它的效率高大看。就他怎么效率高了,他不会,他不存在这种什么。对这种这个加锁不锁的问题,他不用加锁知道吗。像他这种效率低,之所以低,就是他什么把一个表加上锁了,变把整个处理的这个流程变成单线程的了,他这个呢,多线程一样可以,怎么叫多线程,你写一段程序可以运行到多线程环境当中。
66:07
那多线程环境不管同时来多少条记录,添加多少条记录,每次你不管来多少条,我直接开一个线程就行了,直接掉他这个工具方法,就给你每次都设置一个主线值,而且每次设置主线值不管是在多线制环架还是在其他环境下,都不会永远不会重复按照他这种算法。因为你的程序可以运行在多线程过程。所以它永远不会重复知道吗?所以这种效率比较是我们以后用的比较多的是吗?这种方式啊,当然它有种算法有不同的方式,但我们这个所有的CM项目全部都是UUID啊,只有一种情况下例外,哪一种情况我后边说的时候再说好这是我们这这我们这十几张表,只有一只有一个表没有ID的。几乎几乎里边所有其他的表全部都有IDID全部都是32定程的串好,这是我们说的这个主键值的这种第二种生成方式,第三种方式,第三种方式我给大家简单提一下,大家用的不多,你简单了解一下就行了,也不家以后开发的时候也不推荐你用,以后项目经理可能也不会用,谁用谁傻知道吗?啊我们这个用大家知道这这我们不推荐的吧,还哪一个这个对共享组件,对共享主件什么意思,就两张表的主键只是共享是吧,他俩主键值是一样的,就什么样的情况,这种情况有有应用的,有应用的这个这种情况有应用的场景的限制,什么场景的限制是吧,你比如说大看我设计两张表,一个表是啊,一个表是假如说是个公民的表,还有一个表是人的这个身份证的表,或者叫护照或者驾照的表,那我这个这两张表,这张表。
67:51
那这两张表呢,我设计的时候,他俩有先后顺序,肯定一个人是吗?这个对,这个表先有是吧,这个表再有是吧,那这个时候你比如说大看我这两张表啊,这两表我设计的时候,假如这一个人是吧,假如人有人的ID,人有人的姓名,然后呢,这个护照或驾照有驾照的ID,驾照有驾照的,假如名字还有别的信息我就不写了,知道吧,那这两张表大家知道吧,假如一个人知吧,1001叫张三是吧?啊,然后呢,1002又一个人啊李四是吧,然后呢,这个什么,这个驾照,假如这个地方也要存,假如这个人张三这个人考了一个驾照,那他把驾照的信息录到驾照这个表里边。
68:39
那落在驾照这个表里边,这个驾照的这个主键值咋生成呢。对,由于我们分析现实世界当中,他们他们两个就存在这种关系,存在这两张表有关系,有啥关系。个人。只能有一个驾照,是不是样子那一个驾照。
69:00
只能属于一个人的。所以他俩是不是一定是个一对一的关系,一对一的关系,也就是说一个人的在这个表里边如果有对应的记录,一定只有一条。而且这个表每一个驾照在这个,在这个公民这个表面一定只有一个人给他相对应,所以这个时候我往驾照表里边添加记录的时候呢。这个人考了一个驾照,在这里边儿,这个主键值我就不想自己生成了干什么。直接用这一个人的什么在公民表里边主见值,作为他在这个什么驾照表里边的他的驾照的主见值。这样大家看是不是它这里边儿主键值一定是唯一非空的。那他在里边每一条记录带上有卡一带上,如果他这个卡一这个驾照这个表里边这个主键值,如果是引用他这个主键值,那以后不管有多少驾照,是不是也一定是唯一非空的。一定是唯一为功能,所以这样的话是么?我设计他的这个驾照这个表的时候,这个主键值我就不用设计它了,干什么就参照这个表格。
70:09
这个表的这个ID的类型和长度就行,它的类型是什么类型的,我也是什么类型,它的长度是多少,我这个类型长度也是多少,我就不用设计了,说明就我共享了另一个表的主键值了,知道吗?所以这个时候它的主键值这个什么共享主键这种情况主键值的类型和长度由谁来决定呢?有另一张表的主键值的类型和长度来均,大家明白这意思吧,就这种方式就是它的主见和长度,有另一张表的或者他的附表吧,说他的附表或说啊,当然这个附表就不是咱们以前传统意义上说那个附表吧,就他依赖那个表有另一张表,别别别让另一张表表的类型和长度来决定决定知道吗?
71:02
所以你就压根就不用设计了。就看另一张表设置成什么类型的长度的,那么它就是什么类型的长度的,那么以后添加记录的时候,也是把另一张表格相对应的记录那个主线值取出来,直接放到它这个里边就行了。知道吧,如果设成这种什么共享主键的共享主键口,你往这个表里边,后边这个表加记录的时候,就找另一张表功能相对应的那个记录的主键值加进来就行了,你不用想着自己生成主键值了,就这个意思。好,这是我们说共享主件这种方这种方式我们不推荐了,这为啥不推荐呢。因为这两张表联系太紧密了是吧,他的数据就来自于他,你每次还得去查数据去,所以这是我们不推荐,因为耦合度太高,我们编程的什么原则是解耦合吗?你非要把两张表是什么混在一起,那这个时候不好维护以后,所以这种我们不推荐,大家知道就行。还有一种情况叫什么叫联合组件,联合主件,就咱们说的多个字段多主件,那么将来这些类型和长度有多个字段类型和长度来决定的,那么有多个字段,有多个字段类型和长度来决定的,那么这个时候我我们也不推荐,为什么不推荐,就是咱们说了以后操作时候不好操作。
72:23
好,这是我们说的这种逐渐的它这种生成方式,我们给他说这四种,这他从这种理论上来讲,就是它这个有这四种,当然我们以后开发最主要的是第二步。第二种当然有不同的算法,我们就给大家介绍这两种,以后你开发基本上就这两种吧。好,这是我们要说到这个,关于主键这个字段,我们就给大家说到这儿是吧,好说完之后,后边一会我给大家讲另外一个字段,另外一个是么字段。还有一个字段,比较重要的字段是我们设计数据库的时候,也是必须明操作数据库和设计数据必须明确的。还有哪一个字段呢?比较重要的字段,对外键字段。
73:09
外键字段啊,那大家一会儿课下的时候可以简单那个想一想,为什么要设计外键字段,是外键字段干什么,以后我们操作的时候如何操作外键字段。好,下边大家休息会儿休息,我们来看看外键阻挡到底什么样的好,大家休息会儿。
我来说两句