一般SQL中的NULL并非此问题的解决之道.docx

上传人:b****1 文档编号:30835010 上传时间:2024-01-30 格式:DOCX 页数:56 大小:76.13KB
下载 相关 举报
一般SQL中的NULL并非此问题的解决之道.docx_第1页
第1页 / 共56页
一般SQL中的NULL并非此问题的解决之道.docx_第2页
第2页 / 共56页
一般SQL中的NULL并非此问题的解决之道.docx_第3页
第3页 / 共56页
一般SQL中的NULL并非此问题的解决之道.docx_第4页
第4页 / 共56页
一般SQL中的NULL并非此问题的解决之道.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

一般SQL中的NULL并非此问题的解决之道.docx

《一般SQL中的NULL并非此问题的解决之道.docx》由会员分享,可在线阅读,更多相关《一般SQL中的NULL并非此问题的解决之道.docx(56页珍藏版)》请在冰豆网上搜索。

一般SQL中的NULL并非此问题的解决之道.docx

一般SQL中的NULL并非此问题的解决之道

 

高等資料庫報告

 

遺失資訊(資訊缺項)

(MissingInformation)

 

指導老師:

陳彥良教授

學生:

陸益明84423034原版

學生:

張燕菁86423003校注

中華民國八十七年三月二十九日

目錄

第一章前言3

第二章遺失資訊的定義5

第三章遺失資訊的概念

3.1虛值的探討7

3.2虛值的邏輯運算8

第四章完整性規則與遺失資訊的探討

4.1資料庫完整性規則12

4.2資訊遺失對實體完整性規則的衝擊12

4.3參考完整性規則與資訊遺失關係探討13

4.4遺失資訊轉換機制之權限17

第五章遺失資訊的處理

5.1值和符號的排序18

5.2包含排序的連結18

5.3重複列的刪除19

5.4統計函數的應用21

5.5找尋遺失資訊的方法21

5.6處理遺失資訊的方法24

第六章三值邏輯的探討

6.1一些重要的原則26

6.2三值邏輯產生的結果28

6.3對三值邏輯的評論31

第七章四值邏輯的探討33

第八章Defaultvaluescheme的探討34

第九章結論

9.1對資料庫管理系統的影響36

9.2實作上遭遇的問題38

9.3各種方法的優缺點39

9.4結語40

補充資料:

1.C.J.DateV.S.E.F.Codd41

2.SQL的邏輯操作44

參考文獻49

第一章前言

遺失資訊(MissingInformation)是個十分麻煩的問題:

在真實世界裡時常發生,因此我們必須想辦法瞭解資料庫在這方面所遭遇的問題。

在SQL中以NULL來表示遺失資訊,這並不是很好的處理方法,事實上,這方面的問題未被充份表達,而且到目前為止,也沒有真正的解決方案。

很多資料庫專家,對於遺失資訊(MissingInformation)有如下的見解:

‧Codd提出三值邏輯(three-valuedlogic)和四值邏輯(four-valuedlogic)的方法,並將這些功能加入模型中,成為關連式模型的一部份。

‧Date則提出defaultvaluescheme的方法來處理遺失資訊,他認為遺失資訊的問題尚未充份被瞭解,因此仍需更多的探討及研究,在研究尚未告一段落之前,採用DBA定義的預設值作法比較實際。

雖然Codd和Date對於遺失資訊(MissingInformation)的看法不同,但是我們可從他們兩人觀點的比較中,得到一些結論。

本篇主要報告資料來源:

‧Codd所著“TherelationalModelforDatabaseManagement”一書中第8、9兩章。

‧Date所著”AnintroductiontoDatabaseSystem“(第六版)一書中第20章。

‧曾守正所著”資料庫系統之理論與實務“一書中第15章。

內容包括遺失資訊的定義、遺失資訊的概念、完整性規則與遺失資訊的探討、遺失資訊的處理、三值邏輯的探討、四值邏輯的探討、Defaultvaluescheme的探討,最後總結這些處理方法對資料庫的影響、實作上的問題,以及彼此之間的優缺點。

遺失資訊的表示和處理皆植基於真實世界的語意(semantic)基礎上,也就是說資料庫的設計者應該建立一些規則,然後依資料來決定資料庫的值是那種類型(如missing-but-applicable、missing-but-inapplicable),在完整性(Integrity)考量下,決定那種遺失資訊的類型可以在欄位或關連中出現,那種則不允許。

關於遺失資訊的類型(missing-but-applicable、missing-but-inapplicable),我們將在第二章遺失資訊的定義中有深入的介紹,第三章資訊遺失的概念主要是針對虛值的探討及其運算,第四章資料庫的完整性規則說明關連中的主鍵和外來鍵對遺失資訊的限制和處理,第五章遺失資訊的處理,介紹

(1)值和符號的排序、

(2)包含排序的連結、(3)重複列的刪除、(4)統計函數的應用等處理情況、(5)找尋遺失資訊的方法(6)處理遺失資訊的方法,第六、七、八章分別針對解決遺失資訊的三種方法(三值邏輯、四值邏輯、Defaultvaluescheme)作探討、第九章對整個遺失資訊的問題與解決方法作總結。

整篇報告仍有不完整之處,請多指教!

第二章遺失資訊的定義

在邏輯和代數中,當某項的值未知時,則設定一個變數給這個項目,不同的未知項則設定不同的變數名稱。

因此,在邏輯和代數式中可能包含許多不同的變數,透過解聯立方程式(equation)的方法可以求出這些變數的值。

同樣的,在資料庫管理中,也可遵循這種方法。

假設資料庫中包含員工和專案計畫的資料,當某一員工的出生日期未知和某一專案計畫的起始日期未知,則這兩個未知值將以不同的變數名稱來記錄,以茲區別。

大多數的未知值(unknown)或missing-andapplicableitem,最後是由使用者以後續輸入值(late-arrivinginput)或提供計算的方式來得知;而missing-and-inapplicable則表示這個未知值(unknown)是無法得知的(unknowable)。

Ⅰ根據Codd的說法,遺失資訊(missinginformation)在關連式資料庫中的定義如下:

‧遺失但可能再獲得的資訊(missing-but-applicable;簡稱A-mark):

目前未知的值,將來可能獲得資訊(avalueisatpresentunknown)。

<例>如果公司某一新進人員,因老闆出國尚未決定其服務部門,則在此筆記錄的部門欄位將以A-mark標記。

‧遺失但不能再獲得的資訊(missing-but-inapplicable;簡稱I-mark):

目前未知的值,將來也不可能獲得資訊(avalueisinsomesenseunknowable)。

<例>世界男子百公尺決賽,比賽結束後,因電子計時器故障而無法得知成績(現在不知道,以後也不知道),則參賽者比賽記錄的成績欄位將以I-mark標記。

 

當遺失資訊的欄位為數值狀態時,則其運算法則如下:

(以加法為例)

(X:

db-value、A:

A-mark、I:

I-mark)

X+X=2XX+A=AA+X=A

A+A=AA+I=II+A=I

I+I=IX+I=II+X=I

 

Codd用“mark”表示遺失資訊,而不用“values”、“nullvalues”、“nulls”來表示的原因有四點:

在資料庫管理系統中不把“mark”當成值(values)來看待。

“mark”的分類較“null”多(“mark”有兩種,“null”只有一種)。

有些電腦語言所談的“nulls”和資料庫的“marks”意義不同。

在英語的形容詞中“marked”和“unmarked”的用法較“nulled”、“un-nulled”和“nullified”更恰當。

Ⅱ根據Date的解釋及評論,認為造成資訊遺失的原因如下:

資訊值的無法得知(valueunknown)

資訊值的不適用(valuenotapplicable)

資訊值不存在(valuenotexist)

資訊值未被定義(valueundefined)

資訊值未被提供(valuenotsupplied)

 

Ⅲ根據國內學者曾守正,將missingdata翻譯為資料缺項,其廣義含意為:

某筆值組的某個屬性欄位值可能存放著虛值(NULL),則整合時會引發許多問題,我們將此類問題統稱為『資料缺項』(MissingData)。

第三章遺失資訊的概念

3.1虛值(NullValues)的探討(SQL以Null來表示資訊遺失)

當我們說某零件的重量值是null,這句話更正確的意思是說:

a.這個零件存在

b.此零件有一重量值

c.目前無法得知它的重量

因此,我們就無法在WEIGHT的那一個tuple中填入一個確定的值,所以,用null來代表此一未知值。

在關連表中屬性值有時候可能因為相關資訊不足或缺乏,使的我們無法存入一個明確的值,而以一個『不明確』的值來代替其資料,這就是虛值(NullValues)的觀念。

虛值不是0也不是空白,而是一個特殊標記,用以記錄目前資料值未知情況。

按照目前虛值的意義與特性我們可以將它細分為底下幾種:

可適用的虛值(ApplicableNullValues):

這個值目前存在,但我們不知其值為何,所以暫時存一個虛值。

<例>假定目前我們對於老張的居住地點仍一無所知的話,則存放一個『可適用的虛值』於其屬性中,如下表所示(在此我們以”-”表示『可適用的虛值』):

eid

name

city

1

老王

台北

2

老張

2.不可適用的虛值(InapplicableNullValues):

目前根本沒有這個值。

<例>假定我們知道郭老師目前是單身,其配偶欄(Spouse)可以存放一個『不可適用的虛值』以表示他目前根本沒有配偶(在此我們以”※”表示『不可適用的虛值』):

eid

name

spouse

1

老王

吳小姐

2

郭老師

3.完全不知道的虛值(TotallyUnknown):

完全不知道這個值是否存在(在此我們以”#”表示『完全不知道的虛值』)。

eid

name

spouse

1

老王

吳小姐

2

老張

#

虛值在資列庫中是有存在的必要,但是它卻會在資料庫系統作查詢、統計分析時造成很多困擾。

雖然有很多研究人員嘗試要去解決此類困擾,但總是因複雜而難以完全實現。

3.2虛值的邏輯運算

如果A的值未知,則A>B的結果為何?

答案是:

不論B是否為未知,其結果皆為“未知”。

如果A、B的值皆未知,則A=B的結果也為“未知”。

(1)UNK和unk相同嗎?

Date指出UNK和unk所代表的意義不同:

‧unk的意思是theunknowntruthvalue(未知真值),也就是說unk是一個值(真值表中的值),若X=unk,表示我們知道X的值為unk。

‧UNK的意思是the“valueunknown”null(未知數),若X=UNK,則表示我們連X是否有值都不知道。

‧舉例來說,假設Y是一個真值表中的值,則Y可能的值為true、false、unk。

(2)遺失資訊在純量計算式的處理情況

WEIGHT×454其中WEIGHT表示某零件的重量,以Px來表示。

如果Px未知,試問此計算式的結果如何?

答案是“未知”。

因此,任一純量計算式中,若運算元未知,則其結果亦為“未知”。

下列式子的結果皆為“未知”。

WEIGHT+454454+WEIGHT+WEIGHT

WEIGHT-454454-WEIGHT-WEIGHT

WEIGHT×454454×WEIGHT

WEIGHT÷454454÷WEIGHT

‧特殊的運算子的應用:

IS_UNK(operand)、IF_UNK(exp1,exp2)其作用在於當運算元為未知時,並不會導致其結果亦為“未知”。

IS_UNK(operand):

這個子是用來測試operand是否為未知值。

(testforUNK)

當operand為未知值,則傳回真值(true),當operand不為未知值,則傳回偽值(false)。

IF_UNK(exp1,exp2):

這個運算子是用來轉換未知值變成已知值。

(convertUNKtosomenonUNKvalue)

當exp1的值不為未知,則傳回exp1的值,若exp1的值為未知,則傳回exp2的值。

IF_UNK(exp1,exp2)=>IFIS_UNK(exp1)THENexp2

ELSEexp1

《例》假設在關連P的CITY屬性允許UNK,則下列運算式:

EXTENDPADDIF_UNK(CITY,‘Cityunknown’)AsPCY

不為未知未知

將會產生一個關連,其中對於關連P中城市為UNK的所有資料,其PCY的值為“Cityunknown”。

(3)EXISTS和FORALL的處理情況

在SQL中EXISTS和FORALL可用一連串的OR和一連串的AND來表示。

●EXISTST(f(T))可以下列式子表示:

falseOR(f(T1))OR.......OR(f(Tm))

●FORALLT(f(T))可以下列式子表示:

trueAND(f(T1))AND.......AND(f(Tm))

 

舉例來說,假設關連R包含下列的tuples:

T

(1)

1

1

UNK

T

(2)

2

2

UNK

T(3)

3

UNK

UNK

則下列針對各個欄位之比較式子結果為何:

(請參閱第六章中三值邏輯之真值表應用)

1.EXISTST(T(3)>1):

falseOR((3>1)OR(UNK>1)OR(UNK>1))

falseOR(trueORunkORunk)

falseORtrue

true

2.EXISTST(T

(2)>2):

falseOR((2>2)OR(2>2)OR(UNK>2))

falseOR(falseORfalseORunk)

falseORunk

unk

3.EXISTST(MAYBE(T

(1)>3)):

falseOR(MAYBE((1>3))ORMAYBE((1>3))ORMAYBE((UNK>3))))

falseOR(MAYBE(false)ORMAYBE(false)OR

MAYBE(unk))

falseOR(falseORfalseORtrue)

falseORtrue

true

4.EXISTST(IS_UNK(T(3))):

falseOR(IS_UNK(3)ORIS_UNK(UNK)OR

IS_UNK(UNK))

falseOR(falseORtrueORtrue)

falseORtrue

true

5.FORALLT(T

(1)>1):

trueAND((1>1)AND(1>1)AND(UNK>1))

trueAND(falseANDfalseANDunk)參看p.16

trueANDfalse

false

6.FORALLT(T

(2)>1):

trueAND((2>1)AND(2>1)AND(UNK>1))

trueAND(trueANDtrueANDunk)

trueANDunk

unk

7.FORALLT(MAYBE(T(3)>1)):

trueAND(MAYBE((3>1))ANDMAYBE((UNK>1))ANDMAYBE((UNK>1))))

trueAND(MAYBE(true)ANDMAYBE(unk)AND

MAYBE(unk)))

trueAND(falseANDtrueANDtrue)

trueANDfalse

false

第四章完整性規則與資訊遺失的探討

4.1資料庫完整性規則

在談論資料庫的完整性規則之前,我們先看看主鍵和外來鍵在基本關連中的情形。

主鍵:

主鍵是一個值組(tuple)唯一的識別值(UniqueIdentifier),它是由屬性集的子集所構成,它可能是一個以上的屬性所構成,甚至可以由該關連表所有的屬性所構成。

外來鍵:

外來鍵是由一個或多個屬性的子集所構成,它在某一關連中為非鍵屬性,但在另一關連中則為主鍵。

在每個關連式資料庫中,皆提供下列兩種完整性限制規則:

1、E類型:

實體完整性(entityintegrity)

屬於基本關連表(baserelation)之主鍵的任何屬性值不可以是虛值。

如果主鍵是由複合屬性所構成,其中所構成的任何屬性也都不能是虛值。

2、R類型:

參考完整性(referentialintegrity)

外來鍵及其相對的主鍵必須被定義於相同的基本定義域中。

也就是說,當外來鍵若不是空值時,則它所要參考的目標必須要存在。

同樣的,複合外來鍵(compositeforeignkey),情況也是如此。

此外,外來鍵不可以是遺失但不能再獲得的資訊(missing-but-inapplicable;I-mark)

 

4.2資訊遺失對實體完整性規則的衝擊

實體完整性規則要求一個基本關連表之主鍵不可以是虛值,換句話說,若一個關連不是基本關連表(baserelation),則它的主鍵可以有虛值。

下列例子可幫助我們了解為甚麼要這樣規定,假設有一個儲存零件資料的基本關連表P,它有一個非鍵屬性COLOR是允許有虛值的,現在我們如果執行查詢Listallpartcolors,則我們得到一個只有屬性COLOR的關連,在此一關連中,主鍵就是COLOR,而它可能會有虛值。

此處凸顯了一種矛盾,為了要讓屬性能處理虛值,我們必須把關連區分為基本關連表和一般關連,前者的主鍵不可以有虛值而後者可以,但在這樣的做法下,當我們要把一般關連儲存成基本關連表時,我們會違反實體完整性規則。

為了避免此一矛盾,我們必須規定所有的非鍵屬性都不可以有虛值。

在實體完整性規則中,規定基本關連表的主鍵不可以有虛值。

換句話說,若是候選鍵(Alternatekey)而非主鍵就可以有虛值。

但這樣會造成另一個問題,若屬性AK是一個有虛值的候選鍵,則因為它違反了實體完整性規則,已經沒有資格作為主鍵。

如此一來,屬性AK根本就不能被稱為候選鍵。

為了避免此一矛盾,我們被迫規定:

所有的候選鍵(當然包括主鍵)的任何屬性值都不可以是虛值。

從以上的討論,我們的結論是:

基本關連表的每一個屬性都不可以有虛值。

但如此一來,我們根本沒有辦法處理訊息遺失的問題。

 

4.3參考完整性規則與資訊遺失關係探討

欄位別種類

A-Mark

I-Mark

影響

PrimaryKey

×

×

違反實體完整性限制規則

ForeignKey

×

外來鍵有I-mark會影響參考完整性限制規則

Non-Key

不影響關連式資料庫整體運作

在整個資料庫中,所有外來鍵的欄位絕對禁止I-mark的出現,因為I-mark與外來鍵的觀念相互矛盾。

一個外來鍵意味著它是另一個關連的主鍵,若為I-mark,則另一關連中的主鍵將為空值,而這就違反實體完整性規則。

此外,Codd建議資料庫管理者應該仔細的考慮:

是否允許或禁止在外來鍵的欄位中有A-mark存在?

‧外來鍵的虛值規則(NullRuleforForeignKey):

當新增一筆記錄或更改外來鍵內容時,若該外來鍵是所屬關連表中主鍵的一部份,則其新增或更改後的外來鍵結果不得為虛值;若該外來鍵不是所屬關連表中主鍵的一部份,則該外來鍵可以是虛值。

<例>在下圖的兩個關連表中,Departments.manager是一個外來鍵,它參考Employee.eno(經理也是員工一份子),但它不是Departments關連表中主鍵的一部份,所以(p1,企劃,-,6500)這個值組中的Manager值可以是虛值,表示企劃部經理不知是何許人也?

或許目前出缺);另外,Employee.dno(員工的部門)也是一個外來鍵,它參考Departments.dno(部門的代碼),而且它也不是Employee關連表中主鍵的一部份。

DepartmentsEmployee

dno

name

manager

budget

eno

name

dno

salary

a1

會計

A001

40000

A001

Mike

a1

60k

e1

工程

E001

50000

E001

Frank

e1

80k

p1

企劃

6500

E002

John

e1

48k

s1

銷售

S001

34000

S001

Tom

s1

70k

本圖說明外來鍵不一定是主鍵的一部份,且可以是空值。

‧外來鍵的參考對象刪除/更新規則(Delete/UpdateRuleforForeignKeyReference):

對外來鍵所參考的候選鍵作刪除/更新時,如果沒有做好適當的控制,則可能會破壞參考整合規則。

當違反實體完整性和參考完整性的動作發生時,資料庫管理系統將採取適當的反應。

舉下面實例來說,資料庫管理系統對參考完整性規則的回應,可能有下列三種:

<例>下圖表示一個關連式資料庫的例子,為出版商用來存放各大書店訂購書籍的資料,我們稱之為BOB資料庫。

它包含三個關連表Bookstores、Orders、Books,各代表書店、訂購書籍、書籍的詳細資料。

Bookstores

no

Name

Rank

city

1

巨蟹書局

20

台北市

2

射手書局

10

高雄市

3

水瓶書局

30

新竹市

4

天秤書局

20

台中市

5

獅子書局

30

台南市

Books

id

booksname

author

price

publisher

1

三國演義

羅貫中

120

中古出版社

2

水滸傳

施耐奄

170

中庸出版社

3

紅樓夢

曹雪芹

170

春秋出版社

4

西遊記

吳承恩

140

聊齋出版社

5

水經住

酈道元

120

亦經出版社

6

道德經

老子

190

大唐出版社

Orders

no

id

quantity

1

1

30

1

2

20

1

3

40

1

4

20

1

5

10

1

6

10

2

1

30

2

2

40

3

2

20

4

2

20

4

4

30

4

5

40

圖BOB資料庫

1.簡單地拒絕。

限制性作法(RESTRICTED):

在刪除/更新某個關連表中某一筆值組,若參考到它的外來鍵端沒有相對的匹配值組的話,則可以刪除/更新,否則拒絕。

<例>由Bookstores刪除/更新(5,獅子書局,30,台南市)則可以,因為Orders中沒有相匹配值組。

由Bookstores刪除/更新(4,天秤書局,20,台中市)則拒絕,因為Orders中有三個相對的匹配值組(如下圖)。

2.刪除或更新的動作會“連鎖”到刪除相對應的資料或更新相對應資料的外來鍵

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1