3.1 系統設計
3.1.4 語法指令代換規則建立
結構化查詢語言有許多的語法組合可以產生完全相同的結果,例如資料庫的關 聯式代數中有結合律、交換律、分配律等特性可以運用,透過這些規則可以將一個 查詢指令組合轉換成另一個結果完全相同的查詢指令組合,此部分的語法指令代換 規則可用於查詢最佳化的處理運算,並提供給學習者作為輔助學習的資訊。
為了提供給學習者較好的語法學習建議,本研究所建構的診斷系統中有設置推 論機制,當學習者所輸入的語法經過語法剖析模組及語意剖析模組確認無誤之後,
再經由本推論機制分析是否需要提供較佳解答給學習者,以下將介紹本推論機制的 規則。
為了分析學習者輸入的語法,本推論機制的規則將使用資料庫中的關聯式代數 來作為分析的工具,分析的步驟如下。
一、將學習者輸入的語法轉換成關聯式代數。
二、將轉換好的關聯式代數與推論機制中的規則作比對,判斷是否有符合的推論規 則。
三、若有符合之規則,則將關聯式代數代換成較佳的語法,再將其轉換成 SQL 語 法,傳送至訊息彙整模組;若無符合之規則,則不提供較佳語法建議傳至訊息 彙整模組。
資料庫關聯式代數有結合律、交換律、分配律等三種特性,本研究之代換規則 將依照下列特性進行推論,表 3.3 為關聯式代數的符號定義。
表 3.3 關聯式代數之符號定義
定義名稱 表示符號
關聯表名稱 Ri,i=1,...,n
合併條件 p,q
條件式 Ci,i=1,…,n
選擇運算符號 σ
合併運算
表 3.3 關聯式代數之符號定義(續)
定義名稱 表示符號
聯集運算 ∪
交集運算 ∩
乘積運算 ×
一、結合律(associativity)
1. (R1∪R2)∪R3=R1∪(R2∪R3) 2. (R1×R2)×R3=R1×(R2×R3) 3. (R1 ∩ R2)∩R3=R1 ∩(R2∩R3)
4. (R1 p R2) q R3=R1 p(R2 q R3) 二、交換律(commutativity)
1. R1∩R2=R2∩R1
2. R1∪R2=R2∪R1
3. R1×R2=R2×R1
4. R1 R2=R2 R1
三、分配律(distributivity)
1. σC1 AND C2(R1)=σC1(R1)∩σC2(R1) 2. σC1 OR C2(R1)=σC1(R1)∪σC2(R1) 3. σnot(C1)(R1)=R1-σC1(R1)
表 3.4 推論規則之符號定義
定義名稱 表示符號
屬性名稱 ai,i=1,…,n
屬性清單 list,list={a1,a2,…,an} 關聯表名稱 Ri,i=1,…,n
條件式 Ci,i=1,…,n
條件值 χ
根據先導實驗所整理出的資訊及上述所提到關聯式代數的結合律、交換律、分 配律等特性,符號定義如表 3.4 所示,本推論機制所提供的代換規則有以下五種類 別。
一、OR 指令與聯集之間的代換
例:SELECT list FROM R1 WHERE C1 OR C2。
=SELECT list FROM R1 WHERE C1 UNION SELECT list FROM R1 WHERE C2。
轉換成關聯式代數 Πlist(σC1 OR C2(R1))。
=Πlist(σC1(R1))∪Πlist(σC2(R1))。 二、AND 指令與交集之間的代換
例:SELECT list FROM R1 WHERE C1 AND C2。
=SELECT list FROM R1 WHERE C1 INTERSECT SELECT list FROM R1
WHERE C2。
=SELECT list FROM R1 WHERE C1 EXCEPT (SELECT list FROM R1 WHERE C1 EXCEPT(SELECT list FROM R1 WHERE C2))。
=SELECT list FROM R1 WHERE C2 EXCEPT (SELECT list FROM R1 WHERE C2 EXCEPT(SELECT list FROM R1 WHERE C1))。
轉換成關聯式代數
Πlist(σC1 AND C2(R1))。
=Πlist(σC1(R1))∩Πlist(σC2(R1))。
=Πlist(σC1(R1))-(Πlist(σC1(R1))-Πlist(σC2(R1)))。
=Πlist(σC2(R1))-(Πlist(σC2(R1))-Πlist(σC1(R1)))。 三、ORDER BY 指令與聚合函數中的 MAX 及 MIN 函式的代換
由於 ORDER BY 與 TOP 指令在關聯式代數裡沒有符號,本推論機制自行定義 符號如下。
ORDER BY 或 ORDER BY ASC:↑
ORDER BY DESC:↓
TOP # :「T#」
例:SELECT list FROM R1 WHERE a1=(SELECT MAX(a1)FROM R1)。
=SELECT TOP 1 list FROM R1 ORDER BY a1 DESC。
轉換成關聯式代數
Πlist(σa1=(ℑ MAX a1(R1))(R1))。
=Πlist(「T1」↑a1(R1))。
例:SELECT list FROM R1 WHERE a1=(SELECT MIN(a1)FROM R1)。
=SELECT TOP 1 list FROM R1 ORDER BY a1。 轉換成關聯式代數
Πlist(σa1=(ℑ MIN a1(R1))(R1))。
=Πlist(「T1」↓a1(R1))。 四、IN 指令與=之間的代換
例:SELECT list FROM R1 WHERE a1=χ。
=SELECT list FROM R1 WHERE a1 IN(SELECT a1 FROM R1 WHERE a1= χ)。
轉換成關聯式代數 Πlist(σa1=χ(R1))。
=Πlist(σa1=(Πa1(σa1= χ(R1)))(R1))。 五、NOT IN 指令與<>之間的代換
例:SELECT list FROM R1 WHERE a1<>χ。
=SELECT listFROM R1 WHERE a1 NOT IN(SELECT a1 FROM R1 WHERE a1= χ)。
轉換成關聯式代數 Πlist(σa1<>χ(R1))。
=Πlist(σa1=χ(R1))-Πa1(σa1=χ(R1))。