第四章 查詢拆解與條件組合
4.3 條件組合
查詢關鍵字轉換成查詢處理單位格式後,必須將各個查詢條件單位進行邏輯 運算組合。所以我們對查詢條件單位設計了一個給定括弧的機制,訂定一些比對 規則判定查詢條件以邏輯運算子組合運算優先順序,決定最後查詢條件的組合。
在處理上,我們分為兩個階段處理步驟,方法敘述以下。
[第一階段處理]
在本論文 1.2 研究範圍與限制提到。假設資料庫綱目設計上,是採用第一正 規化設計,其規則是滿足「每個欄位只能含有一個屬性值」的條件。因此在本研 究不考慮一個欄位有多重屬性值的因素,以上為該研究處理方法之前提。
在第一階段處理,系統會先將查詢關鍵字依序掃描一遍,取得每個查詢關鍵 字所對應的屬性欄位和整個查詢關鍵字的屬性欄位順序性。例如:查詢關鍵字
{black or blue and 4 doors Honda}所對應的屬性欄位順序依序為{color, color, door , model},如表 4.6 所示。在掃描的過程中,偵測是否有連續相同屬性被指定兩個 不同屬性值條件的情況,我們稱為平行條件(parallel condition)的存在,例如:查 詢關鍵字{red or blue}所對應到的查詢條件單位格式為{<color,red> or
<color,blue>}。我們認為查詢中出現平行條件的情況下,使用者的查詢意圖是對 資料給定多個可能的查詢條件。而不是要同時成立的兩個查詢條件,因此在給定 括弧會優先處理具有平行條件的查詢條件單位。我們認為平行條件有兩種情形:
(1)重複屬性、(2)重複屬性樣式。以下我們將介紹此兩種情形的平行條件。
表 4.6 查詢關鍵字屬性欄位順序性範例
<1> 重複屬性(Repeating Attribute)
重複屬性意指在查詢關鍵字中連續的兩個查詢條件單位,所對應到的屬性欄 位都為相同屬性。例如:查詢關鍵字{red or blue}所對應到的查詢條件單位格式為
{<color,red> or <color,blue>}。“red”和“blue”這兩個查詢條件單位所對應到的 屬性欄位皆為“color”。在此情況下,我們會先行將這兩個查詢條件單位前後分
format <color, red> <color, blue> <door , 2>
Predicate
format ( P1 or P2 ) and P3
<2> 重複屬性樣式(Repeating Attribute Pattern)
重複屬性樣式相較於重複屬性,不只有一個查詢條件單位,而是以形成連續 Keyword
Query black or blue and 4 doors Honda a-v pairs
format <color, red> <color, blue> <door , 2> <model , Honda>
多個查詢條件單位,重複樣式(Repeating Pattern)為單位。例如:查詢關鍵字{black
and 4 or blue and 2}所對應到的查詢條件單位格式為{<color,black> and <doors,4>
or <color,blue> and <doors,2> }。而“black”、“4” 和“blue”、“2”,這兩個 樣式所對應到的屬性樣式皆為“color”-“door”。在此情況下,我們會先分別將 這形重複樣式的查詢條件單位前後個別給予括弧,再將這兩組樣式查詢條件單位 樣式前後給予括弧,該範例處理結果如表 4.8 所示。
表 4.8 查詢條件單位之重複屬性樣式範例
[第二階段處理]
在此階段將第一階段處理過程後尚未被括弧處理的查詢條件單位,進行第二 階段的括弧處理。我們所訂定的優先順序依據為(1)對應之屬性欄位在同一個資料 表中、(2)對應之資料表間的鍵結距離、(3)邏輯運算子優先順序、(4)組合運算由 左而右,以下我們將分別介紹該四種優先順序依據。
<1> 對應之屬性欄位在同一個資料表中
我們認為屬於同一個資料表的欄位,應該是有關聯的條件組合,因此在第二 階段的處理中,關鍵字所對應的屬性欄位在同一張資料表當中者優先加上括弧處
Keyword
Query black and 2 doors or blue and 2 doors a-v pairs
format <color, red> <door , 2> <color, blue> <door , 2>
Predicate
format ( ( P1 and P2 ) or ( P3 and P4 ) )
理。例如:查詢關鍵字{Civic or mileage > 20 or price < 15000}所對應到的查詢條 件單位格式為{<model,Civic> or <mileage,20> or <price,15000> }。三個查詢條件 單位分別為 P1:<model,Civic>、P2:<mileage,20>、P3:<price,15000>。其中 P2:
<mileage,20>和 P3:<price,15000>所對應的屬性欄位 mileage、price 都是在資料表 Detail 中。而 P1:<model,Civic>和 P2:<mileage,20>所對應的屬性欄位 model、
mileage 是在兩個不同的資料表 Models 和 Detail 中。所以 P2、P3 這兩個查詢條 件單位組合的優先順序會高於 P1、P2 查詢條件單位組合。該範例如表 4.9 所示。
表 4.9 查詢條件單位對應在同一屬性範例
Keyword
Query Civic or mileage > 20 or price < 15000 a-v pairs
format <model, Civic> <mileage, 20> <price, 15000>
Predicate
format P1 or ( P2 or P3 )
<2> 對應之資料表間的鍵結距離
若兩個查詢條件單位各自所對應的屬性欄位不是在同一張資料表,接著就依 兩個查詢條件單位對應之資料表間的鍵結距離作為條件結合的優先判斷,鍵結距 離小的,括弧組合的優先順序為前。例如:查詢關鍵字{ price < 20000 and Ford and
Mustang }所對應到的查詢條件單位格式為{<price,20000> and <make,Ford> and
<model,Mustang> }。三個查詢條件單位分別為 P1:<price,20000>、P2:<make,Ford>、
P3:<model,Mustang>。其中 P2:<make,Ford>和 P3:<price,20000>所對應的屬性
欄位 mileage、price 所對應到的資料表 Manufactures、Models 只有一層的鍵結關 係,而 P1:<price,20000>和 P2:<make,Ford>對應到的資料表 Details、Manufactures 是兩層的鍵結關係。所以 P2、P3 這兩個查詢條件單位組合的優先順序會高於 P1、
P2 查詢條件單位組合。該範例處理結果如表 4.10 所示。
表 4.10 查詢條件單位對應之資料表間鍵結距離範例
Keyword
Query price < 15000 and Ford and Mustang a-v pairs
format <price, 15000> <make, Ford> <model, Mustang>
Predicate
format P1 and ( P2 and P3 )
<3> 邏輯運算子優先順序
若查詢條件單位間括弧的優先順序都在同一層級的狀況下,則取決於兩者的 之間的邏輯運算子:邏輯 and 的優先順序會高於邏輯 or。例如:查詢關鍵字
{ manufactured,2012> or <mileage,20> and <price,15000>}所對應到的查詢條件單 位格式為{<manufactured,2012> or <mileage,20> and <price,15000> }。三個查詢條 件單位分別為 P1:<manufactured,2012>、P2:<mileage,20>、P3:<price,15000>。
因為 P2、P3 之間的邏輯運算子為 and 而 P1、P2 之間的邏輯運算子為 or。所以
P2、P3 這兩個查詢條件單位組合的優先順序會高於 P1、P2 查詢條件單位組合。
該範例處理結果如表 4.11 所示。
表 4.11 查詢條件單位為同一階層依邏輯運算子優先順序範例
Keyword
Query manufactured 2012 or mileage < 20 and price < 15000 a-v pairs
format <manufactured,2012 > <mileage, 20> <price, 15000>
Predicate
format <manufactured,2012 > <mileage, 20> <price, 15000>
Predicate
format ( P1 and P2 ) and P3
將各個查詢條件單位組合完成,成為表達使用者給予關鍵字查詢的搜尋意圖 的查詢條件單位敘述式,作為 WHERE 子句裡的查詢條件,以便於下個階段 SQL 查詢語句產生處理。