劉宏新 張一鳴 解勇濤 趙一健 郭麗峰
(1.東北農(nóng)業(yè)大學(xué)工程學(xué)院, 哈爾濱 150030; 2.宿遷學(xué)院機(jī)電工程學(xué)院, 宿遷 223800)
聯(lián)合收獲機(jī)是農(nóng)業(yè)現(xiàn)代化發(fā)展過程中的一種典型機(jī)具[1],我國地域差異大、農(nóng)作物種類多樣令聯(lián)合收獲機(jī)具有定制化及多樣化的特征[2],這些特征使聯(lián)合收獲機(jī)在設(shè)計時需因地制宜,也使聯(lián)合收獲機(jī)在設(shè)計過程中的限制性因素增多,再加上聯(lián)合收獲機(jī)本身集成度高、結(jié)構(gòu)復(fù)雜的特點,最終導(dǎo)致其設(shè)計過程繁瑣、設(shè)計周期長[3]。建立與聯(lián)合收獲機(jī)相關(guān)的用于知識積累和管理平臺的知識庫系統(tǒng),可方便設(shè)計人員靈活使用設(shè)計知識,增強(qiáng)知識繼承性和重用性,從而提高聯(lián)合收獲機(jī)產(chǎn)品的設(shè)計效率[4-5]。鑒于SQL Server數(shù)據(jù)庫在易用性、可擴(kuò)展性以及可靠性等方面處于世界領(lǐng)先地位,應(yīng)用廣泛[6],機(jī)械裝備知識庫系統(tǒng)大都使用SQL Server數(shù)據(jù)庫用于設(shè)計知識組織、存儲、查詢等[7-9]。
但目前,以知識繼承和設(shè)計資源重用為目的的專門知識庫系統(tǒng)的信息查詢,以及裝備企業(yè)現(xiàn)有PDM/PLM(Product data management / Product lifecycle management)系統(tǒng)中的相關(guān)知識檔案模塊內(nèi)容有效利用方面均存在一定的缺陷:一方面,專用知識庫中不同類型的設(shè)計知識被存儲于不同的數(shù)據(jù)表中,SQL Server數(shù)據(jù)庫中這種對應(yīng)不同類型的單一數(shù)據(jù)表結(jié)構(gòu)簡單、內(nèi)容明了且針對性強(qiáng),用戶可方便地對該數(shù)據(jù)表進(jìn)行單獨編輯或查詢等操作,便于用戶團(tuán)隊的分工協(xié)作和所屬任務(wù)的數(shù)據(jù)管理。但是,當(dāng)數(shù)據(jù)庫中數(shù)據(jù)不斷累積,數(shù)據(jù)表的數(shù)量達(dá)到一定規(guī)模后,用戶在查詢數(shù)據(jù)時為獲得較全面的查詢結(jié)果,需要訪問更多的數(shù)據(jù)表并逐一進(jìn)行查詢,數(shù)據(jù)的查詢就變得異常繁瑣,給使用造成不便,對于大規(guī)模知識庫而言,對數(shù)據(jù)表逐一定位及內(nèi)容查詢實際上不具有可操作性與實用性。針對這種情況,可將數(shù)據(jù)庫中全部單一數(shù)據(jù)表融合成一個數(shù)據(jù)表,用戶可以只針對該合成數(shù)據(jù)表進(jìn)行查詢,避免用戶逐一訪問數(shù)據(jù)表。但聯(lián)合收獲機(jī)知識種類繁多、信息總量大,數(shù)據(jù)表的獨立性使數(shù)據(jù)需要經(jīng)過分析與繁復(fù)的變換之后才能建立聯(lián)系,在技術(shù)層面上該方式不具有可操作性、無法實現(xiàn);即便是技術(shù)上能夠?qū)崿F(xiàn),從結(jié)果上來看,合成數(shù)據(jù)表中的數(shù)據(jù)過于龐雜、結(jié)構(gòu)混亂、內(nèi)容表述不清。因此,需要在保留SQL Server數(shù)據(jù)庫中設(shè)計知識由大量獨立數(shù)據(jù)表的形式進(jìn)行存儲的基礎(chǔ)上對聯(lián)合收獲機(jī)知識庫數(shù)據(jù)多表聯(lián)合查詢進(jìn)行研究。另一方面,目前國內(nèi)外農(nóng)機(jī)裝備制造企業(yè)、汽車制造企業(yè)以及工程機(jī)械等行業(yè)的PDM/PLM系統(tǒng)主要以目錄樹結(jié)構(gòu)展現(xiàn)系統(tǒng)中的全部數(shù)據(jù)集,用戶可使用關(guān)鍵字搜索、名稱搜索等搜索方式快速定位目錄樹節(jié)點。對目錄樹節(jié)點進(jìn)行查看可瀏覽該節(jié)點下存儲的數(shù)據(jù)表內(nèi)容,在該數(shù)據(jù)表中可通過使用文本篩選等方式獲取具體的數(shù)據(jù)條目。企業(yè)PDM/PLM系統(tǒng)雖然數(shù)據(jù)龐大,但幾乎均為檔案性質(zhì)的管理,對于常規(guī)個體崗位,因其對應(yīng)極為有限的節(jié)點及所屬數(shù)據(jù),且數(shù)據(jù)多為簡單的調(diào)用,所以并不影響正常使用。當(dāng)面臨以資源重用為目的的數(shù)字化與智能化設(shè)計使用需求時,因涉及相關(guān)領(lǐng)域大范圍的數(shù)據(jù)資源作為基礎(chǔ),上述以有限節(jié)點權(quán)限方式進(jìn)行的常規(guī)數(shù)據(jù)庫結(jié)構(gòu)及管理則無法滿足該需求。
國內(nèi)外對聯(lián)合收獲機(jī)知識庫系統(tǒng)的報道較少,主要集中于系統(tǒng)的建立及數(shù)據(jù)的整體存儲方式上,對知識庫數(shù)據(jù)多表聯(lián)合查詢的研究未見報道,但國內(nèi)外學(xué)者在其他領(lǐng)域中對數(shù)據(jù)的處理方式以及數(shù)據(jù)表聯(lián)接方式進(jìn)行了相關(guān)研究。RAHMAN等[10]直接將數(shù)據(jù)存儲服務(wù)器與用戶訪問層連接,使數(shù)據(jù)中心能夠在兩者之間更方便的互連。BAZAGA等[11]在數(shù)據(jù)庫中創(chuàng)建合成數(shù)據(jù)集,并將數(shù)據(jù)集用于多語言查詢系統(tǒng)算法中使系統(tǒng)支持多個數(shù)據(jù)表執(zhí)行一次查詢?nèi)蝿?wù)。KUMAR等[12]為加強(qiáng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)與機(jī)器學(xué)習(xí)(Machine learning,ML)算法的集成,利用數(shù)據(jù)表之間的外鍵依存關(guān)系將數(shù)據(jù)表聯(lián)接。LI等[13]利用數(shù)據(jù)表之間的共有數(shù)據(jù)將數(shù)據(jù)表聯(lián)接,用戶可對數(shù)據(jù)表聯(lián)接后的數(shù)據(jù)集進(jìn)行查詢。上述3種對關(guān)系型數(shù)據(jù)表之間的聯(lián)接為聯(lián)合收獲機(jī)知識庫系統(tǒng)數(shù)據(jù)表之間的聯(lián)接提供參考方案。弋偉國等[14]將采集的果蔬質(zhì)量數(shù)據(jù)加密后進(jìn)行存儲。程偉等[15]標(biāo)識每條遙感數(shù)據(jù)的狀態(tài)信息后再將遙感數(shù)據(jù)存儲到數(shù)據(jù)中心。上述兩種對數(shù)據(jù)進(jìn)行處理后再使用的方法為多表聯(lián)合查詢時數(shù)據(jù)表之間的使用開拓了思路。趙潤發(fā)等[16]用Flink軟件作為不同類型數(shù)據(jù)的處理平臺,并將Kafka軟件用作存儲數(shù)據(jù)的消息管道,該方式存儲的數(shù)據(jù)在進(jìn)行數(shù)據(jù)處理時反應(yīng)迅速,為研究多表聯(lián)合查詢結(jié)果數(shù)據(jù)的存儲方式提供借鑒。
綜上所述,本文在前期聯(lián)合收獲機(jī)常規(guī)知識組織與知識庫系統(tǒng)架構(gòu)的基礎(chǔ)上,深入開展知識庫數(shù)據(jù)多表聯(lián)合查詢研究,解決用戶無法一次性對多個數(shù)據(jù)表中數(shù)據(jù)進(jìn)行查詢的問題,增加聯(lián)合收獲機(jī)知識庫系統(tǒng)的實用性,提高知識查詢的便捷性和高效性。
研究對象(聯(lián)合收獲機(jī)知識庫系統(tǒng))為團(tuán)隊在項目中自主研發(fā)的支持聯(lián)合收獲機(jī)智能化設(shè)計的PDM系統(tǒng)的功能性子系統(tǒng),具有知識管理與編輯、瀏覽與查詢、知識匹配及關(guān)聯(lián)模型調(diào)用等功能。本文知識庫及類似屬性的資源型子系統(tǒng)在項目參與企業(yè)的實際產(chǎn)品研發(fā)過程中試用及驗證,基本滿足使用要求,但引言所述問題也顯現(xiàn)出來。目前,聯(lián)合收獲機(jī)知識庫系統(tǒng)數(shù)據(jù)表數(shù)量近150個,包含數(shù)千條樣板數(shù)據(jù),數(shù)據(jù)量已滿足問題的充分暴露及方法檢驗所需的必要條目數(shù)。研究可聚焦于系統(tǒng)架構(gòu)調(diào)整和優(yōu)化,研究完成后系統(tǒng)可根據(jù)實際需要隨時進(jìn)行數(shù)據(jù)的常規(guī)擴(kuò)充或大規(guī)模錄入,系統(tǒng)功能不受數(shù)據(jù)量影響。
面對現(xiàn)有系統(tǒng)中大量獨立性的數(shù)據(jù)表,系統(tǒng)在進(jìn)行多表聯(lián)合查詢時需考慮哪些數(shù)據(jù)表之間可進(jìn)行聯(lián)合、數(shù)據(jù)表聯(lián)合方式,以及聯(lián)合后數(shù)據(jù)集的形式和數(shù)據(jù)查詢方式。將數(shù)據(jù)表進(jìn)行整理分類,利用數(shù)據(jù)表分類結(jié)果建立數(shù)據(jù)存儲結(jié)構(gòu),確定可聯(lián)合的數(shù)據(jù)表,并將其劃分成組,每組為一個管理范圍。將管理范圍中所有數(shù)據(jù)表的全部數(shù)據(jù)聯(lián)合成數(shù)據(jù)集,令數(shù)據(jù)集可被統(tǒng)一調(diào)用即實現(xiàn)了多表聯(lián)合運(yùn)行。管理范圍中的數(shù)據(jù)表在聯(lián)合運(yùn)行時需將各數(shù)據(jù)表中數(shù)據(jù)轉(zhuǎn)換為相同的數(shù)據(jù)結(jié)構(gòu),并始終保證聯(lián)合后的數(shù)據(jù)集與原數(shù)據(jù)表之間的數(shù)據(jù)保持一致。系統(tǒng)對數(shù)據(jù)集的查詢就是系統(tǒng)對多個數(shù)據(jù)表中全部數(shù)據(jù)的查詢,即多表聯(lián)合查詢。
基于以上設(shè)計思路,本文提出了聯(lián)合收獲機(jī)知識庫數(shù)據(jù)多表聯(lián)合查詢的研究方案,總體技術(shù)方案如圖1所示,整個方案共包括4個階段:①數(shù)據(jù)表分類:對數(shù)據(jù)表進(jìn)行整理,分析數(shù)據(jù)表內(nèi)容的表現(xiàn)形式、知識類型和數(shù)據(jù)表之間的層次關(guān)系,總結(jié)規(guī)律,將數(shù)據(jù)表進(jìn)行整體分類。②數(shù)據(jù)存儲結(jié)構(gòu)建立及管理范圍劃分:根據(jù)數(shù)據(jù)表分類結(jié)果為知識庫系統(tǒng)建立數(shù)據(jù)存儲結(jié)構(gòu),令數(shù)據(jù)表能夠分門別類地存儲。將可融合的數(shù)據(jù)表劃分成組,每組數(shù)據(jù)表即是一個管理范圍,管理范圍中的全部數(shù)據(jù)表在提取數(shù)據(jù)后應(yīng)可以融合成數(shù)據(jù)集。③多表聯(lián)合運(yùn)行:根據(jù)以上管理范圍劃分結(jié)果,對任一管理范圍的數(shù)據(jù)進(jìn)行提取,并將其處理成數(shù)據(jù)集,數(shù)據(jù)集中的數(shù)據(jù)應(yīng)與原數(shù)據(jù)表中的數(shù)據(jù)保持一致。形成的數(shù)據(jù)集需要為用戶提供可進(jìn)行數(shù)據(jù)調(diào)用、數(shù)據(jù)查詢的條件。④多表聯(lián)合查詢:對上述數(shù)據(jù)集進(jìn)行數(shù)據(jù)提取調(diào)用,用戶可在數(shù)據(jù)集中查詢自己的目標(biāo)信息。
圖1 總體技術(shù)方案
聯(lián)合收獲機(jī)知識庫系統(tǒng)將聯(lián)合收獲機(jī)零部件按照功能劃分為脫粒模塊、分離清選模塊、割臺模塊、輸送模塊、動力模塊、驅(qū)動模塊、輔助模塊和標(biāo)準(zhǔn)件模塊,聯(lián)合收獲機(jī)零部件的相關(guān)知識也根據(jù)該劃分方式進(jìn)行分類并將知識進(jìn)行組織整理形成各種數(shù)據(jù)表存儲到SQL Server數(shù)據(jù)庫中。其余用于描述與聯(lián)合收獲機(jī)相關(guān)的整機(jī)機(jī)型、標(biāo)準(zhǔn)、專利、典型地域、影響作業(yè)的土壤因素等信息按照其描述內(nèi)容各自形成數(shù)據(jù)表。數(shù)據(jù)表之間的層次關(guān)系如圖2所示。
圖2 聯(lián)合收獲機(jī)知識庫系統(tǒng)數(shù)據(jù)表層次關(guān)系
聯(lián)合收獲機(jī)知識庫系統(tǒng)在該層次關(guān)系下存儲的數(shù)據(jù)表具有較小的冗余度、較高的數(shù)據(jù)獨立性和易延展性,并且可在不同的用戶之間實現(xiàn)共享。
數(shù)據(jù)表的獨立性可以令聯(lián)合收獲機(jī)知識庫系統(tǒng)在不影響其他數(shù)據(jù)表的情況下訪問某一數(shù)據(jù)表,并對該數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行增加、修改、刪除、查詢等管理。但數(shù)據(jù)表的獨立性也令系統(tǒng)在多表聯(lián)合運(yùn)行時受到限制:①聯(lián)合收獲機(jī)知識庫系統(tǒng)數(shù)據(jù)表之間的關(guān)聯(lián)性不強(qiáng),數(shù)據(jù)表之間的數(shù)據(jù)無法關(guān)聯(lián)形成完整、有聯(lián)系的數(shù)據(jù)集。②數(shù)據(jù)表之間的結(jié)構(gòu)各不相同,若將多個任意數(shù)據(jù)表聯(lián)合起來會出現(xiàn)數(shù)據(jù)表結(jié)構(gòu)無法融合或結(jié)構(gòu)規(guī)整但內(nèi)容不合理的問題。
為減少數(shù)據(jù)表的獨立性對多表聯(lián)合運(yùn)行產(chǎn)生的限制,在SQL Server數(shù)據(jù)庫的全部數(shù)據(jù)表中將同類型數(shù)據(jù)表劃分到一起,形成若干個管理范圍,以加強(qiáng)同一管理范圍中數(shù)據(jù)表之間的關(guān)聯(lián)性。
將數(shù)據(jù)表整體劃分為聯(lián)合收獲機(jī)知識庫系統(tǒng)整機(jī)類數(shù)據(jù)表和聯(lián)合收獲機(jī)知識庫系統(tǒng)零部件類數(shù)據(jù)表。其中聯(lián)合收獲機(jī)知識庫系統(tǒng)整機(jī)類數(shù)據(jù)表包括“整機(jī)機(jī)型”、“標(biāo)準(zhǔn)”、“專利”、“典型地域”、“影響作業(yè)的土壤因素”中的全部數(shù)據(jù)表,聯(lián)合收獲機(jī)知識庫系統(tǒng)零部件類數(shù)據(jù)表包括“脫粒模塊”、“分離清選模塊”、“割臺模塊”、“輸送模塊”、“動力模塊”、“驅(qū)動模塊”、“輔助模塊”和“標(biāo)準(zhǔn)件模塊”中的全部數(shù)據(jù)表。
根據(jù)聯(lián)合收獲機(jī)知識類型劃分結(jié)果[17]將數(shù)據(jù)表分為實例類知識數(shù)據(jù)表、規(guī)則類知識數(shù)據(jù)表、資料類知識數(shù)據(jù)表、經(jīng)驗類知識數(shù)據(jù)表和參數(shù)類知識數(shù)據(jù)表5類,同類型數(shù)據(jù)表中的數(shù)據(jù)具有相似的特點和表現(xiàn)形式。
實例類知識描述了聯(lián)合收獲機(jī)零部件的型號信息、設(shè)計產(chǎn)品屬性、設(shè)計模型案例等信息。其中,零部件型號信息數(shù)據(jù)表中的數(shù)據(jù)縱向排列,每一列描述了該零部件的各種型號名稱,列與列之間描述的是不同類型的型號名稱。數(shù)據(jù)表中的每一列為一條記錄,用來描述一個對象的信息,列與列之間保持獨立、互不干擾,數(shù)據(jù)表中的每一行為一個字段,用來描述對象的屬性。實例類知識的其他信息數(shù)據(jù)表以及其余類型知識的數(shù)據(jù)表中的數(shù)據(jù)為橫向排列,其特點是數(shù)據(jù)表中的每一行為一條記錄,每一列為一個字段。橫向排列的數(shù)據(jù)表和縱向排列的數(shù)據(jù)表表現(xiàn)形式如圖3所示。
圖3 數(shù)據(jù)表中數(shù)據(jù)的排列形式示例
根據(jù)數(shù)據(jù)表中數(shù)據(jù)的排列情況將數(shù)據(jù)表分為數(shù)據(jù)為橫向排列的數(shù)據(jù)表和數(shù)據(jù)為縱向排列的數(shù)據(jù)表(以下簡稱為橫向數(shù)據(jù)表和縱向數(shù)據(jù)表)。數(shù)據(jù)排列情況相同的數(shù)據(jù)表具有相似的數(shù)據(jù)結(jié)構(gòu)分布。
根據(jù)數(shù)據(jù)表分類結(jié)果建立聯(lián)合收獲機(jī)知識庫數(shù)據(jù)存儲結(jié)構(gòu),如圖4所示。整個數(shù)據(jù)存儲結(jié)構(gòu)包含了聯(lián)合收獲機(jī)知識庫系統(tǒng)的全部數(shù)據(jù)表,數(shù)據(jù)表的多類型劃分使得該結(jié)構(gòu)具有可擴(kuò)展性,已有數(shù)據(jù)表可根據(jù)數(shù)據(jù)存儲結(jié)構(gòu)存入合適的位置,新增數(shù)據(jù)表可直接在該結(jié)構(gòu)上添加新的節(jié)點字段進(jìn)行存儲。數(shù)據(jù)存儲結(jié)構(gòu)為數(shù)據(jù)的存儲提供方便, 并為多表聯(lián)合運(yùn)行奠定基礎(chǔ)。
圖4 數(shù)據(jù)存儲結(jié)構(gòu)
本文將可以同時進(jìn)行數(shù)據(jù)存儲和查詢的一組數(shù)據(jù)表設(shè)置為一個管理范圍,管理范圍選取由同一模塊層次下的部分?jǐn)?shù)據(jù)表組成。在同一模塊層次的基礎(chǔ)上,選取類型和數(shù)據(jù)排列情況相同的數(shù)據(jù)表進(jìn)行組織整合,共形成54個數(shù)據(jù)管理范圍,如圖4虛線框所示。同類型數(shù)據(jù)表之間進(jìn)行聯(lián)合時能夠避免出現(xiàn)數(shù)據(jù)無法融合、數(shù)據(jù)融合后的內(nèi)容不合理的情況。數(shù)據(jù)排列情況相同的數(shù)據(jù)表之間進(jìn)行聯(lián)合能夠保證數(shù)據(jù)集結(jié)構(gòu)規(guī)整。因此同一管理范圍中的數(shù)據(jù)表之間結(jié)構(gòu)相似,內(nèi)容相關(guān),在對其中的數(shù)據(jù)進(jìn)行統(tǒng)一管理時能夠得到結(jié)構(gòu)規(guī)整、內(nèi)容合理的管理結(jié)果。
多表聯(lián)合運(yùn)行是指將任一管理范圍中的全部數(shù)據(jù)表中的數(shù)據(jù)提取出來形成數(shù)據(jù)集,并對數(shù)據(jù)集進(jìn)行調(diào)用的過程。多表聯(lián)合運(yùn)行主要是使用SQL語言實現(xiàn)。SQL語言是SQL Server數(shù)據(jù)庫的操作語言,能夠獨立完成SQL Server數(shù)據(jù)庫生命周期中的全部活動,包括錄入數(shù)據(jù)、建立數(shù)據(jù)庫、查詢、更新、維護(hù)等操作[18-19]。
實現(xiàn)多表聯(lián)合運(yùn)行首先需要提取管理范圍中的全部數(shù)據(jù)表中的所有數(shù)據(jù)及結(jié)構(gòu)信息,再將這些數(shù)據(jù)及結(jié)構(gòu)信息融合存儲到一起,達(dá)到對其統(tǒng)一調(diào)用的目的。橫向數(shù)據(jù)表與縱向數(shù)據(jù)表的結(jié)構(gòu)形式大不相同,因此橫向數(shù)據(jù)表之間與縱向數(shù)據(jù)表之間的聯(lián)合方式也存在差異。
橫向數(shù)據(jù)表是典型的SQL Server數(shù)據(jù)庫二維表格形式,橫向數(shù)據(jù)表之間的聯(lián)合是將各橫向數(shù)據(jù)表中數(shù)據(jù)進(jìn)行疊加的結(jié)果,形成的管理范圍數(shù)據(jù)集只變動數(shù)據(jù)行數(shù),不變動數(shù)據(jù)列數(shù)。橫向數(shù)據(jù)表中的數(shù)據(jù)及結(jié)構(gòu)信息的提取可使用SQL語言中的SELECT語句完成,其主要語法為[20]
SELECT [ALL/DISTINCT] 〈列名〉
FROM 〈數(shù)據(jù)表名稱〉
其中ALL關(guān)鍵字表示顯示所有行數(shù)據(jù),DISTINCT關(guān)鍵字表示去除提取信息的重復(fù)行數(shù)據(jù),默認(rèn)關(guān)鍵字為ALL。
提取一個橫向數(shù)據(jù)表中信息需使用一次SELECT語句,提取n個橫向數(shù)據(jù)表中的數(shù)據(jù)及結(jié)構(gòu)信息則需要使用n次SELECT語句。UNION關(guān)鍵字能夠連接各個SELECT語句,將各橫向數(shù)據(jù)表中的數(shù)據(jù)疊加起來組成一個多表聯(lián)合的數(shù)據(jù)集,該數(shù)據(jù)集包括這一管理范圍內(nèi)所有橫向數(shù)據(jù)表中的行數(shù)據(jù)。UNION關(guān)鍵字的使用方式為
SELECT [ALL/DISTINCT] 〈列名1〉
FROM 〈數(shù)據(jù)表名稱1〉
UNION[ALL]
SELECT [ALL/DISTINCT] 〈列名2〉
FROM 〈數(shù)據(jù)表名稱2〉
?
UNION關(guān)鍵字下的ALL關(guān)鍵字為可選關(guān)鍵字,若使用則輸出全部行數(shù)據(jù),若不使用則輸出管理范圍數(shù)據(jù)時將刪除橫向數(shù)據(jù)表之間存在的重復(fù)行數(shù)據(jù),默認(rèn)情況下是刪除數(shù)據(jù)表之間的重復(fù)行。UNION關(guān)鍵字在使用時,輸出的管理范圍數(shù)據(jù)集的結(jié)構(gòu)與第1個SELECT語句下的橫向數(shù)據(jù)表結(jié)構(gòu)相同,因此需要將各個橫向數(shù)據(jù)表的結(jié)構(gòu)聯(lián)合成一個能夠共用的結(jié)構(gòu),使管理范圍數(shù)據(jù)集輸出后結(jié)構(gòu)規(guī)整。
使用別名可以重新命名數(shù)據(jù)表列名,同一管理范圍內(nèi)的橫向數(shù)據(jù)表使用相同別名,則能夠?qū)崿F(xiàn)將各橫向數(shù)據(jù)表的列名統(tǒng)一,使各數(shù)據(jù)表擁有相同的結(jié)構(gòu),使用方法為
SELECT [ALL/DISTINCT] 〈列名1〉 ‘〈別名1〉’
FROM 〈數(shù)據(jù)表名稱1〉
UNION[ALL]
SELECT [ALL/DISTINCT] 〈列名2〉‘〈別名2〉’
FROM 〈數(shù)據(jù)表名稱2〉
?
橫向數(shù)據(jù)表之間的聯(lián)合利用SQL語言實現(xiàn),其形成的管理范圍數(shù)據(jù)集直接存儲在臨時表中。臨時表是臨時創(chuàng)建的、不能永久保存的表。臨時表僅對當(dāng)前的用戶連接可見,當(dāng)用戶從SQL Server 數(shù)據(jù)庫實例斷開連接時,即在事務(wù)完畢或會話完畢后自動刪除[21]。即用戶每次使用的數(shù)據(jù)集都是系統(tǒng)在用戶命令發(fā)出后立即調(diào)用相關(guān)數(shù)據(jù)形成的,系統(tǒng)無需對數(shù)據(jù)集進(jìn)行存儲操作,數(shù)據(jù)集生成后自行存儲于臨時表中。用戶對數(shù)據(jù)集使用完畢后,臨時表自行刪除。
縱向數(shù)據(jù)表不屬于SQL Server數(shù)據(jù)庫二維表格形式,其多表聯(lián)合是將各縱向數(shù)據(jù)表中的數(shù)據(jù)逐列疊加,形成的管理范圍數(shù)據(jù)集是列與列的集合,只疊加數(shù)據(jù)列數(shù),不變動數(shù)據(jù)行數(shù),無法使用UNION關(guān)鍵字連接各個縱向數(shù)據(jù)表。
縱向數(shù)據(jù)表之間的聯(lián)合是利用新建一個數(shù)據(jù)表的方式將各縱向數(shù)據(jù)表的結(jié)構(gòu)融合成新建數(shù)據(jù)表的結(jié)構(gòu),將各縱向數(shù)據(jù)表的數(shù)據(jù)疊加構(gòu)成新建數(shù)據(jù)表的數(shù)據(jù),該新建數(shù)據(jù)表即為這些縱向數(shù)據(jù)表對應(yīng)管理范圍的存儲形式。新建數(shù)據(jù)表需先創(chuàng)建數(shù)據(jù)表結(jié)構(gòu),再向結(jié)構(gòu)中填充數(shù)據(jù)。本文利用CREATE TABLE語句創(chuàng)建數(shù)據(jù)表結(jié)構(gòu),其語法為[22]
USE 〈數(shù)據(jù)庫名〉
GO
CREATE TABLE 〈新建數(shù)據(jù)表名〉 (
〈列名1〉 〈數(shù)據(jù)類型1〉 [NULL/NOT NULL],
〈列名2〉 〈數(shù)據(jù)類型2〉 [NULL/NOT NULL],
…)
使用USE關(guān)鍵字選擇數(shù)據(jù)庫,在該數(shù)據(jù)庫下利用CREATE TABLE語句創(chuàng)建數(shù)據(jù)表,明確新建數(shù)據(jù)表名并指出新建數(shù)據(jù)表中各列的列名、數(shù)據(jù)類型和該列是否允許為空。NULL和NOT NULL關(guān)鍵字,決定了該列能不能出現(xiàn)空值,默認(rèn)關(guān)鍵字為NULL。
數(shù)據(jù)表結(jié)構(gòu)創(chuàng)建好后,即可向新建數(shù)據(jù)表中填充數(shù)據(jù)。INSERT…SELECT語句可實現(xiàn)將各縱向數(shù)據(jù)表中的數(shù)據(jù)按列填充到新建數(shù)據(jù)表中,其語法為[23]
INSERT INTO〈新建數(shù)據(jù)表名(新建數(shù)據(jù)表列名)〉
SELECT〈縱向數(shù)據(jù)表列名〉
FROM〈縱向數(shù)據(jù)表名〉
各縱向數(shù)據(jù)表中的數(shù)據(jù)是按照SELECT關(guān)鍵字后的列排序依次提取得到一個結(jié)果集,并將該結(jié)果集中的數(shù)據(jù)按照INSERT INTO關(guān)鍵字后新建數(shù)據(jù)表的列排序依次插入到新建數(shù)據(jù)表中,因此INSERT INTO關(guān)鍵字后“新建數(shù)據(jù)表列名”的排列需要與SELECT關(guān)鍵字后“縱向數(shù)據(jù)表列名”的排列相對應(yīng)。
縱向數(shù)據(jù)表的多表聯(lián)合方式使其形成的管理范圍數(shù)據(jù)集中的數(shù)據(jù)無法自動根據(jù)縱向數(shù)據(jù)表中數(shù)據(jù)的變化而變化,在多表聯(lián)合運(yùn)行時無法保證其輸出結(jié)果的正確性和實時性。因此當(dāng)用戶在聯(lián)合收獲機(jī)知識庫系統(tǒng)中對某縱向數(shù)據(jù)表進(jìn)行知識的添加、修改或刪除操作后,該縱向數(shù)據(jù)表對應(yīng)的管理范圍數(shù)據(jù)集需要立即進(jìn)行數(shù)據(jù)的動態(tài)更新,保證管理范圍數(shù)據(jù)集與縱向數(shù)據(jù)表之間的數(shù)據(jù)同步。
在SQL Server數(shù)據(jù)庫中,對數(shù)據(jù)進(jìn)行更新可通過使用UPDATE語句來實現(xiàn),為將管理范圍數(shù)據(jù)集和縱向數(shù)據(jù)表之間的數(shù)據(jù)聯(lián)系起來并一一對應(yīng),在UPDATE語句中嵌入SELECT…FROM…WHERE結(jié)構(gòu)和SELECT…FROM結(jié)構(gòu),其整體語法為
UPDATE 〈管理范圍名〉
SET 〈管理范圍數(shù)據(jù)集列名〉=
(SELECT 〈縱向數(shù)據(jù)表列名〉
FROM 〈縱向數(shù)據(jù)表名〉
WHERE 〈管理范圍名〉.ID=〈縱向數(shù)據(jù)表名〉.ID )
WHERE 〈管理范圍名〉.ID
IN ( SELECT ID FROM 〈縱向數(shù)據(jù)表名〉 )
該語法先對SELECT…FROM…WHERE結(jié)構(gòu)進(jìn)行處理,獲取縱向數(shù)據(jù)表中的列數(shù)據(jù),其中WHERE關(guān)鍵字能夠令管理范圍數(shù)據(jù)集和縱向數(shù)據(jù)表通過ID號關(guān)聯(lián),再使用“=”將管理范圍數(shù)據(jù)集與縱向數(shù)據(jù)表的列一一對應(yīng)。緊接著對SELECT…FROM結(jié)構(gòu)進(jìn)行處理,獲得縱向數(shù)據(jù)表的各行ID號,并利用IN關(guān)鍵字將管理范圍數(shù)據(jù)集和縱向數(shù)據(jù)表的ID號對應(yīng),使兩者之間的行一一對應(yīng)。整個UPDATE語句可實現(xiàn)根據(jù)縱向數(shù)據(jù)表數(shù)據(jù)對管理范圍數(shù)據(jù)集任意列所有行數(shù)據(jù)的更新,即不論某列中的行數(shù)據(jù)變化了多少個,管理范圍數(shù)據(jù)集將更新該列的全部行數(shù)據(jù),以防止在數(shù)據(jù)同步過程中造成錯更、漏更。
但UPDATE語句只能對管理范圍數(shù)據(jù)集的已有行數(shù)進(jìn)行更新,若用戶對縱向數(shù)據(jù)表進(jìn)行添加數(shù)據(jù)行操作導(dǎo)致縱向數(shù)據(jù)表行數(shù)已經(jīng)多于管理范圍數(shù)據(jù)集行數(shù),則UPDATE語句只更新管理范圍數(shù)據(jù)集行數(shù)以內(nèi)的數(shù)據(jù),超出管理范圍數(shù)據(jù)集行數(shù)的縱向數(shù)據(jù)表數(shù)據(jù)將不作為更新內(nèi)容。因此在令管理范圍數(shù)據(jù)集與縱向數(shù)據(jù)表數(shù)據(jù)同步時,需先保證管理范圍數(shù)據(jù)集行數(shù)與縱向數(shù)據(jù)表行數(shù)一致。判斷管理范圍數(shù)據(jù)集行數(shù)與縱向數(shù)據(jù)表行數(shù)是否一致,可等同于判斷管理范圍數(shù)據(jù)集行數(shù)與各縱向數(shù)據(jù)表行數(shù)的最大值是否一致。
通過計算管理范圍數(shù)據(jù)集中的各縱向數(shù)據(jù)表行數(shù),取其最大值與管理范圍數(shù)據(jù)集行數(shù)作比較,若各縱向數(shù)據(jù)表行數(shù)的最大值已超過管理范圍數(shù)據(jù)集行數(shù),則將管理范圍數(shù)據(jù)集行數(shù)添加到與各縱向數(shù)據(jù)表行數(shù)的最大值一致后再對管理范圍數(shù)據(jù)集進(jìn)行更新,數(shù)據(jù)同步的流程如圖5所示。
圖5 數(shù)據(jù)同步流程圖
多表聯(lián)合運(yùn)行能夠調(diào)用多個數(shù)據(jù)表中的數(shù)據(jù),將這些數(shù)據(jù)進(jìn)行處理后可用于用戶的數(shù)據(jù)查詢上,使用戶在查詢時將查詢范圍從一個數(shù)據(jù)表擴(kuò)展到一個多表聯(lián)合運(yùn)行管理范圍數(shù)據(jù)集,實現(xiàn)對多個數(shù)據(jù)表數(shù)據(jù)的同時查詢。多表聯(lián)合查詢與聯(lián)合收獲機(jī)知識庫系統(tǒng)原有的知識查詢相比,這種查詢方式的查詢范圍中數(shù)據(jù)更多,獲得的查詢結(jié)果更全面。多表聯(lián)合查詢包括多表模糊查詢和多表精確查詢。
多表模糊查詢:用戶在人機(jī)交互界面上確定查詢范圍并通過輸入字符串表明查詢目標(biāo),系統(tǒng)在查詢范圍中查詢包含該字符串的數(shù)據(jù),并將數(shù)據(jù)所在數(shù)據(jù)行組成數(shù)據(jù)集作為查詢結(jié)果反饋給用戶。
多表精確查詢:在用戶非常明確自己的查詢目標(biāo)并對多表聯(lián)合運(yùn)行管理范圍數(shù)據(jù)集結(jié)構(gòu)有一定了解的情況下,用戶通過人機(jī)交互界面將查詢范圍縮小至多表聯(lián)合運(yùn)行管理范圍數(shù)據(jù)集中的某一列,以用戶自身需求為查詢條件,系統(tǒng)為用戶篩選與查詢條件完全匹配的數(shù)據(jù)。
多表聯(lián)合查詢的實現(xiàn)實質(zhì)上是用戶通過在人機(jī)交互界面上進(jìn)行點選或者輸入對聯(lián)合收獲機(jī)知識庫系統(tǒng)發(fā)出操作指令,系統(tǒng)將指令轉(zhuǎn)換為SQL語言,數(shù)據(jù)庫執(zhí)行SQL語言,將得到的查詢結(jié)果綁定到人機(jī)交互界面中的DataGridView控件上,DataGridView控件將查詢結(jié)果以表格形式顯示在人機(jī)交互界面上供用戶查看。本文主要使用SQL語言中的SELECT語句實現(xiàn)多表聯(lián)合查詢。SELECT語句不但可以在數(shù)據(jù)庫中模糊地查找?guī)в心稠椞卣鞯亩鄺l數(shù)據(jù),還可以精確地查找某條數(shù)據(jù)[24],SELECT語句的主要語法為
SELECT [ALL/DISTINCT] 〈列名〉
FROM 〈查詢范圍〉
WHERE 〈查詢條件〉
實現(xiàn)多表聯(lián)合查詢的技術(shù)路線如圖6所示。多表聯(lián)合查詢與知識庫系統(tǒng)相同,以Visual Studio平臺為開發(fā)工具,以.net為編程環(huán)境,實現(xiàn)多表聯(lián)合查詢的關(guān)鍵程序如圖7所示。
圖6 多表聯(lián)合查詢技術(shù)路線圖
圖7 多表聯(lián)合查詢程序框圖
4.2.1多表模糊查詢
多表模糊查詢的實現(xiàn)是通過在SELECT語句的WHERE子句中使用字符匹配符LIKE或NOT LIKE比較查詢目標(biāo)與查詢范圍中的數(shù)據(jù)是否部分匹配,將包含查詢目標(biāo)的數(shù)據(jù)所在行累積為數(shù)據(jù)集構(gòu)成查詢結(jié)果。具體語法格式為
WHERE 〈列名〉 [NOT] LIKE ‘〈比較字符串〉’
其中,比較字符串是由查詢目標(biāo)字符串連同通配符一起組合而成,表1列出了比較常用的通配符。
表1 常用的通配符及其含義
上文提到,橫向數(shù)據(jù)表形成的管理范圍數(shù)據(jù)集是存儲在臨時表中,即其在SQL Server數(shù)據(jù)庫中并無具體的數(shù)據(jù)表,因此在使用字符匹配符時可將其直接嵌入到構(gòu)成橫向數(shù)據(jù)表之間多表聯(lián)合的語法當(dāng)中,即
SELECT 〈列名〉 FROM 〈橫向數(shù)據(jù)表名1〉 WHERE 〈列名1〉 [NOT] LIKE ‘〈比較字符串1〉’
UNION
SELECT 〈列名〉 FROM 〈橫向數(shù)據(jù)表名2〉 WHERE 〈列名2〉 [NOT] LIKE ‘〈比較字符串2〉’
?
該語法既能夠展現(xiàn)面向橫向數(shù)據(jù)表的多表聯(lián)合運(yùn)行管理范圍數(shù)據(jù)集的數(shù)據(jù)構(gòu)成及結(jié)構(gòu)形式,又可實現(xiàn)針對橫向數(shù)據(jù)表的多表模糊查詢,減少了語句運(yùn)行過程中對各橫向數(shù)據(jù)表的訪問次數(shù),縮短了命令執(zhí)行時間。
由于縱向數(shù)據(jù)表形成的管理范圍數(shù)據(jù)集是存儲在SQL Server數(shù)據(jù)庫中的實際存在的數(shù)據(jù)表,因此針對縱向數(shù)據(jù)表的多表模糊查詢可直接在管理范圍數(shù)據(jù)集中運(yùn)行搭配有字符匹配符的SELECT語句實現(xiàn),即
SELECT 〈查詢范圍數(shù)據(jù)集列名〉
FROM 〈查詢范圍名〉
WHERE〈查詢范圍數(shù)據(jù)集列名〉 [NOT] LIKE ‘〈比較字符串〉’
4.2.2多表精確查詢
多表精確查詢的實現(xiàn)是利用SELECT語句中WHERE子句的比較運(yùn)算符將查詢目標(biāo)與數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行比較,篩選出存在與查詢目標(biāo)完全一致的數(shù)據(jù)的過程。比較運(yùn)算符包括=、<、>、<=、>=、<>和!=,分別表示等于、小于、大于、小于等于、大于等于、不等于和不等于,其語法格式為
WHERE 〈比較表達(dá)式1〉 〈比較運(yùn)算符〉 〈比較表達(dá)式2〉
比較表達(dá)式是符號字符串、函數(shù)、計算或任何算術(shù)運(yùn)算符連接的這些元素的組合,在語法中比較運(yùn)算符兩邊的比較表達(dá)式的數(shù)據(jù)類型必須保持一致。
針對橫向數(shù)據(jù)表的多表精確查詢與多表模糊查詢相同,直接將比較運(yùn)算符嵌入到構(gòu)成橫向數(shù)據(jù)表多表聯(lián)合的語法當(dāng)中,其語法為
SELECT 〈列名〉 FROM 〈橫向數(shù)據(jù)表名稱1〉 WHERE 〈比較表達(dá)式1〉 〈比較運(yùn)算符〉 〈比較表達(dá)式2〉
UNION
SELECT 〈列名〉 FROM 〈橫向數(shù)據(jù)表名稱2〉 WHERE 〈比較表達(dá)式3〉 〈比較運(yùn)算符〉 〈比較表達(dá)式4〉
?
針對縱向數(shù)據(jù)表的多表精確查詢是在管理范圍數(shù)據(jù)集中直接運(yùn)行搭配有比較運(yùn)算符的SELECT語句實現(xiàn),其語法為
SELECT 〈查詢范圍數(shù)據(jù)集列名〉
FROM 〈查詢范圍名〉
WHERE 〈比較表達(dá)式1〉 〈比較運(yùn)算符〉 〈比較表達(dá)式2〉
登錄聯(lián)合收獲機(jī)知識庫系統(tǒng)后在系統(tǒng)主界面訪問“知識瀏覽與查詢”,并依次選擇“知識查詢”/“多表聯(lián)合查詢”,如圖8所示,即可進(jìn)入“多表聯(lián)合查詢”界面,該界面根據(jù)數(shù)據(jù)存儲結(jié)構(gòu)以及管理范圍劃分結(jié)果進(jìn)行設(shè)計?!岸啾砺?lián)合查詢界面”包括多表近似范圍查詢界面和多表精準(zhǔn)定位查詢界面。其中,多表近似范圍查詢界面應(yīng)用的是多表模糊查詢方法,界面中供用戶選擇查詢范圍的目錄樹的設(shè)置是在數(shù)據(jù)管理范圍分布結(jié)構(gòu)的基礎(chǔ)上,將樹中的節(jié)點名稱由完全依照數(shù)據(jù)管理范圍名稱這種理論性較強(qiáng)的表達(dá)方式轉(zhuǎn)變?yōu)楦庇^、用戶更易判斷選擇的表達(dá)方式。例如數(shù)據(jù)存儲結(jié)構(gòu)中的分離清選模塊下的“規(guī)則類知識數(shù)據(jù)表”管理范圍在系統(tǒng)多表近似范圍查詢界面目錄樹中對應(yīng)的是“分離清選相關(guān)公式”節(jié)點。同時,多表精準(zhǔn)定位查詢界面應(yīng)用的是多表精確查詢方法,界面在數(shù)據(jù)存儲結(jié)構(gòu)的基礎(chǔ)上,設(shè)置“知識模塊”和“查詢范圍”選擇框指示用戶先指定查詢數(shù)據(jù)所在的聯(lián)合收獲機(jī)所在模塊,再選擇該模塊下的管理范圍作為查詢范圍,設(shè)置“列名”、“條件符號”和“數(shù)值/字符串”選擇框以供用戶根據(jù)所選查詢范圍確定查詢條件。
圖8 多表聯(lián)合查詢界面在系統(tǒng)中所處位置
聯(lián)合收獲機(jī)知識庫數(shù)據(jù)存儲結(jié)構(gòu)是集中式存儲結(jié)構(gòu),即用戶機(jī)通過給定局域網(wǎng)覆蓋范圍內(nèi)的路由器連接服務(wù)器,服務(wù)器統(tǒng)一管理、共享全部資源并處理來自客戶機(jī)的請求。
用戶機(jī)無需建立知識庫系統(tǒng)數(shù)據(jù)存儲結(jié)構(gòu),可通過連接系統(tǒng)中心服務(wù)器局域網(wǎng)獲取服務(wù)器中的數(shù)據(jù)存儲結(jié)構(gòu)。用戶在使用知識庫系統(tǒng)時調(diào)用的數(shù)據(jù)是由系統(tǒng)中心的服務(wù)器分享而來,系統(tǒng)發(fā)布的查詢命令在服務(wù)器中處理后將處理結(jié)果反映在客戶機(jī)上。
聯(lián)合收獲機(jī)知識庫系統(tǒng)為適應(yīng)實際應(yīng)用需求與應(yīng)用環(huán)境,具備3種運(yùn)行方式:①對于知識庫系統(tǒng)本身,作為一個完整系統(tǒng)可單獨運(yùn)行,用戶在局域網(wǎng)下連接服務(wù)器的網(wǎng)絡(luò)驅(qū)動器后,即可對該系統(tǒng)進(jìn)行訪問和應(yīng)用。②對于團(tuán)隊自主研發(fā)的支持聯(lián)合收獲機(jī)智能化設(shè)計的PDM系統(tǒng),由知識庫系統(tǒng)、模型庫系統(tǒng)、工程分析系統(tǒng)等子系統(tǒng)構(gòu)成,各子系統(tǒng)獨立完整、信息與數(shù)據(jù)共享,從該P(yáng)DM系統(tǒng)中的特定接口可對聯(lián)合收獲機(jī)知識庫系統(tǒng)進(jìn)行訪問,用戶的請求及服務(wù)器的處理結(jié)果通過接口進(jìn)行傳遞。③對于與企業(yè)現(xiàn)有PDM系統(tǒng)融合,實現(xiàn)資源補(bǔ)充與數(shù)據(jù)共享的需求情況,綜合考慮數(shù)據(jù)多表聯(lián)合查詢方法的通用性以及企業(yè)PDM系統(tǒng)的知識產(chǎn)權(quán)保護(hù)和有限接口的實際情況,本團(tuán)隊所研究的資源型系統(tǒng)均采用模塊化架構(gòu)。因此,采用系統(tǒng)封裝和調(diào)用的方法將數(shù)據(jù)多表聯(lián)合查詢方法應(yīng)用于企業(yè)PDM系統(tǒng)中,實施方案如下:將知識庫系統(tǒng)通過動態(tài)鏈接庫技術(shù)封裝,使用Microsoft Visual Studio Installer Project插件將知識庫系統(tǒng)進(jìn)行打包,通過程序調(diào)用直接啟動知識庫系統(tǒng)實現(xiàn)與企業(yè)PDM系統(tǒng)的聯(lián)合運(yùn)行。該方案既使知識庫系統(tǒng)與企業(yè)PDM系統(tǒng)相對獨立又將兩者有機(jī)聯(lián)合,充分利用了企業(yè)原有資源又賦予其新的功能,以滿足產(chǎn)品研發(fā)工作對資源重用越來越高的要求。
在“多表聯(lián)合查詢界面”中,當(dāng)用戶選擇查詢范圍后,系統(tǒng)將自動判斷該查詢范圍數(shù)據(jù)集是由橫向數(shù)據(jù)表形成還是由縱向數(shù)據(jù)表形成。
若系統(tǒng)判斷出用戶所選擇的查詢范圍數(shù)據(jù)集是由橫向數(shù)據(jù)表形成,系統(tǒng)會自行生成SQL語句來調(diào)用該管理范圍中的全部數(shù)據(jù)表中數(shù)據(jù)并將其聯(lián)合成一組數(shù)據(jù)集,隨后,把數(shù)據(jù)集存放在臨時表中并將其顯示在界面上。當(dāng)用戶選擇其他管理范圍或者切換界面后,系統(tǒng)自動斷開與管理范圍的連接,并刪除臨時表。
若系統(tǒng)判斷出用戶所選擇的查詢范圍數(shù)據(jù)集是由縱向數(shù)據(jù)表形成,系統(tǒng)會連接該管理范圍存儲在數(shù)據(jù)庫中的新建數(shù)據(jù)表,并調(diào)用該數(shù)據(jù)表中數(shù)據(jù)將其顯示在人機(jī)交互界面上。當(dāng)用戶選擇其他管理范圍或者切換界面后,系統(tǒng)自動斷開與管理范圍的連接,但不會刪除新建數(shù)據(jù)表,該數(shù)據(jù)表依舊存儲于數(shù)據(jù)庫中。
對多表聯(lián)合查詢功能效果進(jìn)行測試,測試根據(jù)系統(tǒng)的運(yùn)行環(huán)境于Windows 10操作系統(tǒng)上進(jìn)行,測試的計算機(jī)配置如表2所示。
表2 計算機(jī)配置
5.4.1近似范圍查詢效果比較
用戶進(jìn)入“多表聯(lián)合查詢界面”后選擇“近似范圍查詢”選項,獲取多表近似范圍查詢界面。在該界面中用戶首先需要在目錄樹上選擇查詢范圍,系統(tǒng)會調(diào)用該查詢范圍中的全部數(shù)據(jù)。緊接著,用戶在查詢文本框中輸入查詢目標(biāo),系統(tǒng)會自動生成查詢語句并將查詢結(jié)果顯示到界面上。
為檢驗多表近似范圍查詢的便捷高效性,以聯(lián)合收獲機(jī)知識庫系統(tǒng)數(shù)據(jù)存儲結(jié)構(gòu)中的分離清選模塊下的規(guī)則類知識數(shù)據(jù)表作為查詢范圍為例,即在描述分離清選裝置公式的全部數(shù)據(jù)表中開展查詢,將“高度”作為查詢目標(biāo),查詢與高度相關(guān)的公式。測試用戶選擇了解系統(tǒng)操作流程并可對系統(tǒng)進(jìn)行操作的普通設(shè)計人員,該用戶將先后使用聯(lián)合收獲機(jī)知識庫系統(tǒng)原有的單表近似范圍查詢功能和現(xiàn)開發(fā)的多表近似范圍查詢功能分別進(jìn)行查詢測試。單表近似范圍查詢時,系統(tǒng)進(jìn)入單表近似范圍查詢界面后用戶需分別選擇目錄樹中的分離裝置公式、風(fēng)扇式清選裝置公式和風(fēng)扇篩子式清選公式3個節(jié)點,系統(tǒng)在調(diào)用其對應(yīng)的數(shù)據(jù)表后用戶在界面的文本框中輸入查詢目標(biāo)字符串“高度”,系統(tǒng)最終將得到3個分散的查詢結(jié)果,其中系統(tǒng)在節(jié)點“風(fēng)扇式清選裝置公式”下的查詢結(jié)果如圖9所示。從用戶進(jìn)入單表近似范圍查詢界面進(jìn)行查詢操作開始到查詢結(jié)果全部逐一顯示在交互界面上為止,該用戶完成整個過程所需時間為31 s。在執(zhí)行多表近似范圍查詢功能時,用戶只需選擇多表近似范圍查詢界面目錄樹中的“分離清選相關(guān)公式”節(jié)點,并在查詢文本框中輸入“高度”即可得到查詢結(jié)果,系統(tǒng)多表近似范圍查詢結(jié)果如圖10所示。從用戶進(jìn)入多表近似范圍查詢界面進(jìn)行查詢操作開始到查詢結(jié)果顯示在交互界面上為止,完成整個過程所需時間為11 s。
圖9 單表近似范圍查詢在節(jié)點“風(fēng)扇式清選裝置公式”下的查詢結(jié)果
圖10 多表近似范圍查詢功能的查詢結(jié)果
本例中對比單表近似范圍查詢功能需在目錄樹上選擇3個節(jié)點并分別輸入3次查詢目標(biāo)字符串,多表近似范圍查詢功能只需在目錄樹上選擇1個節(jié)點并輸入1次查詢目標(biāo)字符串,既簡便了查詢操作過程,又將查詢時間縮短了將近2/3,且一次性得到了含有“高度”字符串的全部數(shù)據(jù)。
對聯(lián)合收獲機(jī)知識庫系統(tǒng)數(shù)據(jù)管理范圍進(jìn)行抽樣,將抽樣所得管理范圍對應(yīng)的類型數(shù)據(jù)表作為查詢范圍,將單表近似范圍查詢與多表近似范圍查詢的操作時間進(jìn)行對比,抽樣測試結(jié)果如表3所示。
表3 近似范圍查詢抽樣測試結(jié)果
測試結(jié)果顯示多表近似范圍查詢比單表近似范圍查詢的用戶操作時間減少50%及以上,最高節(jié)約時間90.4%。
5.4.2精準(zhǔn)定位查詢效果比較
用戶在進(jìn)入“多表聯(lián)合查詢界面”后選擇“精準(zhǔn)定位查詢”選項,獲取多表精準(zhǔn)定位查詢界面。用戶在界面上依次確定知識模塊、查詢范圍后系統(tǒng)自動將此查詢范圍中的全部數(shù)據(jù)以數(shù)據(jù)表的形式呈現(xiàn)在界面上,并將該查詢范圍的所有列名放置到列名選擇文本框中供用戶選擇要進(jìn)行查詢的具體列,用戶再依次確定查詢條件符號>、<、=、>=、<=以及與查詢范圍內(nèi)數(shù)據(jù)進(jìn)行比較的數(shù)值或字符串后開始查詢,系統(tǒng)即可自動生成查詢語句并將滿足查詢條件的數(shù)據(jù)行反饋在界面上。
為檢驗多表精準(zhǔn)定位查詢的便捷高效性,以聯(lián)合收獲機(jī)知識庫系統(tǒng)數(shù)據(jù)存儲結(jié)構(gòu)中的分離清選模塊下的實例類知識數(shù)據(jù)表作為查詢范圍為例,即在描述聯(lián)合收獲機(jī)機(jī)型的分離清選裝置參數(shù)的全部數(shù)據(jù)表中開展查詢,查詢機(jī)型為“4LZ-2.5”的數(shù)據(jù)。測試用戶與上述進(jìn)行近似范圍查詢測試的用戶為同一人,該用戶先后使用聯(lián)合收獲機(jī)知識庫系統(tǒng)單表精準(zhǔn)定位查詢功能和多表精準(zhǔn)定位查詢功能開展查詢測試。單表精準(zhǔn)定位查詢時,用戶在知識模塊“分離清選模塊”下,分別選擇數(shù)據(jù)表“風(fēng)扇篩子式清選裝置技術(shù)參數(shù)”、“風(fēng)扇式清選裝置技術(shù)參數(shù)”、“分離裝置技術(shù)參數(shù)”作為查詢范圍,查詢條件設(shè)置為查詢機(jī)型是“4LZ-2.5”的數(shù)據(jù),其中將“風(fēng)扇篩子式清選裝置技術(shù)參數(shù)”設(shè)置為查詢范圍時的查詢結(jié)果如圖11所示。從用戶進(jìn)入單表精準(zhǔn)定位查詢界面開始到完成所有查詢并得到查詢結(jié)果為止,該用戶完成整個查詢過程需執(zhí)行15個操作步驟,用時45 s。多表精準(zhǔn)定位查詢時,在界面上的選擇文本框中分別選擇“零部件分離清選模塊”/“分離清選裝置技術(shù)參數(shù)”/“機(jī)型”,此時條件符號這一欄的選擇文本框默認(rèn)為“=”且用戶不可修改,接著在數(shù)值/字符串文本框中輸入“4LZ-2.5”進(jìn)行查詢,即可得到系統(tǒng)查詢結(jié)果,如圖12所示,從用戶進(jìn)入多表精準(zhǔn)定位查詢界面進(jìn)行查詢操作開始到查詢結(jié)果顯示在交互界面上為止,該用戶完成整個過程需執(zhí)行5個操作步驟,用時14 s。
圖11 將“風(fēng)扇篩子式清選裝置技術(shù)參數(shù)”作為查詢范圍時的單表精準(zhǔn)定位查詢結(jié)果
圖12 系統(tǒng)中多表精準(zhǔn)定位查詢功能的查詢結(jié)果
對比兩種查詢方式分析得出:多表精準(zhǔn)定位查詢的查詢結(jié)果可將單表精準(zhǔn)定位查詢的結(jié)果全部涵蓋,兩者查詢結(jié)果內(nèi)容基本相同,僅在數(shù)據(jù)結(jié)構(gòu)中的列名上有所不同,但并不影響查詢結(jié)果的正確性。多表精準(zhǔn)定位查詢操作簡便,輸出的數(shù)據(jù)表結(jié)構(gòu)直觀明了、內(nèi)容正確無誤,在本例中相較于單表精準(zhǔn)定位查詢操作步驟節(jié)省時間80.5%。
參照近似范圍查詢抽樣測試過程,將單表精準(zhǔn)定位查詢與多表精準(zhǔn)定位查詢的操作時間進(jìn)行對比,抽樣測試結(jié)果如表4所示。
表4 精準(zhǔn)定位查詢抽樣測試結(jié)果
測試結(jié)果顯示,多表精準(zhǔn)定位查詢比單表精準(zhǔn)定位范圍查詢的用戶操作時間減少48.1%及以上,最高節(jié)約時間89.6%。
(1)以數(shù)據(jù)表類型劃分結(jié)果為基礎(chǔ)構(gòu)建的聯(lián)合收獲機(jī)知識庫數(shù)據(jù)存儲結(jié)構(gòu)具有可擴(kuò)展和數(shù)據(jù)管理集中的特點。其在保留單一數(shù)據(jù)表數(shù)據(jù)存儲形式的同時形成多表聯(lián)合數(shù)據(jù)存儲形式,是研究多表聯(lián)合查詢方法的基礎(chǔ)。
(2)多表聯(lián)合運(yùn)行將同一管理范圍中所有數(shù)據(jù)表的全部數(shù)據(jù)聯(lián)合成一個數(shù)據(jù)集,系統(tǒng)可對數(shù)據(jù)集進(jìn)行調(diào)用。將管理范圍作為多表聯(lián)合查詢功能的查詢范圍,使聯(lián)合收獲機(jī)知識庫系統(tǒng)具有了實用性與便捷性。
(3)多表近似范圍查詢比系統(tǒng)原有的單表近似范圍查詢節(jié)約用戶操作時間50%及以上,最高達(dá)到90.4%;多表精準(zhǔn)定位查詢比系統(tǒng)原有的單表精準(zhǔn)定位查詢節(jié)約用戶操作時間48.1%及以上,最高達(dá)到89.6%。多表聯(lián)合查詢可滿足用戶快速獲取所需查詢數(shù)據(jù)的需求,提高了數(shù)據(jù)的查詢效率。