在數(shù)據(jù)庫開發(fā)中,對兩個關(guān)系表進(jìn)行連接查詢,能夠直接做“邏輯或”的查詢,而對于邏輯與和邏輯非的查詢,則稍復(fù)雜點,需要編寫額外的代碼來實現(xiàn)。在關(guān)系型數(shù)據(jù)庫中,所謂的連接,實際上是集合的包含,只要包含一項,就滿足連接條件,實現(xiàn)的邏輯或,這種設(shè)計,能夠滿足絕大多數(shù)的查詢需求。有時,對于一條數(shù)據(jù),可能需要通過多個邏輯表達(dá)式來定性,比如,判定一篇文章是否跟Microsoft Azure有關(guān),通常簡單的做法是從多個關(guān)鍵字的邏輯組合來定性:文章中同時含有關(guān)鍵字“Microsoft”和“Azure”,或者同時含有關(guān)鍵字“Windows”和“Azure”,把這種邏輯組合抽象成表達(dá)式,就是:( Microsoft & Azure ) | ( Windows & Azure )。
邏輯表達(dá)式的基本操作符是:與(&),或(|)和非(!),邏輯表達(dá)式的最小組合是:A&B,A|B 和 !A。關(guān)系型數(shù)據(jù)庫的開發(fā)人員,在設(shè)計邏輯表達(dá)式時,必須保證滿足業(yè)務(wù)需求,同時,盡可能支持多種邏輯組合,通常情況下,按照表達(dá)式的關(guān)系,我們把邏輯表達(dá)式拆分成四個元數(shù)據(jù)類型:Expression(表達(dá)式),SubExpression(子表達(dá)式),Operator(操作符)和Operand(操作數(shù))。
在我目前接觸的項目中,業(yè)務(wù)需求的邏輯表達(dá)式的組合相對簡單,標(biāo)準(zhǔn)的表達(dá)式格式如下所示:
Expression = ((A & B) | (C & D)) & !(E | F)
該邏輯表達(dá)式表示:查詢語句返回的結(jié)果集中,不能包含E和F,但是,必須包含A和B,或者包含C且不包含D。
對于該類表達(dá)式,我們可以抽象成更為通用的邏輯公式是:
Expression= (SubExpression1 | SubExpression2 | ...) & !ExcludeExpression SubExpression=Operand1 & Operand2 & ... ExcludeExpression=Operand1 | Operand1 | ...
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26