龔顯卿 蒲實
摘 要 對信息進行方便快捷檢索是數(shù)據(jù)庫系統(tǒng)需要實現(xiàn)的一大重要功能。通過多重變量的使用,實現(xiàn)對多個字段進行模糊檢索功能,提高素材檢索效率,也有助于程序的模塊化設計。
關鍵詞 PowerBuilder;數(shù)據(jù)庫;字段;模糊檢索;多重變量;視音頻素材
中圖分類號:G642 文獻標識碼:B
文章編號:1671-489X(2018)10-0039-03
Realization of Multi-field Fuzzy Retrieval about Video Audio Material based on PB//GONG Xianqing, PU Shi
Abstract Convenient and quick retrieval of information is an impor-
tant function of database system. In this paper, the fuzzy retrieval function of multiple fields is realized through the use of multiple variables, which improves the efficiency of the material retrieval and
the modular design of the program.
Key words PowerBuilder; database; filed; fuzzy retrieval; multiple variables; video audio material
1 前言
隨著教育信息化的深入發(fā)展,“只管數(shù)據(jù)采集不顧數(shù)據(jù)維護的粗放式管理模式比較普遍”[1],為了解決這樣的現(xiàn)象,人們需要設計和實現(xiàn)多種多樣的信息管理系統(tǒng),對越來越多的教育教學信息進行管理。信息管理系統(tǒng)的一大主要功能就是方便人們對信息進行查詢,以便對信息再利用。在對信息進行查詢過程中,系統(tǒng)用戶并不總是能準確知道所要查詢信息的準確屬性。以一個視頻素材為例,用戶可能不知道它的準確名稱、格式、上傳者、上傳日期、主要內(nèi)容等。針對這樣的情況,信息管理系統(tǒng)應當提供多種查詢方式供用戶選擇:1)單一字段的模糊檢索;2)多個字段的模糊檢索。本文以醫(yī)學視聽教材為例,實現(xiàn)對視聽教材的多字段模糊檢索,提高教材的檢索效率。
2 PowerBuilder及其數(shù)據(jù)過濾功能
PowerBuilder(下面簡稱“PB”)采用面向?qū)ο缶幊碳夹g和可視化技術,程序設計人員可以直觀地進行程序設計。PB提供了眾多的畫板,如應用程序畫板、數(shù)據(jù)庫畫板、數(shù)據(jù)窗口畫板等,設計人員通過這些畫板進行程序設計。
數(shù)據(jù)窗口(Data Window)是PB獨有的一大特色。通過數(shù)據(jù)窗口,設計人員可以便捷地訪問后臺數(shù)據(jù)庫獲取數(shù)據(jù),并通過不同的顯示風格將數(shù)據(jù)在應用程序窗口中顯示出來。使用數(shù)據(jù)窗口需要先新建某種風格的數(shù)據(jù)窗口對象,如Grid風格數(shù)據(jù)窗口對象,再為數(shù)據(jù)窗口對象選擇數(shù)據(jù)源[2-5]。
PB數(shù)據(jù)過濾的基本方法 PB可以對數(shù)據(jù)窗口或數(shù)據(jù)存儲過程設置數(shù)據(jù)過濾規(guī)則。其過濾的實現(xiàn)分為兩步:第一步設置過濾規(guī)則;第二步進行數(shù)據(jù)過濾。以數(shù)據(jù)窗口過濾為例,其實現(xiàn)過程為:
Integer dw_control.setfilter (string format)
integer dw_control.filter()
其中“dw_control”為數(shù)據(jù)窗口,“string format”為過濾規(guī)則。過濾規(guī)則為一條字符串,如“student_name=李四”;也可以是一個變量,但這個變量的值必須為一個字符串。以下兩種過濾方式等價。
方式一:
dw_1.setfilter( "student_name=李四")
dw_1.filter()
方式二:
string s_name
s_name="student_name=李四"
dw_1.setfilter(s_name)
dw_2.filter()
多重變量過濾規(guī)則 在實際應用中,一個字段的值是在其值域范圍內(nèi)變化的,如學生的姓名可能是“張三”,也可能是“李四”,用戶在進行檢索時根據(jù)自己的需要輸入檢索姓名。這反應在程序開發(fā)中是對一個變量進行檢索。在PB中,在字符串中引用變量需要在變量前、后添加“+”號,例如:
string s_name,s_name_filter
s_name=sle_1.text
s_name_filter="student_name='"+ s_name +" '"
dw_1.setfilter(s_name_filter)
dw_1.filter()
上例中用戶在“sle_1”文本框中輸入需要查詢的學生姓名,保存在字符串變量“s_name”中。PB對在字符串中引用變量的格式有嚴格要求,其順序為:單引號,雙引號,“+”號,空格,變量名,空格,“+”號,雙引號,空格,單引號。如果出現(xiàn)錯誤,過濾規(guī)則將設置失敗。
模糊檢索 如前文所述,用戶在進行檢索時并不一定準確知道學生的姓名,可能僅知道其姓名中的一部分,所以在程序開發(fā)過程中實現(xiàn)對字段的模糊檢索是信息管理系統(tǒng)一個主要功能,能夠極大地提高系統(tǒng)的實用性和用戶體驗。PB中可以使用“%”符號來代替不確定的字符,通過“l(fā)ike”關系操作符來匹配用戶指定的不完整的檢索參數(shù),例如:
string s_name,s_name_filter
s_name=sle_1.text
s_name_filter="student_name like '%"+s_name+"%'"
dw_1.setfilter(s_name_filter)
dw_1.filter()
3 視音頻素材的關系模式
在關系數(shù)據(jù)庫中對素材的檢索是基于素材的屬性實現(xiàn)的,在進行數(shù)據(jù)庫設計時,對于素材屬性的抽象應該緊密結(jié)合實際使用需求,不是越多越好、越細越好。在醫(yī)學視音頻素材實際使用中,師生更習慣于按照素材的學科分類、素材名稱、素材上傳者、教材出版社、素材內(nèi)容(基于文字描述)等關鍵詞對教材進行檢索。視音頻素材的實體—聯(lián)系(E-R)模型如圖1所示。
在視音頻素材關系中,素材編號為主鍵,唯一標識關系中的一個記錄,“素材類型”的值域為“D={學校資料,教學資料,學術報告,文娛晚會}”?!八夭脑合怠钡闹涤驗閷W校內(nèi)設有的行政機構(gòu)、教學院系,“素材科室”為學校各行政機構(gòu)、教學院系下對應的科室、專業(yè)。之所以按照學校專業(yè)設置對素材進行分類,而不嚴格按照醫(yī)學學科分類,一是為了符合學校實際,避免大而全的分類方式;二是為了兼顧學術講座、院系學術會議等其他類別視音頻資料的保存?!八夭膬?nèi)容”是對視音頻素材內(nèi)容的文字描述。
4 多字段模糊檢索的實現(xiàn)
為提高用戶對系統(tǒng)的使用體驗,用戶可以對素材的“素材名稱”“出版社”“素材上傳者”“素材審核者”“素材類別”“素材院系”“素材科室”“素材上傳日期”“素材內(nèi)容”等條件進行單獨檢索,也可以對以上條件進行組合檢索。檢索界面設計如圖2所示。
檢索界面左側(cè)為檢索條件輸入。“素材名稱”“出版社”“素材上傳者”“素材審核者”“素材內(nèi)容”為文本輸入,“素材類別”“素材院系”“素材科室”“素材上傳日期”為下拉列表,用戶在列表中選擇查詢條件。為“查詢”按鈕編輯查詢程序,當用戶點擊查詢時,按用戶指定的查詢條件對素材進行查詢。
//定義查詢變量
sc_mc=sle_1.text
sc_cbs=sle_2.text
sc_scz=sle_3.text
sc_shz=sle_4.text
sc_lb=ddlb_1.text
sc_yx=ddlb_2.text
sc_ks=ddlb_3.text
sc_date_q=ddlb_4.text
sc_date_z=ddlb_5.text
sc_nr=sle_5.text
if isnull(sc_mc)=true then //如果用戶沒有指定“素材名稱”
chaxun_tiaojian_mc="sc_name like '%'"
else //如果用戶指定了“素材名稱”
chaxun_tiaojian_mc="sc_name like '%"+sc_mc+"%'"
end if
if isnull(sc_date_q)=true then //如果沒有設置查詢“起始日期”
sc_date_q=string(1980-01-01)
else //如果設置了查詢“起始日期”
sc_date_q=sc_date_q+"-01"+"-01"
end if
if isnull(sc_date_z)=true then //如果沒有設置查詢“終止日期”
sc_date_z=string(today())
else //如果設置了查詢“終止日期”
sc_date_z=sc_date_z+"-12"+"-31"
end if
chaxun_tiaojian_date="sc_date>=date('"+sc_date_q+"') and & t_sucai_shangchuan_sucai_date<=date('"+sc_date_z+"')"
//其他查詢條件設置
dw_1.setfilter("("+chaxun_tiaojian_mc+") and &
("+chaxun_tiaojian_czcbs+") and &
("+chaxun_tiaojian_scz+") and&
("+chaxun_tiaojian_shz+") and&
("+chaxun_tiaojian_lb+") and&
("+chaxun_tiaojian_yuanxi+") and &
("+chaxun_tiaojian_ks+") and &
("+chaxun_tiaojian_ms+") and("+chaxun_tiaojian_date+")")
dw_1.filter()
r_count=dw_1.retrieve()
for i=0 to r_count step 1
//在數(shù)據(jù)窗口中顯示檢索到的素材
next
如果需要在存儲過程中對數(shù)據(jù)進行過濾,需要先定義一個存儲過程,然后對該存儲過程設置過濾規(guī)則。
datastore ds_sc_video
ds_sc_video=create datestore
ds_sc_video.dataobject="d_sc_video"
ds_sc_video.setfilter(查詢條件)
ds_sc_video.filter()
r_count=ds_sc_video.retrieve()
for i=0 to r_count step 1
//在數(shù)據(jù)窗口中顯示檢索到的素材
next
5 結(jié)束語
數(shù)據(jù)庫應用系統(tǒng)的開發(fā)應注重系統(tǒng)的實用性,提高用戶使用體驗。本文所提出的多字段模糊檢索功能通過多重變量的使用實現(xiàn)了對多個字段的模糊檢索,這在程序設計中有助于程序的模塊化設計,在實際使用中也提高了素材的檢出率,得到用戶的好評。
參考文獻
[1]教育信息化“十三五”規(guī)劃[DB/OL].[2016-06-07].http://www.moe.edu.cn/srcsite/A16/s3342/201606/t2016
0622_269367.html.
[2]郭新順.基于PowerBuilder數(shù)據(jù)窗口的查詢方法研究[J].計算機應用與軟件,2006,23(5):76-77,110.
[3]華銓平.PowerBuilder程序設計[M].北京:清華大學出版社,2004.
[4]劉大本.PowerBuilder程序設計教程[M].北京:中國水利水電出版社,2004.
[5]王艷青.PowerBuilder程序設計基礎[M].北京:中國水利水電出版社,2006.