如果您覺得文章對您有點用舅列,麻煩在您閱讀、收藏、轉發(fā)的時候啤覆,
順手幫忙點個贊、留個言惭聂、加關注窗声,這是我繼續(xù)寫下去的絕佳動力。
一彼妻、?上一篇文章主要內(nèi)容
上一篇內(nèi)容基本上就是純粹的文字說教嫌佑,好多人反應不太好理解,所以在這里替大家總結一下關鍵點:
1侨歉、如果用SiteServer CMS來管理的內(nèi)容和系統(tǒng)默認的內(nèi)容表字段相差比較大的時候屋摇,需要另外單獨創(chuàng)建輔助表來存儲內(nèi)容;
2幽邓、SiteServer CMS系統(tǒng)默認的輔助表類型有:內(nèi)容痕檬、投票瘫想、招聘、信息公開榕酒、互動交流,每種類型對應一張輔助表引瀑;
3、你可以創(chuàng)建系統(tǒng)默認的五種輔助表類型,也可以創(chuàng)建“自定義”類型的輔助表方援;
4、“自定義”類型的輔助表和系統(tǒng)默認的五種輔助表類型的最大區(qū)別就是不能成為站點的默認數(shù)據(jù)存儲表涛癌;
5犯戏、站點的默認數(shù)據(jù)存儲表與非默認表的區(qū)別:全站搜索功能原則上只搜索站點默認內(nèi)容輔助表里的內(nèi)容;
二拳话、輔助表管理
上一篇文章最后提到先匪,輔助表的創(chuàng)建分為兩步,一是創(chuàng)建表弃衍,二是創(chuàng)建表字段呀非。上一篇把創(chuàng)建表的內(nèi)容講完了,本篇接著講創(chuàng)建表字段镜盯,包括真實字段和虛擬字段岸裙。
在開始講創(chuàng)建字段之前,先熟悉一下SiteServer CMS后臺輔助表管理界面:
上圖特意解釋了表格中幾列數(shù)據(jù)的含義形耗,所謂家里有糧心中不慌哥桥,先把列表讀懂了,才有沉下心來深入了解原理激涤。
- 輔助表標識:輔助表在數(shù)據(jù)庫軟件中的唯一標識拟糕,寫Sql語句用的;
- 被使用數(shù)目:有多少個欄目使用此輔助表來存儲內(nèi)容倦踢;沒有被任何欄目使用的輔助表才能被刪除(見上圖列表中的第二條紅色顯示數(shù)據(jù))送滞;
- 是否存在:是否在數(shù)據(jù)庫中真實的創(chuàng)建了此輔助表;只有在數(shù)據(jù)庫中真實的創(chuàng)建了的表才能用于欄目的數(shù)據(jù)存儲辱挥;
- 創(chuàng)建后修改:已經(jīng)創(chuàng)建了的輔助表犁嗅,其字段是否又修改了;修改已經(jīng)創(chuàng)建好的表字段晤碘,可以通過“同步輔助表”操作來實現(xiàn)在不丟失現(xiàn)有數(shù)據(jù)的前提下修改表結構褂微;
了解了以上含義,下面開始輔助表的真實字段和虛擬字段管理园爷。
三宠蚂、輔助表真實字段
1、創(chuàng)建真實字段
所謂真實字段童社,就是說輔助表里真真實實存在的字段求厕,也就是和我們以前通過 SQL Server Management Studio (SSMS) 管理器創(chuàng)建表字段一樣。所以創(chuàng)建真實字段的界面也特別簡單,如下圖所示:
從上圖可以看到呀癣,創(chuàng)建真實字段界面特別簡單美浦,?數(shù)據(jù)庫管理器SSMS創(chuàng)建表字段基本上一樣。系統(tǒng)還提供了批量添加字段的功能项栏,方便一次性添加多個字段浦辨。這也是SiteServer CMS內(nèi)容管理的一個特色,基本上能批量操作的都提供了類似功能忘嫉。
如果創(chuàng)建的輔助表類型屬于SiteServer CMS內(nèi)容管理系統(tǒng)自帶的五種類型輔助表(內(nèi)容荤牍、投票、招聘庆冕、信息公開、互動交流)的話劈榨,輔助表會自帶有部分真實字段访递。如下圖所示,創(chuàng)建了一個內(nèi)容類型的輔助表同辣,表默認就有標題拷姿、簡介、圖片等真實字段旱函。
輔助表自帶的字段與后來我們創(chuàng)建的字段响巢,唯一區(qū)別就是系統(tǒng)自帶的字段可以進行排序,而后來創(chuàng)建的表字段不能進行排序棒妨。其實這也不是能說是區(qū)別踪古,應該說是系統(tǒng)的一個Bug,希望官方在后面能進行修復券腔。
2伏穆、同步到數(shù)據(jù)庫中
這是一個什么概念呢?從前面第二部分輔助表管理中有提到一個:
是否存在:是否在數(shù)據(jù)庫中真實的創(chuàng)建了此輔助表纷纫。
前面說的創(chuàng)建輔助表和創(chuàng)建真實字段枕扫,都是指在SiteServer CMS系統(tǒng)里的操作,并沒有真正把這些操作反應數(shù)據(jù)庫軟件(MS SqlServer或MySql)中去辱魁,而“同步到數(shù)據(jù)庫中”就是指這一個操作烟瞧。
舉個手機發(fā)短信的例子,編輯短信內(nèi)容時或者存到草稿箱染簇,直到點擊“發(fā)送”按鈕之前對方都不知道短信的內(nèi)容参滴。創(chuàng)建輔助表和創(chuàng)建真實字段就好比編輯短信內(nèi)容;創(chuàng)建輔助表或創(chuàng)建字段的“確定”按鈕就好比發(fā)短信的存入草稿箱操作剖笙;只有同步到數(shù)據(jù)操作才真正類似短信發(fā)送按鈕卵洗,在操作完了這步之后數(shù)據(jù)庫軟件中才真正建立了輔助表以及相應的表字段。在此之后數(shù)據(jù)庫軟件中都是不存在此輔助表的,更不要說表字段了过蹂。
好了十绑,明白了同步到數(shù)據(jù)庫中這個概念之后,再來看看具體的同步操作吧酷勺。有三種情形需要進行同步數(shù)據(jù)庫操作本橙,每次操作造成的影響還略有不同。
1脆诉、輔助表和真實字段在SiteServer CMS系統(tǒng)中都定義好了甚亭,但還從來沒在數(shù)據(jù)庫軟件中創(chuàng)建過此表,此時需要進行數(shù)據(jù)庫同步操作击胜,系統(tǒng)里此時叫“創(chuàng)建輔助表”亏狰,如下圖所示:
點擊“創(chuàng)建輔助表”按鈕,系統(tǒng)會向數(shù)據(jù)庫軟件發(fā)出創(chuàng)建輔助表和字段的Sql命令偶摔,在這之前數(shù)據(jù)庫軟件中并不存在此輔助表暇唾。
2、輔助表在數(shù)據(jù)庫軟件中存在了辰斋,現(xiàn)在因為某種原因需要增加策州、修改或刪除字段,并且之前的數(shù)據(jù)因為缺少相應字段而不得不廢棄重新錄入宫仗。此時也需要進行數(shù)據(jù)庫同步操作够挂,系統(tǒng)里此時叫“重新創(chuàng)建輔助表”,如下圖所示:
點擊“重新創(chuàng)建輔助表”按鈕藕夫,系統(tǒng)會向數(shù)據(jù)庫軟件發(fā)出重創(chuàng)建輔助表和字段的Sql命令孽糖,在這之前數(shù)據(jù)庫軟件已經(jīng)存在此輔助表和數(shù)據(jù)都會被刪除掉。進行此操作之前汁胆,系統(tǒng)會發(fā)出如下警告:
3梭姓、輔助表在數(shù)據(jù)庫軟件中存在了,現(xiàn)在因為某種原因需要增加或修改少數(shù)字段嫩码,而且原因的數(shù)據(jù)需要保留誉尖。此時也需要進行數(shù)據(jù)庫同步操作,系統(tǒng)里此時叫“同步輔助表”铸题,如下圖所示:
其實铡恕,只要已經(jīng)在數(shù)據(jù)庫軟件中存在的輔助表,如果字段有變化(表結構發(fā)生變化)系統(tǒng)能自動檢測到并會出現(xiàn)如上圖所示的操作界面丢间。此時的同步操作只是修改已存在的表結構探熔,并不是刪除重新表,所以原來表里的數(shù)據(jù)并不會丟失烘挫。
3诀艰、設置字段顯示樣式
在前面兩步柬甥,在SiteServer CMS系統(tǒng)中把輔助表和字段都定義好了,并且也在數(shù)據(jù)庫軟件中創(chuàng)建好了其垄。接下來就是往表里灌數(shù)據(jù)了對不對苛蒲?比如輔助表定義了一個叫Title的文本字段,用于存放新聞的標題绿满。那是不是需要一個提交表單界面來錄入數(shù)據(jù)臂外?但這個數(shù)據(jù)怎么錄呢?是一個單行文本框還是一個多行文本框呢喇颁?
設置字段顯示樣式就是解決上述問題的漏健,即專門解決輔助表里每個字段對應到提交表單的顯示樣式問題。直接上圖先直觀感受一下部分顯示樣式和此輔助表錄入數(shù)據(jù)的提交表單的對應關系:
在上圖中橘霎,顯示樣式中的“顯示名稱”對應到提交表單里的就是字段名稱蔫浆,顯示樣式中的“表單提交類型”就是提交表單中輸入框的具體控件類型(單行文本框、下拉框茎毁、單選框等)克懊。這樣是不是很好理解設置字段顯示樣式到底是一種什么樣的操作?了解了這種對應關系七蜘,下面就來看看具體是如何設置字段顯示樣式的。
上圖就是設置顯示樣式的界面墙懂,顯示名稱和表單提交類型剛才解釋過了橡卤。下面再解釋一下其他幾個常用設置:
- 顯示幫助提示:輸入框后面的幫助提示,提示本字段輸入內(nèi)容的格式之類的幫助文字损搬;
- 是否啟用:是指本字段是否出現(xiàn)在提交表單界面中碧库,有些字段可能并不需要錄入數(shù)據(jù),比如系統(tǒng)會提供固定的默認值巧勤;
- 是否單行顯示:在提交表單界面中嵌灰,有些字段占位特別少,如果單獨占用一行的知可能會不太好看颅悉,可以把兩個字段放在同一行沽瞭,排版顯的更緊湊;
- 排列方向:如果字段的提交類型是多個選項(比如單選框剩瓶、復選框)驹溃,需要決定這些選項的排列方向,是橫向排還是豎向排延曙;
需要特別強調的是豌鹤,在這里設置好的字段顯示樣式,是針對此輔助表字段統(tǒng)一設置的默認顯示樣式枝缔,具體到使用些輔助表的每一個站點的每一個欄目布疙,還可以針對字段的顯示樣式進行調整,使得不同欄目有不同的顯示樣式。當然如果具體欄目不進行調整灵临,就是意味著使用這里設置的默認顯示樣式截型。至于使用輔助表默認的顯示樣式和具體欄目重新定義顯示樣式有什么區(qū)別,在下一篇文章中作詳細介紹俱诸。
至此菠劝,關于輔助表真實字段的內(nèi)容就全部講完,主要就是三個步驟:創(chuàng)建表字段睁搭、同步到數(shù)據(jù)庫軟件中和定義字段默認顯示樣式赶诊。其實后現(xiàn)兩步是沒有先后順序的,也可以先定義字段默認顯示樣式再同步到數(shù)據(jù)庫軟件中园骆。因為數(shù)據(jù)庫軟件中創(chuàng)建的只是第一步的表字段舔痪,并不需要字段默認顯示樣式任何信息。顯示樣式是在SiteServer系統(tǒng)形成數(shù)據(jù)錄入的提交表單界面時使用锌唾。
四锄码、輔助表虛擬字段
1、虛擬字段與真實字段的存儲方式
先直觀感受一下真實字段和虛擬字段存儲方式的不同晌涕,才能更好的了解為什么要使用虛擬字段的原因滋捶。所謂真實字段,就是數(shù)據(jù)庫軟件表里真實存在的一個一個字段余黎,比如上圖所示的:Title重窟、IsTop、AddDate惧财,三個真實字段巡扇。如果某條記錄真實字段沒有值,那這個字段還是會占用一定的存儲空間垮衷,只是值為null或者默認值而矣厅翔。想象一下,如果一個表里有1萬條記錄搀突,其中9000條這個真實字段都用不上沒有值刀闷,那是不是挺浪費的?
而所謂虛擬字段描姚,SiteServer CMS用SettingsXML一個字段來存儲一條記錄的所有虛擬字段的值涩赢,具體的存儲格式類似:
actor=saf&time=2017-05-17&ypes=內(nèi)地 // 字段名=字段值&字段名=字段值的鍵值對格式存儲數(shù)據(jù)
這個與真實字段相比,有什么好處呢轩勘?如果一個表有五個虛擬字段筒扒,其中9000條只使用了一個虛擬字段的話,那這9000條記錄的SettingsXML字段存儲就只有一個字段名=字段值鍵值對格式绊寻,而另外1000條就會有多個字段名=字段值鍵值鍵值對格式花墩。也就是說SettingsXML字段存儲的數(shù)據(jù)會根據(jù)使用字段的多少來自由伸縮悬秉。
從上面對比可以明顯看出兩種字段的優(yōu)缺點:
- 真實字段:如果只是因為個別欄目的需要而增加真實字段的話,那么存儲效率就很低冰蘑,大部分記錄的對應這個字段的值為空和泌;但如果此字段需要用于業(yè)務需要,比如需要大量的搜索祠肥、條件過濾等業(yè)務武氓,那真實字段對于構造Sql有天然的性能優(yōu)勢。
- 虛擬字段:和真實字段正好相反仇箱,如果使用此表的大部分數(shù)據(jù)都需要用到這么一個字段县恕,此時還把字段定義成虛擬字段的話,存儲效率更低(相比所有數(shù)據(jù)都用鍵值對來存肯定不如直接存內(nèi)容值來得更有效率)的同時剂桥,還不方便此字段用于搜索忠烛。
總結:使用虛擬字段可以在不建真實字段的前提下解決使用同一個輔助表的兩個欄目允許字段略有不同,目的是為了提升數(shù)據(jù)庫存儲效率权逗,節(jié)約存儲空間美尸。
另外可以看出,虛擬字段所有數(shù)據(jù)是存在SettingsXML一個字段中斟薇,所以無論虛擬字段如何操作(增师坎、刪、改)都不會改變輔助表的表結構堪滨,所以為什么虛擬字段管理中沒有同步數(shù)據(jù)庫的操作了屹耐。
2、何時使用虛擬字段和真實字段
先給出一般原則:如果某個字段會被大部分欄目使用到椿猎,那需要把此字段建在輔助表級別,并且定義成真實字段寿弱;如果某個字段只是個別欄目需要使用犯眠,那請到站點內(nèi)的欄目數(shù)據(jù)模型(下一篇文章介紹)里去定義欄目級別的虛擬字段。
SiteServer CMS5.0之前的版本是符合上面通用原則的症革,輔助表是沒有虛擬字段管理功能筐咧,只能添加真實字段。因為輔助表里添加的字段是所有使用此輔助表的欄目都可見噪矛,表示是大部分欄目存儲數(shù)據(jù)時都需要用到的字段量蕊,根據(jù)上面的分析這自然就是應該建成真實字段才對。
只有在具體某個欄目的時候才能根據(jù)本欄目實際情況決定是否添加虛擬字段艇挨,此欄目添加的虛擬字段在別的欄目是不可見的(子欄目除外)残炮。
但沒弄明白SiteServer官方為什么在5.0版本把虛擬字段功能提升到輔助表這個級別。在這里定義虛擬字段缩滨,表示所有使用此輔助表的欄目都需要使用此字段势就,但存儲又是通過鍵值對的形式來存儲泉瞻。通過上面的分析可以知道這樣的做法存儲效率和搜索性能都很低。
3苞冯、虛擬字段的其他操作
虛擬字段因為不是真實的表結構袖牙,所以在建表的時候就不會有真正的Sql語句,而如果我們需要把定義好的虛擬字段應用到另外一張輔助表時舅锄,就可以通過導入導出的操作來實現(xiàn)鞭达。即導出成SiteServer官方自定義格式的一個數(shù)據(jù)壓縮包,然后在導入的時候SiteServer系統(tǒng)自動解析此壓縮包皇忿,在目標輔助表里創(chuàng)建一樣的虛擬字段畴蹭。
從上圖可以看出,壓縮包里的數(shù)據(jù)其實就是一個字段對應一個標準xml格式的字段描述文檔禁添。
另外和真實字段一樣的是撮胧,虛擬字段也是需要設置字段顯示樣式的,要不然無法形成數(shù)據(jù)錄入的表單提交頁面老翘。
五芹啥、后續(xù)準備要寫的內(nèi)容
通過兩篇文章的講解,把輔助表相關內(nèi)容都講完了铺峭∧够常總結起來就是,定義輔助表和表字段卫键,然后同步到數(shù)據(jù)庫軟件中傀履,這樣就有了存儲數(shù)據(jù)的表了。然后定義這些表字段的顯示樣式莉炉,這樣就可以定義出數(shù)據(jù)錄入的提交表單的頁面钓账。但這一步只是給輔助表字段定義默認的顯示樣式,具體到每一個欄目絮宁,還可以修改相應字段的顯示樣式梆暮,甚至還可以根據(jù)具體欄目的實際需求增加一些新的虛擬字段。這就是接下來這篇文章要講的數(shù)據(jù)模型和內(nèi)容字段绍昂、欄目字段相關內(nèi)容了啦粹,然后就開始寫有關模板的內(nèi)容了。
開心一笑
1窘游、看到一個腦殘的Code唠椭,忍不住罵了句:靠,這個碼是哪個SB寫的忍饰?仔細一看贪嫂,原來是自己上個月寫的。
2喘批、程序員去面試撩荣,面試官問:“你畢業(yè)才兩年铣揉,這三年工作經(jīng)驗是怎么來的?”程序員答:“加班餐曹」涔埃”