在數(shù)據(jù)庫(kù)開發(fā)中,對(duì)兩個(gè)關(guān)系表進(jìn)行連接查詢,能夠直接做“邏輯或”的查詢,而對(duì)于邏輯與和邏輯非的查詢,則稍復(fù)雜點(diǎn),需要編寫額外的代碼來實(shí)現(xiàn)。在關(guān)系型數(shù)據(jù)庫(kù)中,所謂的連接,實(shí)際上是集合的包含,只要包含一項(xiàng),就滿足連接條件,實(shí)現(xiàn)的邏輯或,這種設(shè)計(jì),能夠滿足絕大多數(shù)的查詢需求。有時(shí),對(duì)于一條數(shù)據(jù),可能需要通過多個(gè)邏輯表達(dá)式來定性,比如,判定一篇文章是否跟Microsoft Azure有關(guān),通常簡(jiǎn)單的做法是從多個(gè)關(guān)鍵字的邏輯組合來定性:文章中同時(shí)含有關(guān)鍵字“Microsoft”和“Azure”,或者同時(shí)含有關(guān)鍵字“Windows”和“Azure”,把這種邏輯組合抽象成表達(dá)式,就是:( Microsoft & Azure ) | ( Windows & Azure )。
邏輯表達(dá)式的基本操作符是:與(&),或(|)和非(!),邏輯表達(dá)式的最小組合是:A&B,A|B 和 !A。關(guān)系型數(shù)據(jù)庫(kù)的開發(fā)人員,在設(shè)計(jì)邏輯表達(dá)式時(shí),必須保證滿足業(yè)務(wù)需求,同時(shí),盡可能支持多種邏輯組合,通常情況下,按照表達(dá)式的關(guān)系,我們把邏輯表達(dá)式拆分成四個(gè)元數(shù)據(jù)類型:Expression(表達(dá)式),SubExpression(子表達(dá)式),Operator(操作符)和Operand(操作數(shù))。
在我目前接觸的項(xiàng)目中,業(yè)務(wù)需求的邏輯表達(dá)式的組合相對(duì)簡(jiǎn)單,標(biāo)準(zhǔn)的表達(dá)式格式如下所示:
Expression = ((A & B) | (C & D)) & !(E | F)
該邏輯表達(dá)式表示:查詢語(yǔ)句返回的結(jié)果集中,不能包含E和F,但是,必須包含A和B,或者包含C且不包含D。
對(duì)于該類表達(dá)式,我們可以抽象成更為通用的邏輯公式是:
Expression= (SubExpression1 | SubExpression2 | ...) & !ExcludeExpression SubExpression=Operand1 & Operand2 & ... ExcludeExpression=Operand1 | Operand1 | ...