深入讲解SiteServer CMS:辅助表(二)
如果您觉得文章对您有点用,麻烦在您阅读、收藏、转发的时候,
顺手帮忙点个赞、留个言、加关注,这是我继续写下去的绝佳动力。
一、�上一篇文章主要内容
上一篇内容基本上就是纯粹的文字说教,好多人反应不太好理解,所以在这里替大家总结一下关键点:
1、如果用SiteServer CMS来管理的内容和系统默认的内容表字段相差比较大的时候,需要另外单独创建辅助表来存储内容;
2、SiteServer CMS系统默认的辅助表类型有:内容、投票、招聘、信息公开、互动交流,每种类型对应一张辅助表;
3、你可以创建系统默认的五种辅助表类型,也可以创建“自定义”类型的辅助表;
4、“自定义”类型的辅助表和系统默认的五种辅助表类型的最大区别就是不能成为站点的默认数据存储表;
5、站点的默认数据存储表与非默认表的区别:全站搜索功能原则上只搜索站点默认内容辅助表里的内容;
二、辅助表管理
上一篇文章最后提到,辅助表的创建分为两步,一是创建表,二是创建表字段。上一篇把创建表的内容讲完了,本篇接着讲创建表字段,包括真实字段和虚拟字段。
在开始讲创建字段之前,先熟悉一下SiteServer CMS后台辅助表管理界面:
上图特意解释了表格中几列数据的含义,所谓家里有粮心中不慌,先把列表读懂了,才有沉下心来深入了解原理。
- 辅助表标识:辅助表在数据库软件中的唯一标识,写Sql语句用的;
- 被使用数目:有多少个栏目使用此辅助表来存储内容;没有被任何栏目使用的辅助表才能被删除(见上图列表中的第二条红色显示数据);
- 是否存在:是否在数据库中真实的创建了此辅助表;只有在数据库中真实的创建了的表才能用于栏目的数据存储;
- 创建后修改:已经创建了的辅助表,其字段是否又修改了;修改已经创建好的表字段,可以通过“同步辅助表”操作来实现在不丢失现有数据的前提下修改表结构;
了解了以上含义,下面开始辅助表的真实字段和虚拟字段管理。
三、辅助表真实字段
1、创建真实字段
所谓真实字段,就是说辅助表里真真实实存在的字段,也就是和我们以前通过 SQL Server Management Studio (SSMS) 管理器创建表字段一样。所以创建真实字段的界面也特别简单,如下图所示:
从上图可以看到,创建真实字段界面特别简单,�数据库管理器SSMS创建表字段基本上一样。系统还提供了批量添加字段的功能,方便一次性添加多个字段。这也是SiteServer CMS内容管理的一个特色,基本上能批量操作的都提供了类似功能。
如果创建的辅助表类型属于SiteServer CMS内容管理系统自带的五种类型辅助表(内容、投票、招聘、信息公开、互动交流)的话,辅助表会自带有部分真实字段。如下图所示,创建了一个内容类型的辅助表,表默认就有标题、简介、图片等真实字段。
辅助表自带的字段与后来我们创建的字段,唯一区别就是系统自带的字段可以进行排序,而后来创建的表字段不能进行排序。其实这也不是能说是区别,应该说是系统的一个Bug,希望官方在后面能进行修复。
2、同步到数据库中
这是一个什么概念呢?从前面第二部分辅助表管理中有提到一个:
是否存在:是否在数据库中真实的创建了此辅助表。
前面说的创建辅助表和创建真实字段,都是指在SiteServer CMS系统里的操作,并没有真正把这些操作反应数据库软件(MS SqlServer或MySql)中去,而“同步到数据库中”就是指这一个操作。
举个手机发短信的例子,编辑短信内容时或者存到草稿箱,直到点击“发送”按钮之前对方都不知道短信的内容。创建辅助表和创建真实字段就好比编辑短信内容;创建辅助表或创建字段的“确定”按钮就好比发短信的存入草稿箱操作;只有同步到数据操作才真正类似短信发送按钮,在操作完了这步之后数据库软件中才真正建立了辅助表以及相应的表字段。在此之后数据库软件中都是不存在此辅助表的,更不要说表字段了。
好了,明白了同步到数据库中这个概念之后,再来看看具体的同步操作吧。有三种情形需要进行同步数据库操作,每次操作造成的影响还略有不同。
1、辅助表和真实字段在SiteServer CMS系统中都定义好了,但还从来没在数据库软件中创建过此表,此时需要进行数据库同步操作,系统里此时叫“创建辅助表”,如下图所示:
点击“创建辅助表”按钮,系统会向数据库软件发出创建辅助表和字段的Sql命令,在这之前数据库软件中并不存在此辅助表。
2、辅助表在数据库软件中存在了,现在因为某种原因需要增加、修改或删除字段,并且之前的数据因为缺少相应字段而不得不废弃重新录入。此时也需要进行数据库同步操作,系统里此时叫“重新创建辅助表”,如下图所示:
点击“重新创建辅助表”按钮,系统会向数据库软件发出重创建辅助表和字段的Sql命令,在这之前数据库软件已经存在此辅助表和数据都会被删除掉。进行此操作之前,系统会发出如下警告:
3、辅助表在数据库软件中存在了,现在因为某种原因需要增加或修改少数字段,而且原因的数据需要保留。此时也需要进行数据库同步操作,系统里此时叫“同步辅助表”,如下图所示:
其实,只要已经在数据库软件中存在的辅助表,如果字段有变化(表结构发生变化)系统能自动检测到并会出现如上图所示的操作界面。此时的同步操作只是修改已存在的表结构,并不是删除重新表,所以原来表里的数据并不会丢失。
3、设置字段显示样式
在前面两步,在SiteServer CMS系统中把辅助表和字段都定义好了,并且也在数据库软件中创建好了。接下来就是往表里灌数据了对不对?比如辅助表定义了一个叫Title的文本字段,用于存放新闻的标题。那是不是需要一个提交表单界面来录入数据?但这个数据怎么录呢?是一个单行文本框还是一个多行文本框呢?
设置字段显示样式就是解决上述问题的,即专门解决辅助表里每个字段对应到提交表单的显示样式问题。直接上图先直观感受一下部分显示样式和此辅助表录入数据的提交表单的对应关系:
在上图中,显示样式中的“显示名称”对应到提交表单里的就是字段名称,显示样式中的“表单提交类型”就是提交表单中输入框的具体控件类型(单行文本框、下拉框、单选框等)。这样是不是很好理解设置字段显示样式到底是一种什么样的操作?了解了这种对应关系,下面就来看看具体是如何设置字段显示样式的。
上图就是设置显示样式的界面,显示名称和表单提交类型刚才解释过了。下面再解释一下其他几个常用设置:
- 显示帮助提示:输入框后面的帮助提示,提示本字段输入内容的格式之类的帮助文字;
- 是否启用:是指本字段是否出现在提交表单界面中,有些字段可能并不需要录入数据,比如系统会提供固定的默认值;
- 是否单行显示:在提交表单界面中,有些字段占位特别少,如果单独占用一行的知可能会不太好看,可以把两个字段放在同一行,排版显的更紧凑;
- 排列方向:如果字段的提交类型是多个选项(比如单选框、复选框),需要决定这些选项的排列方向,是横向排还是竖向排;
需要特别强调的是,在这里设置好的字段显示样式,是针对此辅助表字段统一设置的默认显示样式,具体到使用些辅助表的每一个站点的每一个栏目,还可以针对字段的显示样式进行调整,使得不同栏目有不同的显示样式。当然如果具体栏目不进行调整,就是意味着使用这里设置的默认显示样式。至于使用辅助表默认的显示样式和具体栏目重新定义显示样式有什么区别,在下一篇文章中作详细介绍。
至此,关于辅助表真实字段的内容就全部讲完,主要就是三个步骤:创建表字段、同步到数据库软件中和定义字段默认显示样式。其实后现两步是没有先后顺序的,也可以先定义字段默认显示样式再同步到数据库软件中。因为数据库软件中创建的只是第一步的表字段,并不需要字段默认显示样式任何信息。显示样式是在SiteServer系统形成数据录入的提交表单界面时使用。
四、辅助表虚拟字段
1、虚拟字段与真实字段的存储方式
先直观感受一下真实字段和虚拟字段存储方式的不同,才能更好的了解为什么要使用虚拟字段的原因。所谓真实字段,就是数据库软件表里真实存在的一个一个字段,比如上图所示的:Title、IsTop、AddDate,三个真实字段。如果某条记录真实字段没有值,那这个字段还是会占用一定的存储空间,只是值为null或者默认值而矣。想象一下,如果一个表里有1万条记录,其中9000条这个真实字段都用不上没有值,那是不是挺浪费的?
而所谓虚拟字段,SiteServer CMS用SettingsXML一个字段来存储一条记录的所有虚拟字段的值,具体的存储格式类似:
actor=saf&time=2017-05-17&ypes=内地 // 字段名=字段值&字段名=字段值的键值对格式存储数据
这个与真实字段相比,有什么好处呢?如果一个表有五个虚拟字段,其中9000条只使用了一个虚拟字段的话,那这9000条记录的SettingsXML字段存储就只有一个字段名=字段值键值对格式,而另外1000条就会有多个字段名=字段值键值键值对格式。也就是说SettingsXML字段存储的数据会根据使用字段的多少来自由伸缩。
从上面对比可以明显看出两种字段的优缺点:
- 真实字段:如果只是因为个别栏目的需要而增加真实字段的话,那么存储效率就很低,大部分记录的对应这个字段的值为空;但如果此字段需要用于业务需要,比如需要大量的搜索、条件过滤等业务,那真实字段对于构造Sql有天然的性能优势。
- 虚拟字段:和真实字段正好相反,如果使用此表的大部分数据都需要用到这么一个字段,此时还把字段定义成虚拟字段的话,存储效率更低(相比所有数据都用键值对来存肯定不如直接存内容值来得更有效率)的同时,还不方便此字段用于搜索。
总结:使用虚拟字段可以在不建真实字段的前提下解决使用同一个辅助表的两个栏目允许字段略有不同,目的是为了提升数据库存储效率,节约存储空间。
另外可以看出,虚拟字段所有数据是存在SettingsXML一个字段中,所以无论虚拟字段如何操作(增、删、改)都不会改变辅助表的表结构,所以为什么虚拟字段管理中没有同步数据库的操作了。
2、何时使用虚拟字段和真实字段
先给出一般原则:如果某个字段会被大部分栏目使用到,那需要把此字段建在辅助表级别,并且定义成真实字段;如果某个字段只是个别栏目需要使用,那请到站点内的栏目数据模型(下一篇文章介绍)里去定义栏目级别的虚拟字段。
SiteServer CMS5.0之前的版本是符合上面通用原则的,辅助表是没有虚拟字段管理功能,只能添加真实字段。因为辅助表里添加的字段是所有使用此辅助表的栏目都可见,表示是大部分栏目存储数据时都需要用到的字段,根据上面的分析这自然就是应该建成真实字段才对。
只有在具体某个栏目的时候才能根据本栏目实际情况决定是否添加虚拟字段,此栏目添加的虚拟字段在别的栏目是不可见的(子栏目除外)。
但没弄明白SiteServer官方为什么在5.0版本把虚拟字段功能提升到辅助表这个级别。在这里定义虚拟字段,表示所有使用此辅助表的栏目都需要使用此字段,但存储又是通过键值对的形式来存储。通过上面的分析可以知道这样的做法存储效率和搜索性能都很低。
3、虚拟字段的其他操作
虚拟字段因为不是真实的表结构,所以在建表的时候就不会有真正的Sql语句,而如果我们需要把定义好的虚拟字段应用到另外一张辅助表时,就可以通过导入导出的操作来实现。即导出成SiteServer官方自定义格式的一个数据压缩包,然后在导入的时候SiteServer系统自动解析此压缩包,在目标辅助表里创建一样的虚拟字段。
从上图可以看出,压缩包里的数据其实就是一个字段对应一个标准xml格式的字段描述文档。
另外和真实字段一样的是,虚拟字段也是需要设置字段显示样式的,要不然无法形成数据录入的表单提交页面。
五、后续准备要写的内容
通过两篇文章的讲解,把辅助表相关内容都讲完了。总结起来就是,定义辅助表和表字段,然后同步到数据库软件中,这样就有了存储数据的表了。然后定义这些表字段的显示样式,这样就可以定义出数据录入的提交表单的页面。但这一步只是给辅助表字段定义默认的显示样式,具体到每一个栏目,还可以修改相应字段的显示样式,甚至还可以根据具体栏目的实际需求增加一些新的虚拟字段。这就是接下来这篇文章要讲的数据模型和内容字段、栏目字段相关内容了,然后就开始写有关模板的内容了。
开心一笑
1、看到一个脑残的Code,忍不住骂了句:靠,这个码是哪个SB写的?仔细一看,原来是自己上个月写的。
2、程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?”程序员答:“加班。”