版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
雙擊添加署名/公司名/日期數(shù)據(jù)庫管理項目教程崔連和SQLServer2008序
想象一只剛被母鷹孵化出來的雛鷹,抖動粘濕的翅膀,想要飛上青天的模樣。
那是一個多么壯觀的場面呀!從一只不會飛行的雛鷹,到翱翔藍(lán)天的巨鷹,這個過程要經(jīng)過多少磨煉呀!序
雛鷹在窩里嗷嗷待哺的等待母親。
雛鷹揮舞弱軟的臂膀。
母鷹帶領(lǐng)小鷹曬太陽。
一只小鷹不小心從樹窩跌落因而折翼
小鷹在母鷹背上享受凌風(fēng)的速度。
小鷹開始飛行。
長成巨鷹。
學(xué)習(xí)的過程需要有耐心的培養(yǎng)、愛心的呵護(hù)雄心的感染、關(guān)心的啟發(fā),以及信心的鼓舞。第8章
數(shù)據(jù)完整性
在實(shí)際使用數(shù)據(jù)庫時,需要頻繁地用到多個表中的數(shù)據(jù),人們希望能有一個技術(shù)將經(jīng)常使用的多個表中的某些字段組成一個虛擬表,這樣原本對多個表的若干字段的操作,就變成了對一個虛擬表的操作,這個技術(shù)就是視圖。視圖本質(zhì)上就是一個虛擬表;實(shí)質(zhì)上就是多個表的若干個字段的組合;操作上與表基本相同;功能上能夠?qū)崿F(xiàn)與表基本相同的功能;本章以創(chuàng)建視圖和管理視圖兩個任務(wù)為基點(diǎn),全面講解了視圖操作的知識。數(shù)據(jù)完整性就是通過各種各樣的完整性約束來保證數(shù)據(jù)庫中數(shù)據(jù)值保持正確的狀態(tài),以防由于數(shù)據(jù)值不正確而導(dǎo)致的嚴(yán)重后果
1.掌握規(guī)則約束的創(chuàng)建與管理2.掌握PRIMARYKEY約束的創(chuàng)建與管理3.掌握FOREIGNKEY約束的創(chuàng)建與管理4.掌握其他約束的創(chuàng)建與管理8.1任務(wù)一規(guī)則的創(chuàng)建與管理任務(wù)名稱:規(guī)則的創(chuàng)建與管理
任務(wù)描述:視圖,規(guī)則,就是規(guī)定出來供大家共同遵守的制度或章程。那什么是數(shù)據(jù)庫規(guī)則呢?簡單的說,數(shù)據(jù)庫規(guī)則就是對數(shù)據(jù)庫中某一字段的數(shù)據(jù)值約束,讓這一字段的所有數(shù)據(jù)庫在規(guī)定的范圍內(nèi)。在數(shù)據(jù)庫中,規(guī)則分為數(shù)據(jù)庫級和表級。區(qū)別在于應(yīng)用的范圍。本任務(wù)就是為“OASystem”實(shí)例數(shù)據(jù)庫中的某一字段創(chuàng)建一個規(guī)則,讓這一字段的所有數(shù)據(jù)值都遵守這一規(guī)則。8.1任務(wù)一規(guī)則的創(chuàng)建與管理簡要分析:存儲在數(shù)據(jù)庫中的數(shù)據(jù)分為很多類型,有的數(shù)據(jù)不需要任何的限制,但是有的數(shù)據(jù)就需要通過一些手段去限制其值的范圍。規(guī)則就是用來限定這些數(shù)據(jù)的值,保證數(shù)據(jù)的完整性和正確性。分別使用數(shù)據(jù)庫級和表級兩級規(guī)則來完成任務(wù)
實(shí)現(xiàn)步驟:(1)創(chuàng)建并管理數(shù)據(jù)庫級規(guī)則(2)創(chuàng)建并管理表級規(guī)則8.1任務(wù)一規(guī)則的創(chuàng)建與管理一.?dāng)?shù)據(jù)庫級規(guī)則
步驟01:打開“OASystem”數(shù)據(jù)庫。單擊工具欄中的【新建查詢】按鈕,在【可用數(shù)據(jù)庫】下拉列表中選擇“OSAystem”數(shù)據(jù)庫,如圖8-1所示。圖8-1選擇“OASystem”數(shù)據(jù)庫8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟02:創(chuàng)建規(guī)則。在查詢編輯器窗口中輸入如下代碼。
CREATERULEAge_ruleAS@Age>18-—創(chuàng)建一個限定年齡大于18的規(guī)則然后單擊SSMS工具欄中的執(zhí)行按鈕。友情提醒:創(chuàng)建約束語句中最重要的部分就是表達(dá)式的書寫。表達(dá)式中的變量必須以@開頭,而變量的名稱最好能體現(xiàn)自身的內(nèi)容。8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟03:查看規(guī)則。刷新“OASystem”數(shù)據(jù)庫。打開【OSAystem】數(shù)據(jù)庫節(jié)點(diǎn),在其中的【可編程性】子節(jié)點(diǎn)中找到【規(guī)則】節(jié)點(diǎn),可以看到剛才創(chuàng)建的名為“Age_Rule”的規(guī)則,如圖8-2所示。這就上一步創(chuàng)建的約束圖8-2選擇“OASystem”數(shù)據(jù)庫8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟04:
規(guī)則綁定。規(guī)則建立成功后,需要將規(guī)則與數(shù)據(jù)表中的目標(biāo)字段綁定在一起。單擊工具欄中的【新建查詢】按鈕,在查詢編輯器窗口中輸入如下代碼并執(zhí)行。EXECsp_bindruleAge_Rule,'File.Age'--將Age_Rule綁定到File數(shù)據(jù)表中的Age字段友情提醒:EXEC是調(diào)用存儲過程命令,如果單獨(dú)執(zhí)行這一條命令,EXEC可以省略。sp_bingdrule是綁定約束的系統(tǒng)存儲過程。8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟05:查看規(guī)則綁定情況執(zhí)行完成后,在SSMS中依次展開【OSAystem】︱【表】︱【File】︱【列】節(jié)點(diǎn),找到字段【Age】子節(jié)點(diǎn),右擊【Age】字段節(jié)點(diǎn),從彈出的菜單點(diǎn)擊【屬性】命令,打開“列屬性”對話框,如圖8-3所示。圖中可以看到“規(guī)則”一欄后面文本框內(nèi)容為“Age_rule”說明該字段已經(jīng)綁定了規(guī)則8.1任務(wù)一規(guī)則的創(chuàng)建與管理圖8-3“列屬性”對話框8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟06:驗證規(guī)則。向“File”數(shù)據(jù)表插入數(shù)據(jù),如果插入“Age”字段的值小于18,系統(tǒng)會彈出錯誤提示,如圖8-4所示。圖8-4錯誤提示框8.1任務(wù)一規(guī)則的創(chuàng)建與管理2.解除綁定
如果綁定規(guī)則的字段不再需要此規(guī)則限制,則可以將規(guī)則與字段解除綁定,以取消字段的限制條件。規(guī)則解除后,規(guī)則仍存在于數(shù)據(jù)庫中,只是不再與字段有關(guān)聯(lián)。單擊工具欄中【新建查詢】按鈕,在查詢編輯器窗口中輸入如下代碼后并執(zhí)行。sp_unbindrule'File.Age'--解除File數(shù)據(jù)表中Age字段綁定的規(guī)則8.1任務(wù)一規(guī)則的創(chuàng)建與管理
友情提醒:解除綁定的命令與綁定的命令只差“un”兩個單詞,也就是反義的意思,便于大家記憶8.1任務(wù)一規(guī)則的創(chuàng)建與管理3.刪除規(guī)則
如果規(guī)則對于數(shù)據(jù)庫不再需要,則將其刪除。
打開SSMS,依次展開【OSAystem】︱【可編程性】︱【規(guī)則】節(jié)點(diǎn),找到規(guī)則【Age_Rule】子節(jié)點(diǎn),右擊規(guī)則【Age_Rule】子節(jié)點(diǎn),從彈出的菜單中點(diǎn)擊【刪除】命令,打開“刪除對象”對話框,如圖8-5所示。單擊【確定】按鈕,刪除“Age_Rule”規(guī)則。
友情提醒:當(dāng)要刪除的約束與字段處于綁定狀態(tài)時,不能刪除此約束。只有解除約束綁定后,才能進(jìn)行刪除操作。8.1任務(wù)一規(guī)則的創(chuàng)建與管理圖8-5刪除對象對話框8.1任務(wù)一規(guī)則的創(chuàng)建與管理二.表級規(guī)則
因為表級規(guī)則直接作用于字段,所以不存在后期綁定與解除問題,創(chuàng)建的同時直接與字段綁定。1.使用圖形方式創(chuàng)建規(guī)則步驟01:
在SSMS中,打開目標(biāo)數(shù)據(jù)表【Files】節(jié)點(diǎn),右擊【約束】子節(jié)點(diǎn),從彈出的菜單中點(diǎn)擊【新建約束】命令,打開“Check約束”對話框,如圖8-6所示。8.1任務(wù)一規(guī)則的創(chuàng)建與管理點(diǎn)擊這里,打開“Check約束表達(dá)式”對話框。圖8-6“Check約束”對話框8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟02:點(diǎn)擊“常規(guī)”欄中,“表達(dá)式”文本框右側(cè)的打開按鈕,打開“Check約束表達(dá)式”對話框。在“表達(dá)式”文本框中輸入“Age>18andAge<60”,如圖8-7所示圖8-7“Check約束表達(dá)式”對話框8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟03:
依次關(guān)閉對話框和窗體,并保存表的修改,這樣“File”數(shù)據(jù)表中“Age”字段就創(chuàng)建了Check約束,規(guī)定其數(shù)據(jù)值在18到60之間。8.1任務(wù)一規(guī)則的創(chuàng)建與管理2.使用命令方式創(chuàng)建規(guī)則步驟01:創(chuàng)建表的同時創(chuàng)建規(guī)則。在使用語句創(chuàng)建表的同時,可以直接將規(guī)則命令加在目標(biāo)字段的后面。例如,新建“File4”數(shù)據(jù)表,并規(guī)定“Age”字段的值在18到60歲之間。打開查詢編輯器窗口,輸入如下語句。CREATETABLEFile4(IDint,Ageintcheck(Age>18andAge<60))8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟02:
為已存在的表創(chuàng)建規(guī)則。如果為已存在的數(shù)據(jù)表中字段設(shè)置規(guī)則,需要使用修改表結(jié)構(gòu)命令。例如設(shè)定“File”數(shù)據(jù)表中“Age”字段設(shè)的值在18到60歲之間。打開查詢編輯器窗口,輸入如下代碼。ALTERTABLEFileADDCONSTRAINTCheck_AgeCHECK(Age>18andAge<60)8.1任務(wù)一規(guī)則的創(chuàng)建與管理1.數(shù)據(jù)完整性數(shù)據(jù)完整性(DataIntegrity)是指數(shù)據(jù)的可靠性(Reliability)和精確性(Accuracy)。它是應(yīng)防止數(shù)據(jù)庫中存在不符合語義規(guī)定或者各種規(guī)則的數(shù)據(jù)和防止因錯誤信息的輸入、輸出造成無效操作或錯誤信息。8.1任務(wù)一規(guī)則的創(chuàng)建與管理2.數(shù)據(jù)完整性的分類(1)實(shí)體完整性:是指保證表中記錄(行)為唯一實(shí)體的性完整性。要求表中的所有行都具有唯一性的標(biāo)識符,稱為主鍵。主鍵內(nèi)的數(shù)據(jù)是否可以修改,或整個字段是否可以被刪除,取決于主鍵之間的數(shù)據(jù)及主鍵與其他表之間要求的完整性。(2)域完整性:是指數(shù)據(jù)表中的字段必須滿足某種特定的數(shù)據(jù)類型或約束。8.1任務(wù)一規(guī)則的創(chuàng)建與管理(3)引用完整性:
是指相關(guān)聯(lián)的兩個表之間的約束,具體的說,就是從外鍵表中每條外鍵記錄的值必須是主表相應(yīng)字段中存在的數(shù)據(jù)。因此,如果在兩個表之間建立了關(guān)聯(lián)關(guān)系,則對一個關(guān)系進(jìn)行的操作要影響到另一個表中的記錄(4)用戶定義完整性。
用戶自定義完整性用來定義特定的規(guī)則,是數(shù)據(jù)庫中用戶根據(jù)自己的需要實(shí)施的數(shù)據(jù)完整性要求。8.1任務(wù)一規(guī)則的創(chuàng)建與管理3.實(shí)現(xiàn)數(shù)據(jù)完整性的方法SQLServer提供了一些幫助用戶實(shí)現(xiàn)數(shù)據(jù)完整性的工具,其中最常用的有:規(guī)則、默認(rèn)值和觸發(fā)器等。上一個任務(wù)介紹了如何使用規(guī)則實(shí)現(xiàn)數(shù)據(jù)完整性,接下來的幾個任務(wù)將介紹如何使用其他約束實(shí)現(xiàn)數(shù)據(jù)完整性。使用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)完整性將在第10章詳細(xì)介紹。8.1任務(wù)一規(guī)則的創(chuàng)建與管理4.數(shù)據(jù)庫級和表級規(guī)則
數(shù)據(jù)庫中的這兩級規(guī)則主要的區(qū)別在于作用的范圍不同。
數(shù)據(jù)庫級規(guī)則創(chuàng)建于數(shù)據(jù)庫中,創(chuàng)建時與任何的表和字段沒有關(guān)系,需要用戶綁定到指定的字段中。一個數(shù)據(jù)庫級規(guī)則可以綁定多個字段,對這些字段起到規(guī)范的作用。
表級規(guī)則創(chuàng)建與表中,創(chuàng)建時就必須指定目標(biāo)字段,也只對這一個字段起到規(guī)范的作用。8.1任務(wù)一規(guī)則的創(chuàng)建與管理【操作實(shí)例8-1】分別使用數(shù)據(jù)庫級和表級規(guī)則規(guī)范員工Sex數(shù)值
本操作實(shí)例要求分別使用數(shù)據(jù)庫級和表級規(guī)則來規(guī)范性別字段的數(shù)值,要求“Sex”字段中只能有男和女兩種數(shù)據(jù)。一.使用數(shù)據(jù)庫級規(guī)則步驟01:創(chuàng)建數(shù)據(jù)庫級規(guī)則。首先在SSMS中將當(dāng)前數(shù)據(jù)庫設(shè)置為“OASystem”,然后在查詢編輯器窗口輸入創(chuàng)建規(guī)則命令。CREATERULESex_ruleAS@Sexin(‘男’,’女’)執(zhí)行后完成規(guī)則的創(chuàng)建8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟02:綁定規(guī)則。將剛才創(chuàng)建的規(guī)則綁定到目標(biāo)字段中。在查詢編輯器窗口中輸入綁定規(guī)則命令。EXECsp_bindruleSex_Rule,'File.Sex'步驟03:解除綁定。如果不再需要該規(guī)則來規(guī)范“Sex”字段的數(shù)值,則可以解除綁定。解除并不是刪除規(guī)則。EXECsp_unbindrule'File.Sex'步驟04:刪除規(guī)則。規(guī)則一旦失去作用,可以刪除。DROPRULESex_rule8.1任務(wù)一規(guī)則的創(chuàng)建與管理二.使用表級規(guī)則步驟01:在SSMS中,打開目標(biāo)數(shù)據(jù)表【Files】節(jié)點(diǎn),右鍵單擊【約束】子節(jié)點(diǎn),從彈出的菜單中點(diǎn)擊【新建約束】命令,打開“Check約束”對話框,如圖8-8所示。圖8-8“Check約束”對話框8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟02:點(diǎn)擊【常規(guī)】欄中,“表達(dá)式”文本框右側(cè)的【打開】按鈕,打開“Check約束表達(dá)式”對話框。在“表達(dá)式”文本框中輸入“Sexin(‘男’,‘女’)”,如圖8-9所示。
依次關(guān)閉對話框,保存表的修改,“File”數(shù)據(jù)表中“Sex”字段就創(chuàng)建了Check約束,規(guī)定其數(shù)據(jù)要么是男,要么是女。圖8-9“Check約束表達(dá)式”對話框8.1任務(wù)一規(guī)則的創(chuàng)建與管理步驟03:刪除規(guī)則。如果規(guī)則不在需要,可以刪除。首先按照上面步驟打開如圖8-14的“CHECK約束”對話框。然后選中上題創(chuàng)建的規(guī)則“CK_File”,點(diǎn)擊對話框下方【刪除】按鈕完成刪除如圖8-10所示。依次關(guān)閉對話框,并保存表的修改,完成刪除選中約束確定刪除圖8-10規(guī)則的刪除8.2任務(wù)二PRIMARYKEY約束任務(wù)名稱:PRIMARYKEY約束任務(wù)描述:PRIMARYKEY約束,又稱主鍵約束。主鍵約束,顧名思義就是主要的、關(guān)鍵的約束。那么為什么在表中要建立主鍵約束呢?前面介紹過主鍵是表中的一個或多個字段,它的值用于惟一地標(biāo)識表中的某一條記錄。那么主鍵約束就是通過主鍵來實(shí)現(xiàn)對數(shù)據(jù)表中一個或多個字段的特定約束條件,本任務(wù)將介紹如何創(chuàng)建主鍵約束。8.2任務(wù)二PRIMARYKEY約束簡要分析:
主鍵是一種唯一關(guān)鍵字,表定義的一部分。一個表只能有一個主鍵,并且主鍵的字段不能包含空值,也不能重復(fù)。實(shí)現(xiàn)步驟:(1)使用圖形方式創(chuàng)建主鍵約束;(2)使用命令方式創(chuàng)建主鍵約束。8.2任務(wù)二PRIMARYKEY約束一.使用圖形方式管理主鍵約束步驟01:打開表編輯窗體。在SSMS中,打開目標(biāo)數(shù)據(jù)庫【OSAystem】節(jié)點(diǎn),找到目標(biāo)數(shù)據(jù)表【File】。右鍵單擊【File】表節(jié)點(diǎn),在彈出的菜單中點(diǎn)擊【設(shè)計】命令,打開數(shù)據(jù)表結(jié)構(gòu)設(shè)計窗體。步驟02:設(shè)置主鍵。右擊“列名”欄目中的【ID】字
段,在彈出的菜單中點(diǎn)擊【設(shè)置主鍵】命令。主鍵創(chuàng)建
完成后,8.2任務(wù)二PRIMARYKEY約束圖8-11設(shè)置主鍵8.2任務(wù)二PRIMARYKEY約束步驟03:
刪除主鍵。如果要取消已設(shè)置主鍵字段的主鍵約束,則右鍵單擊該主鍵字段,從彈出的菜單中點(diǎn)擊單擊【刪除主鍵】即可。如圖8-12所示。圖8-12刪除主鍵8.2任務(wù)二PRIMARYKEY約束二.使用命令方式創(chuàng)建主鍵約束步驟01:創(chuàng)建表時設(shè)置主鍵。在使用命令方式創(chuàng)建數(shù)據(jù)表時,可以直接為指定字段創(chuàng)建主鍵約束。例如在創(chuàng)建“File2”數(shù)據(jù)表時,直接為ID字段設(shè)定主鍵約束,在查詢編輯器窗口中輸入如下代碼。CREATETABLEFile2(IDintPrimarykey)8.2任務(wù)二PRIMARYKEY約束步驟02:已有表中創(chuàng)建主鍵。
如果在已經(jīng)創(chuàng)建完成的數(shù)據(jù)表中指定主鍵約束,需要修改表的結(jié)構(gòu)。例如在已創(chuàng)建的“File2”數(shù)據(jù)表中為“ID”字段創(chuàng)建主鍵約束,在查詢編輯器窗口中輸入如下代碼。ALTERTABLEFile2ADDCONSTRAINTtb_PRIMARYPRIMARYKEYCLUSTERED(ID)
友情提醒:因為主鍵具有唯一性和非空性,所以如果是在已經(jīng)建好的表中創(chuàng)建主鍵,一定要保證創(chuàng)建主鍵的列中沒有重復(fù)數(shù)據(jù),也沒有空值,否則會因為違反實(shí)體完整性而被系統(tǒng)拒絕創(chuàng)建。8.2任務(wù)二PRIMARYKEY約束1.PRIMARYKEY約束注意事項(1)一個表只能包含一個PRIMARYKEY約束。(2)由PRIMARYKEY約束生成的索引不會使表中的非聚集索引超過999個,聚集索引超過1個。(3)如果沒有為PRIMARYKEY約束指定CLUSTERED或NONCLUSTERED,并且沒有為UNIQUE約束指定聚集索引,則將對該P(yáng)RIMARYKEY約束使用CLUSTERED。(4)在PRIMARYKEY約束中定義的所有字段都必須定義為NOTNULL。如果沒有指定為Null性,則加入PRIMARYKEY約束的所有字段的為Null性都將設(shè)置為NOTNULL。8.2任務(wù)二PRIMARYKEY約束2.建立主鍵應(yīng)遵循的原則(1)主鍵應(yīng)當(dāng)是對用戶沒有意義的。如果用戶看到了一個表示多對多關(guān)系的連接表中的數(shù)據(jù),并抱怨它沒有什么用處,那就證明它的主鍵設(shè)計地很好。
(2)永遠(yuǎn)也不要更新主鍵。實(shí)際上,因為主鍵除了唯一地標(biāo)識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應(yīng)對用戶無意義的原則被違反了。
友情提醒:這項原則對于那些經(jīng)常需要在數(shù)據(jù)轉(zhuǎn)換或多數(shù)據(jù)庫合并時進(jìn)行數(shù)據(jù)整理的數(shù)據(jù)并不適用。8.2任務(wù)二PRIMARYKEY約束(3)主鍵不應(yīng)包含動態(tài)變化的數(shù)據(jù),如時間戳、創(chuàng)建時間字段、修改時間字段等。(4)主鍵應(yīng)當(dāng)由計算機(jī)自動生成。如果由人來對主鍵的創(chuàng)建進(jìn)行干預(yù),就會使它帶有除了唯一標(biāo)識一行以外的意義。一旦越過這個界限,就可能產(chǎn)生認(rèn)為修改主鍵的動機(jī),這樣,這種系統(tǒng)用來鏈接記錄行、管理記錄行的關(guān)鍵手段就會落入不了解數(shù)據(jù)庫設(shè)計的人的手中。8.2任務(wù)二PRIMARYKEY約束【操作實(shí)例8-2】創(chuàng)建主鍵
本操作實(shí)例實(shí)現(xiàn)對數(shù)據(jù)表創(chuàng)建主鍵的任務(wù)。分別使用圖形方式和命令方式完成主鍵的創(chuàng)建。
運(yùn)行下列命令,在數(shù)據(jù)庫中創(chuàng)建實(shí)例環(huán)境表“User2”。CREATETABLEUser2(IDint,Namechar(8),Passwordvarchar(18))
要求在該表中ID字段上創(chuàng)建主鍵。8.2任務(wù)二PRIMARYKEY約束1.使用圖形方式創(chuàng)建主鍵
在SSMS中,打開目標(biāo)數(shù)據(jù)庫【OSAystem】節(jié)點(diǎn),找到目標(biāo)數(shù)據(jù)表【User2】子節(jié)點(diǎn)。右鍵單擊【User2】表節(jié)點(diǎn),在彈出的菜單中點(diǎn)擊【設(shè)計】命令,進(jìn)入數(shù)據(jù)表結(jié)構(gòu)設(shè)計窗體,如圖8-13所示。右鍵單擊【ID】字段,在彈出的菜單中單擊【設(shè)置主鍵】命令。圖8-13設(shè)置主鍵8.2任務(wù)二PRIMARYKEY約束2.使用命令方式創(chuàng)建主鍵
在查詢編輯器窗口中輸入如下代碼。ALTERTABLEUser2ADDCONSTRAINTUser_PRIMARYPRIMARYKEYCLUSTERED(ID)8.3任務(wù)三FOREIGNKEY約束任務(wù)名稱:FOREIGNKEY約束任務(wù)描述:FOREIGNKEY約束,又稱外鍵約束。通俗的說,外鍵約束就是實(shí)現(xiàn)表與表之間關(guān)聯(lián)的約束,通過實(shí)現(xiàn)表與表之間的關(guān)聯(lián),確保數(shù)據(jù)的完整性和一致性。本任務(wù)將介紹如何使用圖形方式和命令方式創(chuàng)建FOREIGNKEY約束。8.3任務(wù)三FOREIGNKEY約束簡要分析:
在數(shù)據(jù)庫設(shè)計過程中,通常會遇到兩張不同數(shù)據(jù)表中的某些字段之間存在一定的關(guān)聯(lián)。也就是說在不同的表中,會分別存在一個具有相同含義的字段,而且其中一個字段的值獲取于另一張數(shù)據(jù)表中對應(yīng)字段。這時就需要將獲取數(shù)值的字段設(shè)置為外鍵,并于被獲取數(shù)據(jù)的字段建立關(guān)聯(lián)。實(shí)現(xiàn)步驟:(1)如何使用圖形方式創(chuàng)建外鍵。(2)如何使用命令方式創(chuàng)建外鍵。8.3任務(wù)三FOREIGNKEY約束一.使用圖形方式創(chuàng)建外鍵步驟01:打開“外鍵關(guān)系”對話框。在SSMS中,依次展開【OASystem】︱【表】︱【File】節(jié)點(diǎn),找到【鍵】子節(jié)點(diǎn),右擊【鍵】子節(jié)點(diǎn),在彈出的菜單中點(diǎn)擊【新建外鍵】命令,打開“外鍵關(guān)系”對話框,如圖8-14所示。圖8-14“外鍵關(guān)系”對話框8.3任務(wù)三FOREIGNKEY約束步驟02:打開“表和列”對話框。在“外鍵關(guān)系”對話框的“常規(guī)”欄中,單擊“表和列規(guī)范”文本框右側(cè)的打開按鈕,打開“表和列”對話框,如圖8-15所示。圖8-15“表和列”對話框8.3任務(wù)三FOREIGNKEY約束步驟03:設(shè)置外鍵。從彈出的“表和列”對話框中設(shè)置主、外鍵表及對應(yīng)字段。在“主鍵表”下拉框中選擇“Users”數(shù)據(jù)表,在下方的字段列表中選擇“UserID”字段?!巴怄I表”下拉框已經(jīng)默認(rèn)為打開的“File”表,所以只需要設(shè)定下方的字段為“UserID”字段,如圖8-16所示。單擊【確定】按鈕,完成設(shè)置。8.3任務(wù)三FOREIGNKEY約束圖8-16“表和列”對話框
友情提醒:在圖8-10中可以看出,外鍵表下拉框是不可用的,也就是不能更改的,所以在設(shè)置主外鍵關(guān)系時,一定需要在外間表中設(shè)置。8.3任務(wù)三FOREIGNKEY約束步驟04:保存、查看。關(guān)閉“外鍵關(guān)系”對話框,在表編輯窗體中單擊工具欄上的保存按鈕。打開基本表【File】節(jié)點(diǎn),單擊【鍵】子節(jié)點(diǎn),可以看到剛才創(chuàng)建的外鍵約束,如圖8-17所示。圖8-17
查看外鍵約束這就是剛才創(chuàng)建的外鍵約束8.3任務(wù)三FOREIGNKEY約束二.使用命令方式創(chuàng)建外鍵
除了使用圖形方式創(chuàng)建外鍵以外,還可以使用命令方式創(chuàng)建外鍵。例如,將上述外鍵通過命令方式創(chuàng)建,在查詢編輯器窗口中輸入如下代碼。ALTERTABLEFileADDCONSTRAINTFK_File_UsersFOREIGNKEY(UserID)REFERENCESUsers(UserID)8.3任務(wù)三FOREIGNKEY約束
友情提醒:在上述代碼中CONSTRAINT是定義外鍵約束的名稱,其后面的FK_File_Users就是外鍵約束的名稱,可以自己命名。FOREIGNKEY(UserID)是指定要設(shè)置外鍵約束的字段,其中(UserID)為要設(shè)置的字段名。REFERENCESUsers(UserID)是設(shè)置的主鍵表和主鍵表字段,其中“Users”為主鍵表名稱UserID為主鍵表中要關(guān)聯(lián)的字段。8.3任務(wù)三FOREIGNKEY約束1.什么是主鍵?什么是外鍵?它們之間存在的關(guān)系?(1)主鍵:能夠唯一標(biāo)識數(shù)據(jù)表中的每個記錄的字段或者字段的組合就稱為主鍵。
在主鍵中,不同的記錄對應(yīng)的字段取值不能相同(唯一性),也不能是空白的(非空性)。通過這個字段中不同的值可以區(qū)別各條記錄。就像區(qū)別不同的人,每個人都有名字,但它卻不能作為主鍵,因為人名很容易出現(xiàn)重復(fù),而身份證號是每個人都不同的,所以可以根據(jù)它來區(qū)別不同的人。數(shù)據(jù)表中作為主鍵的字段就要像人的身份證號一樣,必須是每個記錄的值都不同,這才能根據(jù)主鍵的值來確定不同的記錄。8.3任務(wù)三FOREIGNKEY約束
一個主鍵是唯一識別一個表的每一行記錄,但這只是其作用的一部分。主鍵的另一個作用是將記錄和存放在其他表中的數(shù)據(jù)進(jìn)行關(guān)聯(lián)。在這一點(diǎn)上,主鍵是不同表中各記錄間的簡單指針,主鍵不能是空值。
唯一約束是用于指定一個或多個字段的組合值具有唯一性,以防止在字段中輸入重復(fù)的值,所以,主鍵的值對用戶而言是沒有什么意義,并且和它賦予的值也沒有什么特別聯(lián)系。8.3任務(wù)三FOREIGNKEY約束(2)外鍵:如果某一數(shù)據(jù)表中某個字段的實(shí)質(zhì)內(nèi)容是另一張數(shù)據(jù)表中的主鍵字段,則這個字段就是這張數(shù)據(jù)表的外鍵字段。外鍵約束主要用來維護(hù)兩個表之間數(shù)據(jù)的一致性。(3)存在關(guān)系:在數(shù)據(jù)庫中,常常不只是一個表,這些表之間也不是相互獨(dú)立的,不同的表之間需要建立一種關(guān)系,才能將它們的數(shù)據(jù)相互溝通。8.3任務(wù)三FOREIGNKEY約束2.什么是主鍵表?什么是外鍵表?(1)主鍵表:在兩個相關(guān)聯(lián)的數(shù)據(jù)表中,主鍵字段所在的表,通常稱為主鍵表。(2)外鍵表:在兩個相關(guān)聯(lián)的數(shù)據(jù)表中,外鍵字段所在的表,通常稱為外鍵表。3.建立外鍵應(yīng)遵循的原則(1)為關(guān)聯(lián)字段創(chuàng)建外鍵;
(2)所有的主鍵都必須唯一;
(3)避免使用復(fù)合鍵;
(4)外鍵總是關(guān)聯(lián)唯一的鍵字段。8.3任務(wù)三FOREIGNKEY約束【操作實(shí)例8-3】使用圖形方式和命令方式創(chuàng)建外鍵關(guān)系
本操作實(shí)例實(shí)現(xiàn)兩個表之間關(guān)聯(lián)的任務(wù),分別使用圖形方式和命令方式完成。首先執(zhí)行下列語句,創(chuàng)建兩個基本表,搭建示例所需的數(shù)據(jù)庫環(huán)境。
8.3任務(wù)三FOREIGNKEY約束CREATETABLEType(IDintPRIMARYKEY,TypeNamechar(8))GOCREATETABLEBook(IDintPRIMARYKEY,BookTypeint,BookNamevarchar(20))GO實(shí)例要求將“Book”表中“Booktype”字段與“Type”表中的“ID”字段建立關(guān)聯(lián)。8.3任務(wù)三FOREIGNKEY約束一.使用圖形方式創(chuàng)建關(guān)系步驟01:打開SSMS。依次展開【OASystem】︱【表】︱【Book】節(jié)點(diǎn),找到【鍵】子節(jié)點(diǎn),右擊【鍵】子節(jié)點(diǎn),從彈出菜單中點(diǎn)擊【新建外鍵】命令,打開該表“外鍵關(guān)系”窗體,如圖8-18所示。圖8-18“Book”表的設(shè)計窗體8.3任務(wù)三FOREIGNKEY約束步驟02:
在對話框的“常規(guī)”欄中,單擊“表和列規(guī)范”文本框右側(cè)的打開按鈕,打開“表和列”對話框,如圖8-19所示。圖8-19
“表和列”對話框8.3任務(wù)三FOREIGNKEY約束步驟03:設(shè)置主、外鍵表及對應(yīng)字段。在“主鍵表”下拉框中選擇“Type”數(shù)據(jù)表,在下方的字段列表中選擇“ID”字段。從外鍵表下方的下拉框中選擇“BookType”字段,如圖8-20所示圖8-20主外鍵的設(shè)置8.3任務(wù)三FOREIGNKEY約束步驟04:
依次關(guān)閉“表和列”及“外鍵關(guān)系”對話框,保存基本表設(shè)置。二.使用命令方式創(chuàng)建外鍵
在查詢編輯器窗口中輸入如下代碼。ALTERTABLEBookADDCONSTRAINTFK_File_TypeFOREIGNKEY(BookType)REFERENCESType(ID)8.4任務(wù)四其他約束任務(wù)名稱:創(chuàng)建數(shù)據(jù)庫的其他約束任務(wù)描述:在數(shù)據(jù)庫中,為了保證數(shù)據(jù)的完整性,除了主鍵約束和外鍵約束以外,還有默認(rèn)約束(Default)、檢查約束(Check)、非空約束(NotNull)和唯一約束(Unique)。這些約束都是限定數(shù)據(jù)表中字段的條件,以實(shí)現(xiàn)數(shù)據(jù)完整性。防止因限定條件不正確或者沒有限定條件而導(dǎo)致的數(shù)據(jù)錯誤。8.4任務(wù)四其他約束簡要分析:
SQLServer2008中除了使用檢查約束、主鍵約束和外鍵約束來保持?jǐn)?shù)據(jù)完整性以外,還有一些其他約束作為限制數(shù)據(jù)值的條件,來保持?jǐn)?shù)據(jù)的完整性、正確性。接下來將介紹其他三種約束即:默認(rèn)約束、檢查約束、非空約束和唯一約束實(shí)現(xiàn)步驟:(1)思考這三種約束分別實(shí)現(xiàn)怎樣的功能?(2)掌握創(chuàng)建這三種約束的方法?(3)思考在什么情況下使用這三種約束?8.4任務(wù)四其他約束一.默認(rèn)約束(Default)步驟01:右鍵單擊【File】數(shù)據(jù)表節(jié)點(diǎn),從彈出的菜單中點(diǎn)擊【設(shè)計】命令,打開“File”數(shù)據(jù)表結(jié)構(gòu)菜單。如圖8-21所示。圖8-21“File”數(shù)據(jù)表結(jié)構(gòu)8.4任務(wù)四其他約束步驟02:
選擇“Nation”字段,在窗體下方“列屬性”窗格的“常規(guī)”欄中找到“默認(rèn)值或綁定”項,在對應(yīng)的文本框中輸入“漢族”,如圖8-22所示。這樣就為“File”數(shù)據(jù)表中的“Nation”(民族)字段設(shè)置了默認(rèn)值為“漢族”圖8-22為“Nation”字段設(shè)置默認(rèn)值在這里輸入“漢族”,SQLServer會自動的設(shè)置為默認(rèn)格式8.4任務(wù)四其他約束步驟03:
使用命令方式創(chuàng)建表的同時創(chuàng)建默認(rèn)。在創(chuàng)建表的同時,可以直接在某個字段的后面注明默認(rèn)值,例如:為“File3”數(shù)據(jù)表中“Nation”字段設(shè)置默認(rèn)值為“漢族”,代碼如下所示。CREATETABLEFile3(IDint,Nationnvarchar(50)DEFAULT'漢族')8.4任務(wù)四其他約束步驟04:為已創(chuàng)建好的數(shù)據(jù)表中字段設(shè)置默認(rèn)值。需要使用修改表語句。例如,為“File3”數(shù)據(jù)表中的“Nation”字段設(shè)置默認(rèn)值為“漢族”,代碼如下所示。ALTERTABLEFileADDCONSTRAINTDafult_NTDEFAULT'漢族'FORNation8.4任務(wù)四其他約束二.非空約束(NotNull)步驟01:
在SSMS中,右鍵單擊目標(biāo)表【Users】節(jié)點(diǎn),從彈出的菜單點(diǎn)擊【設(shè)計】命令,打開“Users”數(shù)據(jù)表編輯窗體,如圖8-23所示”圖8-23“Users”數(shù)據(jù)庫結(jié)構(gòu)窗口8.4任務(wù)四其他約束步驟02:
在每個字段后邊有一個“允許Null”欄目,可以設(shè)置每個字段的是否空選項。如果某個字段的該選項處于選中狀態(tài),則表明此字段值可以為空;如果沒有選中,則表明此字段不可以為空。
設(shè)置“User”表的“UserID”、“UserName”字段值不允許為空;“Password”、“Role”字段值可以為空,如圖8-23所示。8.4任務(wù)四其他約束步驟03:使用命令創(chuàng)建數(shù)據(jù)表時管理字段。創(chuàng)建表的同時,可以直接設(shè)置某個字段的非空性。例如,在創(chuàng)建“Users”表時,指定“UserID”、“UserName”字段值不允許為空,“Password”、“Role”字段值可以為空,代碼如下所示。USEOASystemCREATETABLEUsers(UserIDintnotnull,UserNamenvarchar(50)notnull,Passwordnvarchar(50)null,Roleintnull)8.4任務(wù)四其他約束步驟04:使用語句修改已存在數(shù)據(jù)表中字段的非空性。例如將“Users”數(shù)據(jù)表中的“UserName”字段修改為允許為空,代碼如下所示。ALTERTABLEUsersALTERCOLUMNUserNamenvarchar(50)Null
友情提醒:如果在創(chuàng)建書數(shù)據(jù)表時,未指定字段是否允許為Null,則系統(tǒng)自動將其設(shè)置為Null(允許為空)。8.4任務(wù)四其他約束三.唯一約束(Unique)唯一約束通常只使用語句方式完成。步驟01:創(chuàng)建數(shù)據(jù)表時,指定某一字段是唯一的。例如,將“Users”中的“UserName”字段設(shè)置為唯一字段,代碼如下USEOASystemCREATETABLEUsers(UserIDintnotnull,UserNamenvarchar(50)notnullunique,Passwordnvarchar(50)null,Roleintnull)8.4任務(wù)四其他約束步驟02:
將已創(chuàng)建數(shù)據(jù)表中的某一字段指定為唯一字段。例如,將“Users”表中“Password”字段指定為唯一字段,代碼如下所示。ALTERTABLEUsersADDCONSTRAINTUnique_PasswordUNIQUE(Password)8.4任務(wù)四其他約束1.概念(1)Default約束:即默認(rèn)約束,是指為數(shù)據(jù)表中某些字段設(shè)置默認(rèn)值。如果在向數(shù)據(jù)表中插入一行數(shù)據(jù)時,沒有指定該字段的具體數(shù)值,則系統(tǒng)將設(shè)置的默認(rèn)值自動插入到該字段中。(2)NotNull約束:即非空約束,是指在數(shù)據(jù)表中指定某些字段不可以為空值。向數(shù)據(jù)表中插入數(shù)據(jù)時,如果未向含有NotNull約束的字段中插入數(shù)據(jù),則SQLServer會提示錯誤信息。(3)Unique約束:即唯一約束,是指在數(shù)據(jù)表中某些字段的值不可以重復(fù)。8.4任務(wù)四其他約束主鍵約束與唯一約束的區(qū)別唯一約束可以確保在非主鍵列中不輸入重復(fù)的值;在一個數(shù)據(jù)表中可以定義多個唯一約束,但只能定義一個主鍵約束;
唯一約束可以允許其字段值為Null,但主鍵約束不可以為Null;外鍵約束可以引用唯一約束。8.4任務(wù)四其他約束一.創(chuàng)建默認(rèn)值步驟01:右鍵單擊【File】數(shù)據(jù)表節(jié)點(diǎn),從彈出的菜單中點(diǎn)擊【設(shè)計】命令,打開“File”數(shù)據(jù)表編輯窗體。步驟02:選擇“Sex”字段,在窗體下方的“列屬性”的“常規(guī)”欄中找到“默認(rèn)值或綁定”項,在對應(yīng)的文本框中輸入“男”,如圖8-24所示。8.4任務(wù)四其他約束圖8-24為“Sex”字段設(shè)置默認(rèn)值8.4任務(wù)四其他約束二.設(shè)置非空約束步驟01:在SSMS中,右鍵單擊目標(biāo)表【File】節(jié)點(diǎn),從彈出的菜單中點(diǎn)擊【設(shè)計】命令,打開“File”數(shù)據(jù)表編輯窗體。步驟02:根據(jù)任務(wù)要求,將“Sex”字段對應(yīng)的“允許Null值”選項勾掉,設(shè)置為不允許為空,如圖8-25所示。8.4任務(wù)四其他約束圖8-25為“Sex”字段設(shè)置非空約束8.4任務(wù)四其他約束三.設(shè)置唯一性約束
根據(jù)任務(wù)要求,在查詢編輯器窗口中輸入如下代碼,完成對“UserID”字段的唯一性約束設(shè)置。ALTERTABLEFileADDCONSTRAINTUnique_UserIDUNIQUE(UserID)8.5微軟MTA認(rèn)證考試指南官方樣題1:EpsilonPiTau校友數(shù)據(jù)庫正在取得進(jìn)展!Natasha已經(jīng)應(yīng)用規(guī)范化的概念以減少存儲需求,并簡化查詢和更新過程。將數(shù)據(jù)庫放到第三規(guī)范形式的結(jié)果是四個單獨(dú)表:人員統(tǒng)計、郵政編碼、學(xué)位和捐款額。下一步是創(chuàng)建每個表的主鍵、外鍵和復(fù)合鍵。此步驟將確保高級別的數(shù)據(jù)完整性、信息一致性和可用性。8.5微軟MTA認(rèn)證考試指南1.明確人員統(tǒng)計表的最佳主鍵:姓氏 b.校友ID(系統(tǒng)自動生成)c.姓氏和名字2.以下哪個是外鍵的示例?a.郵政編碼 b.畢業(yè)年份 c.姓氏3.什么不是主鍵的規(guī)則?a.必須唯一b.必須是數(shù)字c.必須包含除NULL以外的值8.5微軟MTA認(rèn)證考試指南
本章以數(shù)據(jù)完整性為核心,展開了數(shù)據(jù)約束的創(chuàng)建與管理、PRIMARYKEY約束的使用方法、FOREIGNKEY約束的使用以及其他約束的四個模塊的講解。具體講述創(chuàng)建約束、約束的管理、PRIMARYKEY約束的創(chuàng)建、FOREIGNKEY約束Default約束、Check約束、Unique約束、NotNull約束的創(chuàng)建和使用。8.5微軟MTA認(rèn)證考試指南一.填空題1.規(guī)則約束可以分為(
)和(
)兩級。2.主鍵是為了保證數(shù)據(jù)庫的(
)完整性。3.?dāng)?shù)據(jù)完整性是指數(shù)據(jù)的(
)和(
)。4.某個表中要求某個字段的值必須在50-100之間,這屬于(
)完整性。5.主鍵創(chuàng)建好后,該字段就自動具有了(
)和(
)約束。8.5微軟MTA認(rèn)證考試指南二.選擇題1.用來標(biāo)識事物的數(shù)據(jù)庫對象是(
)。A.主鍵B.外鍵C.規(guī)則D.默認(rèn)。2.某種數(shù)據(jù)庫對象可以簡化用戶操作,將一些固定的值在用戶不聲明的情況下填入相應(yīng)字段中,這種對象是(
)。A.主鍵B.外鍵C.規(guī)則D.默認(rèn)。8.5微軟MTA認(rèn)證考試指南3.關(guān)于主鍵說法錯誤的是(
)。A.主鍵
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物聯(lián)網(wǎng)技術(shù)在露營地管理中的應(yīng)用-洞察分析
- 消防安全知識普及策略-洞察分析
- 采購合同風(fēng)險管理心得與感悟解析3篇
- 采購合同評審表的制作步驟3篇
- 采購合同的續(xù)簽與終止條件3篇
- 采購合同框架協(xié)議的簽訂背景3篇
- 采購合同分類的詳細(xì)解讀3篇
- 稅務(wù)審計與合規(guī)責(zé)任-洞察分析
- 2024年02月江蘇2024屆南京銀行南通分行春季校園招考筆試歷年參考題庫附帶答案詳解
- 采購合同的電子支付系統(tǒng)3篇
- 2023年北京大學(xué)圖書資料崗位招聘筆試真題
- 2025九年級道德與法治備考復(fù)習(xí)計劃
- 廣東能源集團(tuán)校園招聘筆試真題
- 【MOOC】高級語言程序設(shè)計-南京郵電大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年企業(yè)核心管理人員勞動協(xié)議樣本版B版
- 微信公眾號信息發(fā)布流程
- 單位和個人簽的銷售合同范本(2篇)
- 商務(wù)報價技巧培訓(xùn)
- 政治學(xué)概論歷年試題(參考答案)
- 商場防恐應(yīng)急管理制度
- 銷售轉(zhuǎn)正述職
評論
0/150
提交評論