一、若 五行屬什么
若,草于石右方出頭,五行屬木、土,缺火。是功成名就的運勢,但要注重培養(yǎng)人際關(guān)系,切勿得罪小人。待人也要寬厚大度,謹(jǐn)記木秀于林風(fēng)必摧之的道理!
二、請說出數(shù)據(jù)庫完整性的幾種類型,并舉例說明
任何一部數(shù)據(jù)庫的書上都有:
完整性有三類:實體完整性,參照完整性,用戶定義完整性。
1.實體完整性:若屬性(指一個或一組屬性)a是基本關(guān)系的r的主屬性,則a不能取空值。
例子如下:在關(guān)系:學(xué)生(學(xué)號,姓名,年齡,性別,專業(yè)號...),學(xué)號屬性為主屬性,則學(xué)號不能為空。按照實體完整性規(guī)則的規(guī)定,基本關(guān)系的主碼都不能取空值。比如:選修(學(xué)號,課程號,成績),主碼為(學(xué)號,課程號),則兩個屬性都不能為空。
2.參照完整性:若屬性(或?qū)傩越M)f是基本關(guān)系r的外碼,它與基本關(guān)系s的主碼k相對應(yīng)(基本關(guān)系r和s不一定是不同的關(guān)系),則對于r中的每個元組在f上的值必須為:
1.空值(f的每個屬性均為空值)
2.等于s中的某個元組的主碼值。
例子:
1。空值的例子:比如學(xué)生關(guān)系的屬性中有專業(yè)號,對應(yīng)專業(yè)關(guān)系(專業(yè)號,專業(yè)名)的主碼,對于一個學(xué)生,如果專業(yè)號為空,表示專業(yè)為分配。
2.等于s中的某個元組的主碼值。比如選修關(guān)系(課程號,學(xué)號,成績),課程號對應(yīng)于課程關(guān)系(課程號,課程名稱,學(xué)分)的主碼,學(xué)號對應(yīng)于學(xué)生關(guān)系的主碼學(xué)號,但是由于選修關(guān)系中的課程號和學(xué)號是主屬性,不能取空值,所以他們只能取對應(yīng)的被參照關(guān)系課程,學(xué)生關(guān)系中的已經(jīng)存在的主碼值。
用戶定義完整性:任何關(guān)系數(shù)據(jù)系統(tǒng)都應(yīng)該支持上面的兩種完整性。
另外,不同的關(guān)系數(shù)據(jù)系統(tǒng)根據(jù)其應(yīng)用環(huán)境的不同,往往還要一些特殊的約束關(guān)系。用戶定義的完整性就是針對某一具體關(guān)系數(shù)據(jù)庫的約束條件。它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。例如:
某個屬性必須取唯一值(unique約束)。某個非主屬性不能取空值(not null約束)。某個屬性的值必須在1-100之間(例如學(xué)生的成績,check grade between 1 and 100),學(xué)生的性別只有男女之分(check sex in('男','女')。
三、什么是參照完整性
參照完整性是關(guān)系模型的完整約束之一,屬于數(shù)據(jù)完整性的一種,其余還有:實體完整性、用戶自定義完整性。
參照完整性規(guī)則:若屬性或?qū)傩越MF是基本關(guān)系R的外鍵,它與基本關(guān)系S的主鍵Ks相對應(yīng)(基本關(guān)系R和S不一定是不同的關(guān)系),則對于R中的每個元組在F上的值必須為:
1、空值,F(xiàn)的每個屬性值均為空值。
2、S中某個元組中的主鍵值(主碼值)。
參照完整性的性質(zhì):
參照完整性則是相關(guān)聯(lián)的兩個表之間的約束,具體的說,就是從表中每條記錄外鍵的值必須是主表中存在的,因此,如果在兩個表之間建立了關(guān)聯(lián)關(guān)系,則對一個關(guān)系進行的操作要影響到另一個表中的記錄。
如果實施了參照完整性,那么當(dāng)主表中沒有相關(guān)記錄時,就不能將記錄添加到相關(guān)表中。也不能在相關(guān)表中存在匹配的記錄時刪除主表中的記錄,更不能在相關(guān)表中有相關(guān)記錄時,更改主表中的主鍵值。
也就是說,實施了參照完整性后,對表中主鍵字段進行操作時系統(tǒng)會自動地檢查主鍵字段,看看該字段是否被添加、修改、刪除了。如果對主鍵的修改違背了參照完整性的要求,那么系統(tǒng)就會自動強制執(zhí)行參照完整性。
四、給定一組字母表示的函數(shù)依賴集,怎樣確定候選鍵
求候選碼/關(guān)鍵字方法:
若屬性僅出現(xiàn)在函數(shù)依賴的右部,則它一定不包含在任何候選關(guān)鍵字中;
若屬性既出現(xiàn)在函數(shù)依賴的右部又出現(xiàn)在左部,則它可能包含在候選關(guān)鍵字中;
若屬性僅出現(xiàn)在函數(shù)依賴的左部,則它一定包含在任何候選關(guān)鍵字中;
若屬性在函數(shù)依賴兩邊均未出現(xiàn),則它一定包含在任何候選關(guān)鍵字中;
在上述基礎(chǔ)上求屬性集的閉包,如果和U中的所有屬性相等,那么即為候選碼/關(guān)鍵字。
根據(jù)以上方法,即可得出候選鍵。
五、什么是數(shù)據(jù)庫的關(guān)系完整性
數(shù)據(jù)庫完整性(Database Integrity)是指數(shù)據(jù)庫中數(shù)據(jù)的正確性和相容性。數(shù)據(jù)庫完整性由各種各樣的完整性約束來保證,因此可以說數(shù)據(jù)庫完整性設(shè)計就是數(shù)據(jù)庫完整性約束的設(shè)計。數(shù)據(jù)庫完整性約束可以通過DBMS或應(yīng)用程序來實現(xiàn),基于DBMS的完整性約束作為模式的一部分存入數(shù)據(jù)庫中。通過DBMS實現(xiàn)的數(shù)據(jù)庫完整性按照數(shù)據(jù)庫設(shè)計步驟進行設(shè)計,而由應(yīng)用軟件實現(xiàn)的數(shù)據(jù)庫完整性則納入應(yīng)用軟件設(shè)計(本文主要討論前者)。數(shù)據(jù)庫完整性對于數(shù)據(jù)庫應(yīng)用系統(tǒng)非常關(guān)鍵,其作用主要體現(xiàn)在以下幾個方面:
1.?dāng)?shù)據(jù)庫完整性約束能夠防止合法用戶使用數(shù)據(jù)庫時向數(shù)據(jù)庫中添加不合語義的數(shù)據(jù)。
2.利用基于DBMS的完整性控制機制來實現(xiàn)業(yè)務(wù)規(guī)則,易于定義,容易理解,而且可以降低應(yīng)用程序的復(fù)雜性,提高應(yīng)用程序的運行效率。同時,基于DBMS的完整性控制機制是集中管理的,因此比應(yīng)用程序更容易實現(xiàn)數(shù)據(jù)庫的完整性。
3.合理的數(shù)據(jù)庫完整性設(shè)計,能夠同時兼顧數(shù)據(jù)庫的完整性和系統(tǒng)的效能。比如裝載大量數(shù)據(jù)時,只要在裝載之前臨時使基于DBMS的數(shù)據(jù)庫完整性約束失效,此后再使其生效,就能保證既不影響數(shù)據(jù)裝載的效率又能保證數(shù)據(jù)庫的完整性。
4.在應(yīng)用軟件的功能測試中,完善的數(shù)據(jù)庫完整性有助于盡早發(fā)現(xiàn)應(yīng)用軟件的錯誤。
數(shù)據(jù)庫完整性約束可分為6類:列級靜態(tài)約束、元組級靜態(tài)約束、關(guān)系級靜態(tài)約束、列級動態(tài)約束、元組級動態(tài)約束、關(guān)系級動態(tài)約束。動態(tài)約束通常由應(yīng)用軟件來實現(xiàn)。不同DBMS支持的數(shù)據(jù)庫完整性基本相同,Oracle支持的基于DBMS的完整性約束如下表所示:
數(shù)據(jù)庫完整性設(shè)計示例
一個好的數(shù)據(jù)庫完整性設(shè)計首先需要在需求分析階段確定要通過數(shù)據(jù)庫完整性約束實現(xiàn)的業(yè)務(wù)規(guī)則,然后在充分了解特定DBMS提供的完整性控制機制的基礎(chǔ)上,依據(jù)整個系統(tǒng)的體系結(jié)構(gòu)和性能要求,遵照數(shù)據(jù)庫設(shè)計方法和應(yīng)用軟件設(shè)計方法,合理選擇每個業(yè)務(wù)規(guī)則的實現(xiàn)方式;最后,認(rèn)真測試,排除隱含的約束沖突和性能問題。基于DBMS的數(shù)據(jù)庫完整性設(shè)計大體分為以下幾個階段:
1.需求分析階段
經(jīng)過系統(tǒng)分析員、數(shù)據(jù)庫分析員、用戶的共同努力,確定系統(tǒng)模型中應(yīng)該包含的對象,如人事及工資管理系統(tǒng)中的部門、員工、經(jīng)理等,以及各種業(yè)務(wù)規(guī)則。
在完成尋找業(yè)務(wù)規(guī)則的工作之后,確定要作為數(shù)據(jù)庫完整性的業(yè)務(wù)規(guī)則,并對業(yè)務(wù)規(guī)則進行分類。其中作為數(shù)據(jù)庫模式一部分的完整性設(shè)計按下面的過程進行。而由應(yīng)用軟件來實現(xiàn)的數(shù)據(jù)庫完整性設(shè)計將按照軟件工程的方法進行。
2.概念結(jié)構(gòu)設(shè)計階段
概念結(jié)構(gòu)設(shè)計階段是將依據(jù)需求分析的結(jié)果轉(zhuǎn)換成一個獨立于具體DBMS的概念模型,即實體關(guān)系圖(ERD)。在概念結(jié)構(gòu)設(shè)計階段就要開始數(shù)據(jù)庫完整性設(shè)計的實質(zhì)階段,因為此階段的實體關(guān)系將在邏輯結(jié)構(gòu)設(shè)計階段轉(zhuǎn)化為實體完整性約束和參照完整性約束,到邏輯結(jié)構(gòu)設(shè)計階段將完成設(shè)計的主要工作。
3.邏輯結(jié)構(gòu)設(shè)計階段
此階段就是將概念結(jié)構(gòu)轉(zhuǎn)換為某個DBMS所支持的數(shù)據(jù)模型,并對其進行優(yōu)化,包括對關(guān)系模型的規(guī)范化。此時,依據(jù)DBMS提供的完整性約束機制,對尚未加入邏輯結(jié)構(gòu)中的完整性約束列表,逐條選擇合適的方式加以實現(xiàn)。
在邏輯結(jié)構(gòu)設(shè)計階段結(jié)束時,作為數(shù)據(jù)庫模式一部分的完整性設(shè)計也就基本完成了。每種業(yè)務(wù)規(guī)則都可能有好幾種實現(xiàn)方式,應(yīng)該選擇對數(shù)據(jù)庫性能影響最小的一種,有時需通過實際測試來決定。
數(shù)據(jù)庫完整性設(shè)計原則
在實施數(shù)據(jù)庫完整性設(shè)計的時候,有一些基本的原則需要把握:
1.根據(jù)數(shù)據(jù)庫完整性約束的類型確定其實現(xiàn)的系統(tǒng)層次和方式,并提前考慮對系統(tǒng)性能的影響。一般情況下,靜態(tài)約束應(yīng)盡量包含在數(shù)據(jù)庫模式中,而動態(tài)約束由應(yīng)用程序?qū)崿F(xiàn)。
2.實體完整性約束、參照完整性約束是關(guān)系數(shù)據(jù)庫最重要的完整性約束,在不影響系統(tǒng)關(guān)鍵性能的前提下需盡量應(yīng)用。用一定的時間和空間來換取系統(tǒng)的易用性是值得的。
3.要慎用目前主流DBMS都支持的觸發(fā)器功能,一方面由于觸發(fā)器的性能開銷較大,另一方面,觸發(fā)器的多級觸發(fā)不好控制,容易發(fā)生錯誤,非用不可時,最好使用Before型語句級觸發(fā)器。
4.在需求分析階段就必須制定完整性約束的命名規(guī)范,盡量使用有意義的英文單詞、縮寫詞、表名、列名及下劃線等組合,使其易于識別和記憶,如:CKC_EMP_REAL_INCOME_EMPLOYEE、PK_EMPLOYEE、CKT_EMPLOYEE。如果使用CASE工具,一般有缺省的規(guī)則,可在此基礎(chǔ)上修改使用。
5.要根據(jù)業(yè)務(wù)規(guī)則對數(shù)據(jù)庫完整性進行細(xì)致的測試,以盡早排除隱含的完整性約束間的沖突和對性能的影響。
6.要有專職的數(shù)據(jù)庫設(shè)計小組,自始至終負(fù)責(zé)數(shù)據(jù)庫的分析、設(shè)計、測試、實施及早期維護。數(shù)據(jù)庫設(shè)計人員不僅負(fù)責(zé)基于DBMS的數(shù)據(jù)庫完整性約束的設(shè)計實現(xiàn),還要負(fù)責(zé)對應(yīng)用軟件實現(xiàn)的數(shù)據(jù)庫完整性約束進行審核。
7.應(yīng)采用合適的CASE工具來降低數(shù)據(jù)庫設(shè)計各階段的工作量。好的CASE工具能夠支持整個數(shù)據(jù)庫的生命周期,這將使數(shù)據(jù)庫設(shè)計人員的工作效率得到很大提高,同時也容易與用戶溝通。
