汪 洋
(安慶師范大學(xué)計(jì)算機(jī)與信息學(xué)院,安徽安慶246133)
SQL語(yǔ)言中沒有全稱量詞和邏輯蘊(yùn)含[1](本文將帶有全稱量詞和邏輯蘊(yùn)含的查詢稱為復(fù)雜查詢),實(shí)踐中,必須將復(fù)雜查詢變換為等價(jià)的帶有存在量詞的謂詞查詢[2],這一過程對(duì)于數(shù)據(jù)庫(kù)初學(xué)者是一個(gè)不小的挑戰(zhàn)。作者在多年數(shù)據(jù)庫(kù)教學(xué)實(shí)踐的反思和探索下,借助謂詞演算語(yǔ)言ALPHA將復(fù)雜查詢進(jìn)行等價(jià)變換,生成SQL語(yǔ)句,過程簡(jiǎn)單清晰,易為初學(xué)者所理解和掌握。
圖1 基于ALPHA語(yǔ)言的復(fù)雜查詢SQL語(yǔ)句生成框架
本文提出的復(fù)雜查詢的SQL語(yǔ)句生成框架如圖1所示。
首先將復(fù)雜查詢用ALPHA語(yǔ)言進(jìn)行表示, 然后利用邏輯謂詞等價(jià)變換理論,將ALPHA語(yǔ)句中的全稱量詞和邏輯蘊(yùn)含進(jìn)行等價(jià)變換,最后再使用ALPHA語(yǔ)言查詢語(yǔ)句向SQL語(yǔ)句變換生成算法生成SQL語(yǔ)言查詢。
SQL語(yǔ)言沒有全稱量詞,只能把帶有全稱量詞的謂詞變換為等價(jià)的帶有存在量詞的謂詞[3-4]。
(1)式語(yǔ)義解釋:對(duì)于所有的x,P都成立等價(jià)于不存在一個(gè)x,P不成立。
SQL語(yǔ)言也沒有邏輯蘊(yùn)含謂詞和運(yùn)算,可以利用謂詞演算將邏輯蘊(yùn)含謂詞進(jìn)行等價(jià)變轉(zhuǎn):
(2)式語(yǔ)義解釋:p則q等價(jià)于非p或q。
如果查詢要求中既有全稱量詞,又有邏輯蘊(yùn)含,則可進(jìn)行下面的等價(jià)變換。
(3)式語(yǔ)義解釋:對(duì)于所有的y,p則q,等價(jià)于不存在這樣的y,p成立而q不成立。
關(guān)系演算以數(shù)理邏輯中的謂詞演算為基礎(chǔ),分成元組關(guān)系演算和域關(guān)系演算兩類,ALPHA語(yǔ)言是一種典型的元組關(guān)系演算語(yǔ)言,它以元組變量作為謂詞變?cè)猍1]。本節(jié)以文獻(xiàn)[1]第70頁(yè)的數(shù)據(jù)庫(kù)作為示例數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)關(guān)系如圖2所示,設(shè)計(jì)了2個(gè)例子,例1是帶有全稱量詞的查詢,而例2是既有全稱量詞又有邏輯蘊(yùn)含的復(fù)雜查詢。先闡述用元組關(guān)系演算ALPHA語(yǔ)言表示復(fù)雜查詢要求,再利用謂詞變換理論進(jìn)行等價(jià)的謂詞變換。
例1查詢供應(yīng)了全部零件的供應(yīng)商姓名。首先用AHPHA語(yǔ)言將例1查詢表示為:
然后,用(1)式將上述語(yǔ)句進(jìn)行等價(jià)變換為:
圖2 示例數(shù)據(jù)庫(kù)關(guān)系圖
(4)式語(yǔ)義解釋為查詢這樣的供應(yīng)商的姓名,不存在一種零件,該供應(yīng)商沒有供應(yīng)該零件。
例2 查詢至少供應(yīng)了S1供應(yīng)商所供應(yīng)的全部零件的供應(yīng)商代碼。
先用AHPHA語(yǔ)言將例2查詢表示為:
再用(3)式將上述語(yǔ)句進(jìn)行等價(jià)變換:
(5)式語(yǔ)義解釋:查詢這樣的供應(yīng)商的代碼,不存在一種零件,S1供應(yīng)商供應(yīng)了該零件,而該供應(yīng)商沒有供應(yīng)這種零件。
Step 1:將變換后的ALPHA工作空間中的表達(dá)式表名.屬性名轉(zhuǎn)換為SELECT屬性名FROM表名;
Step 2:將?轉(zhuǎn)換為WHERE EXISTS,??轉(zhuǎn)換為WHERENOTEXISTS;
Step 3:將元組變量轉(zhuǎn)換為SELECT*FROM表名表別名(其中表名為定義元組變量的表名,表別名為元組變量名);
Step 4:∧轉(zhuǎn)換為AND,∨轉(zhuǎn)換為OR。
經(jīng)過上述算法轉(zhuǎn)換,例1的(4)式可轉(zhuǎn)換為下面的SQL語(yǔ)句:
為解決數(shù)據(jù)庫(kù)理論初學(xué)者編寫復(fù)雜查詢SQL語(yǔ)句的困難,作者在多年數(shù)據(jù)庫(kù)教學(xué)實(shí)踐研究中,探索出一個(gè)復(fù)雜查詢的SQL語(yǔ)句生成方法,借助謂詞演算語(yǔ)言ALPHA將復(fù)雜查詢進(jìn)行了等價(jià)變換,學(xué)習(xí)者只需按該方法進(jìn)行簡(jiǎn)單的ALPHA語(yǔ)言符號(hào)向SQL語(yǔ)句的轉(zhuǎn)換,即可生成復(fù)雜查詢的SQL語(yǔ)句,該過程簡(jiǎn)單清晰,易為初學(xué)者理解和掌握。該方法在多年的教學(xué)實(shí)踐中得到了檢驗(yàn),并取得了較好的教學(xué)效果。