深入講解SiteServer CMS:輔助表(二)

SQL 文章 MySQL 技術 深入淺出SiteServer 2017-06-02
如果您覺得文章對您有點用,麻煩在您閱讀、收藏、轉發的時候,

一、上一篇文章主要內容

上一篇內容基本上就是純粹的文字說教,好多人反應不太好理解,所以在這裡替大家總結一下關鍵點:

  • 1、如果用SiteServer CMS來管理的內容和系統默認的內容表字段相差比較大的時候,需要另外單獨創建輔助表來存儲內容;

  • 2、SiteServer CMS系統默認的輔助表類型有:內容、投票、招聘、信息公開、互動交流,每種類型對應一張輔助表;

  • 3、你可以創建系統默認的五種輔助表類型,也可以創建“自定義”類型的輔助表;

  • 4、“自定義”類型的輔助表和系統默認的五種輔助表類型的最大區別就是不能成為站點的默認數據存儲表;

  • 5、站點的默認數據存儲表與非默認表的區別:全站搜索功能原則上只搜索站點默認內容輔助表裡的內容;

二、輔助表管理

上一篇文章最後提到,輔助表的創建分為兩步,一是創建表,二是創建表字段。上一篇把創建表的內容講完了,本篇接著講創建表字段,包括真實字段和虛擬字段。

在開始講創建字段之前,先熟悉一下SiteServer CMS後臺輔助表管理界面:

深入講解SiteServer CMS:輔助表(二)

上圖特意解釋了表格中幾列數據的含義,所謂家裡有糧心中不慌,先把列表讀懂了,才有沉下心來深入瞭解原理。

  • 輔助表標識:輔助表在數據庫軟件中的唯一標識,寫Sql語句用的;

  • 被使用數目:有多少個欄目使用此輔助表來存儲內容;沒有被任何欄目使用的輔助表才能被刪除(見上圖列表中的第二條紅色顯示數據);

  • 是否存在:是否在數據庫中真實的創建了此輔助表;只有在數據庫中真實的創建了的表才能用於欄目的數據存儲;

  • 創建後修改:已經創建了的輔助表,其字段是否又修改了;修改已經創建好的表字段,可以通過“同步輔助表”操作來實現在不丟失現有數據的前提下修改表結構;

瞭解了以上含義,下面開始輔助表的真實字段和虛擬字段管理。

三、輔助表真實字段

1、創建真實字段

所謂真實字段,就是說輔助表裡真真實實存在的字段,也就是和我們以前通過 SQL Server Management Studio (SSMS) 管理器創建表字段一樣。所以創建真實字段的界面也特別簡單,如下圖所示:

深入講解SiteServer CMS:輔助表(二)

從上圖可以看到,創建真實字段界面特別簡單,數據庫管理器SSMS創建表字段基本上一樣。系統還提供了批量添加字段的功能,方便一次性添加多個字段。這也是SiteServer CMS內容管理的一個特色,基本上能批量操作的都提供了類似功能。

如果創建的輔助表類型屬於SiteServer CMS內容管理系統自帶的五種類型輔助表(內容、投票、招聘、信息公開、互動交流)的話,輔助表會自帶有部分真實字段。如下圖所示,創建了一個內容類型的輔助表,表默認就有標題、簡介、圖片等真實字段。

深入講解SiteServer CMS:輔助表(二)

輔助表自帶的字段與後來我們創建的字段,唯一區別就是系統自帶的字段可以進行排序,而後來創建的表字段不能進行排序。其實這也不是能說是區別,應該說是系統的一個Bug,希望官方在後面能進行修復。

2、同步到數據庫中

這是一個什麼概念呢?從前面第二部分輔助表管理中有提到一個:

是否存在:是否在數據庫中真實的創建了此輔助表。

前面說的創建輔助表和創建真實字段,都是指在SiteServer CMS系統裡的操作,並沒有真正把這些操作反應數據庫軟件(MS SqlServer或MySql)中去,而“同步到數據庫中”就是指這一個操作。

舉個手機發短信的例子,編輯短信內容時或者存到草稿箱,直到點擊“發送”按鈕之前對方都不知道短信的內容。創建輔助表和創建真實字段就好比編輯短信內容;創建輔助表或創建字段的“確定”按鈕就好比發短信的存入草稿箱操作;只有同步到數據操作才真正類似短信發送按鈕,在操作完了這步之後數據庫軟件中才真正建立了輔助表以及相應的表字段。在此之後數據庫軟件中都是不存在此輔助表的,更不要說表字段了。

好了,明白了同步到數據庫中這個概念之後,再來看看具體的同步操作吧。有三種情形需要進行同步數據庫操作,每次操作造成的影響還略有不同。

1、輔助表和真實字段在SiteServer CMS系統中都定義好了,但還從來沒在數據庫軟件中創建過此表,此時需要進行數據庫同步操作,系統裡此時叫“創建輔助表”,如下圖所示:

深入講解SiteServer CMS:輔助表(二)

點擊“創建輔助表”按鈕,系統會向數據庫軟件發出創建輔助表和字段的Sql命令,在這之前數據庫軟件中並不存在此輔助表。

2、輔助表在數據庫軟件中存在了,現在因為某種原因需要增加、修改或刪除字段,並且之前的數據因為缺少相應字段而不得不廢棄重新錄入。此時也需要進行數據庫同步操作,系統裡此時叫“重新創建輔助表”,如下圖所示:

深入講解SiteServer CMS:輔助表(二)

點擊“重新創建輔助表”按鈕,系統會向數據庫軟件發出重創建輔助表和字段的Sql命令,在這之前數據庫軟件已經存在此輔助表和數據都會被刪除掉。進行此操作之前,系統會發出如下警告:

深入講解SiteServer CMS:輔助表(二)

3、輔助表在數據庫軟件中存在了,現在因為某種原因需要增加或修改少數字段,而且原因的數據需要保留。此時也需要進行數據庫同步操作,系統裡此時叫“同步輔助表”,如下圖所示:

深入講解SiteServer CMS:輔助表(二)

其實,只要已經在數據庫軟件中存在的輔助表,如果字段有變化(表結構發生變化)系統能自動檢測到並會出現如上圖所示的操作界面。此時的同步操作只是修改已存在的表結構,並不是刪除重新表,所以原來表裡的數據並不會丟失。

3、設置字段顯示樣式

在前面兩步,在SiteServer CMS系統中把輔助表和字段都定義好了,並且也在數據庫軟件中創建好了。接下來就是往表裡灌數據了對不對?比如輔助表定義了一個叫Title的文本字段,用於存放新聞的標題。那是不是需要一個提交表單界面來錄入數據?但這個數據怎麼錄呢?是一個單行文本框還是一個多行文本框呢?

設置字段顯示樣式就是解決上述問題的,即專門解決輔助表裡每個字段對應到提交表單的顯示樣式問題。直接上圖先直觀感受一下部分顯示樣式和此輔助表錄入數據的提交表單的對應關係:

深入講解SiteServer CMS:輔助表(二)

在上圖中,顯示樣式中的“顯示名稱”對應到提交表單裡的就是字段名稱,顯示樣式中的“表單提交類型”就是提交表單中輸入框的具體控件類型(單行文本框、下拉框、單選框等)。這樣是不是很好理解設置字段顯示樣式到底是一種什麼樣的操作?瞭解了這種對應關係,下面就來看看具體是如何設置字段顯示樣式的。

深入講解SiteServer CMS:輔助表(二)

上圖就是設置顯示樣式的界面,顯示名稱和表單提交類型剛才解釋過了。下面再解釋一下其他幾個常用設置:

  • 顯示幫助提示:輸入框後面的幫助提示,提示本字段輸入內容的格式之類的幫助文字;

  • 是否啟用:是指本字段是否出現在提交表單界面中,有些字段可能並不需要錄入數據,比如系統會提供固定的默認值;

  • 是否單行顯示:在提交表單界面中,有些字段佔位特別少,如果單獨佔用一行的知可能會不太好看,可以把兩個字段放在同一行,排版顯的更緊湊;

  • 排列方向:如果字段的提交類型是多個選項(比如單選框、複選框),需要決定這些選項的排列方向,是橫向排還是豎向排;

需要特別強調的是,在這裡設置好的字段顯示樣式,是針對此輔助表字段統一設置的默認顯示樣式,具體到使用些輔助表的每一個站點的每一個欄目,還可以針對字段的顯示樣式進行調整,使得不同欄目有不同的顯示樣式。當然如果具體欄目不進行調整,就是意味著使用這裡設置的默認顯示樣式。至於使用輔助表默認的顯示樣式和具體欄目重新定義顯示樣式有什麼區別,在下一篇文章中作詳細介紹。

至此,關於輔助表真實字段的內容就全部講完,主要就是三個步驟:創建表字段、同步到數據庫軟件中和定義字段默認顯示樣式。其實後現兩步是沒有先後順序的,也可以先定義字段默認顯示樣式再同步到數據庫軟件中。因為數據庫軟件中創建的只是第一步的表字段,並不需要字段默認顯示樣式任何信息。顯示樣式是在SiteServer系統形成數據錄入的提交表單界面時使用。

四、輔助表虛擬字段

1、虛擬字段與真實字段的存儲方式

深入講解SiteServer CMS:輔助表(二)

先直觀感受一下真實字段和虛擬字段存儲方式的不同,才能更好的瞭解為什麼要使用虛擬字段的原因。所謂真實字段,就是數據庫軟件表裡真實存在的一個一個字段,比如上圖所示的: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、虛擬字段的其他操作

深入講解SiteServer CMS:輔助表(二)

虛擬字段因為不是真實的表結構,所以在建表的時候就不會有真正的Sql語句,而如果我們需要把定義好的虛擬字段應用到另外一張輔助表時,就可以通過導入導出的操作來實現。即導出成SiteServer官方自定義格式的一個數據壓縮包,然後在導入的時候SiteServer系統自動解析此壓縮包,在目標輔助表裡創建一樣的虛擬字段。

深入講解SiteServer CMS:輔助表(二)

從上圖可以看出,壓縮包裡的數據其實就是一個字段對應一個標準xml格式的字段描述文檔。

另外和真實字段一樣的是,虛擬字段也是需要設置字段顯示樣式的,要不然無法形成數據錄入的表單提交頁面。

五、後續準備要寫的內容

通過兩篇文章的講解,把輔助表相關內容都講完了。總結起來就是,定義輔助表和表字段,然後同步到數據庫軟件中,這樣就有了存儲數據的表了。然後定義這些表字段的顯示樣式,這樣就可以定義出數據錄入的提交表單的頁面。但這一步只是給輔助表字段定義默認的顯示樣式,具體到每一個欄目,還可以修改相應字段的顯示樣式,甚至還可以根據具體欄目的實際需求增加一些新的虛擬字段。這就是接下來這篇文章要講的數據模型和內容字段、欄目字段相關內容了,然後就開始寫有關模板的內容了。

開心一笑

1、看到一個腦殘的Code,忍不住罵了句:靠,這個碼是哪個SB寫的?仔細一看,原來是自己上個月寫的。

2、程序員去面試,面試官問:“你畢業才兩年,這三年工作經驗是怎麼來的?”程序員答:“加班。”

相關推薦

推薦中...