其中一個,空值引導你進入一些3值邏輯的領域。 「一些」邏輯,因爲可能有很多(其中一個可能的區別是邏輯蘊涵是如何定義的)。無論如何,無論使用哪種特定的3VL,它總是會帶來一些令人討厭的驚喜,並且最好是有點不直觀,或者在最壞的情況下完全無法理解。
保持在2VL中的大量等價(/同義反義詞)在大多數3VL中不能被維持,或者只是非常困難。以邏輯含義:在2VL中,通常知道'p暗示q'等價於'NOT(p)或q'。你可能會試圖找出經典2VL中的一些非常基本的套套語言是如何在3VL中產生的。
例如p值=> q < =>不(Q)=>不(P)
或
p或不(P)< =>真
或
p和不(對)< => false。
其次,SQL在各種情況下處理空值的方式大都是特設的方式。添加兩個數字,其中一個爲空,並且結果爲空。使用某種形式的SUM()(使用相同的參數)執行相同的操作,並獲得數字零!在Oracle數據庫中插入一個零長度的字符串,並將其轉換爲null,但其他DBMS可能不會這樣做(我不知道是否將某些CHAR列與零長度字符串進行比較(不一定是字面值,請注意,你的行爲是正確的)
第三,人們必須記住,空值本質上是布爾型標誌,表示存在/缺失,增加了查詢寫入的複雜性,但大部分複雜性都是由SQL語言在地毯下掃描,因爲它提供了很多「默認行爲」(例如,當真實結果應該是UNKNOWN時比較結果會返回FALSE),從而使開發人員錯誤地認爲複雜性不存在,並且開發人員不需要關心那額外的複雜性。
你有思考數據,你的模型。想想一個顧客:你需要一些信息,做一個交易,姓名,地址,一個唯一的ID ...... - 一些數據是可選的:例如手機。所有,必要的,應該不是NULL。我們不能說更多。 –