數(shù)據(jù)庫原理與應用快速入門 課件 3.1 鍵_第1頁
數(shù)據(jù)庫原理與應用快速入門 課件 3.1 鍵_第2頁
數(shù)據(jù)庫原理與應用快速入門 課件 3.1 鍵_第3頁
數(shù)據(jù)庫原理與應用快速入門 課件 3.1 鍵_第4頁
數(shù)據(jù)庫原理與應用快速入門 課件 3.1 鍵_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

數(shù)據(jù)庫原理與應用快速入門3.1鍵3.2級聯(lián)更新和級聯(lián)刪除3.3表間聯(lián)系第3章

理解數(shù)據(jù)庫相關(guān)概念3.4排序與索引3.5實施約束3.1.1主鍵和實體完整性3.1.2為表設(shè)置主鍵3.1鍵3.1.3外鍵和參照完整性3.1.4為表設(shè)置外鍵3.1.1主鍵和實體完整性鍵(Key)是關(guān)系中一列或者多列的組合。關(guān)系中存在一些鍵,它們保存的數(shù)據(jù),其值是唯一的,可以用來唯一地標識表中的一條記錄。我們從這些能唯一標識一條記錄的鍵中選擇一個作為主鍵(PrimaryKey)。簡單的情況下,主鍵只包含一列,在復雜的情況下,主鍵可能包含多列,甚至包含關(guān)系中的全部列。3.1.1主鍵和實體完整性請注意,判斷某些鍵是否能唯一標識一條記錄,僅對關(guān)系中現(xiàn)有的數(shù)據(jù)進行檢查是不夠的?,F(xiàn)有的數(shù)據(jù)沒有重復,并不代表將來保存在關(guān)系中的數(shù)據(jù)不會發(fā)生重復。在實際應用中,數(shù)據(jù)庫設(shè)計者必須詢問用戶或相關(guān)專家,以確定哪些鍵能唯一標識一條記錄。3.1.1主鍵和實體完整性選取主鍵的一般原則是,主鍵盡量簡單而確定。整型數(shù)據(jù)操作起來效率比其他數(shù)據(jù)類型高,主鍵應優(yōu)先考慮整型;而隱私信息則最好不要用作主鍵,如身份證號。3.1.1主鍵和實體完整性主鍵確定后,我們在描述表的結(jié)構(gòu)時可在主鍵的下方加上下劃線。students(stuId,stuName,class,sex,birth,telNo,Email,comment)3.1.1主鍵和實體完整性既然主鍵用于唯一標識關(guān)系中的一條記錄,那么主鍵下的數(shù)據(jù)項不能為空值,因為空值不能用于標識記錄。同時,主鍵下的數(shù)據(jù)項也不能出現(xiàn)重復,因為一旦發(fā)生重復,就不再是唯一標識了。這種保證主鍵字段的取值唯一且不能為空值的規(guī)則,稱為實體完整性。3.1.2為表設(shè)置主鍵設(shè)置主鍵有兩種方式,一是直接通過命令進行設(shè)置,二是通過圖形化工具進行設(shè)置。3.1.2為表設(shè)置主鍵通過命令為表設(shè)置主鍵CREATETABLE表名(列名1數(shù)據(jù)類型[列級約束條件][默認值],列名2數(shù)據(jù)類型[列級約束條件][默認值],......[表級約束條件]);創(chuàng)建表時,可以在列級約束條件或表級約束條件中設(shè)置主鍵。在列級約束條件中設(shè)置主鍵適用于主鍵是單個列的情況,直接在該列的數(shù)據(jù)類型后面加上PRIMARYKEY。在表級約束條件中設(shè)置主鍵適用于主鍵是多個列的組合的情況,格式為PRIMARYKEY(列名1,列名2...)。3.1.2為表設(shè)置主鍵【例3-1】在數(shù)據(jù)庫student中創(chuàng)建數(shù)據(jù)表students,同時指定stuId列為主鍵。createtablestudents(stuIdchar(9)primarykey,stuNamevarchar(10),classvarchar(30),sexenum('男','女'),birthdate,telNovarchar(15),Emailvarchar(50),commentvarchar(100));3.1.2為表設(shè)置主鍵【例3-2】在數(shù)據(jù)庫student中創(chuàng)建數(shù)據(jù)表sc,同時指定stuId和corId列組合為主鍵。createtablesc(stuIdchar(9),corIdchar(3),scoredecimal(4,1),strDatedate,primarykey(stuId,corId));3.1.2為表設(shè)置主鍵如果一個數(shù)據(jù)表已經(jīng)存在于數(shù)據(jù)庫系統(tǒng)中,只是在創(chuàng)建表時沒有設(shè)置主鍵,則可以使用修改表命令增加主鍵的設(shè)置。命令如下:

ALTERTABLE表名MODIFY字段名數(shù)據(jù)類型PRIMARYKEY;3.1.2為表設(shè)置主鍵【例3-3】對于數(shù)據(jù)庫student中已經(jīng)存在的數(shù)據(jù)表courses,設(shè)置列corId為主鍵。

ALTERTABLEcoursesMODIFYcorIdPRIMARYKEY;3.1.2為表設(shè)置主鍵通過圖形化工具為表設(shè)置主鍵【例3-4】使用Navicat為數(shù)據(jù)庫student中的students表設(shè)置主鍵。3.1.2為表設(shè)置主鍵通過圖形化工具為表設(shè)置主鍵【例3-5】使用Navicat為數(shù)據(jù)庫student中的sc表設(shè)置主鍵。3.1.3外鍵和參照完整性所謂外鍵(ForeignKey),指的是在關(guān)系A(chǔ)中的鍵F,如果與關(guān)系B中的主鍵K相對應,則鍵F稱為關(guān)系A(chǔ)的外鍵。3.1.3外鍵和參照完整性外鍵的數(shù)據(jù)必須在相對應的主鍵中預先存在的規(guī)則,稱為參照完整性。參照完整性在一定程度上保證了數(shù)據(jù)庫中數(shù)據(jù)的正確性。3.1.4為表設(shè)置外鍵設(shè)置外鍵有兩種方式,一是直接通過命令進行設(shè)置,二是通過圖形化工具進行設(shè)置。3.1.4為表設(shè)置外鍵通過命令為表設(shè)置外鍵創(chuàng)建表時,可以在表級約束條件中設(shè)置外鍵。設(shè)置外鍵的命令語法格式如下:

[CONSTRAINT外鍵名]FOREIGNKEY(列名)REFERENCES主表名(列名)其中,外鍵名是設(shè)置的外鍵的名稱,可以省略不寫;列名為要設(shè)置外鍵的列,主表名為其對應的主鍵表名,列名為主鍵列名。3.1.4為表設(shè)置外鍵【例3-6】在數(shù)據(jù)庫student中創(chuàng)建數(shù)據(jù)表sc,指定stuId和corId列組合為主鍵。同時,指定stuId列為外鍵,參考students表的主鍵stuId,指定corId列為外鍵,參考courses表的主鍵corId。createtablesc(stuIdchar(9),corIdchar(3),scoredecimal(4,1),strDatedate,primarykey(stuId,corId),Foreignkey(stuId)referencesstudents(stuId),Foreignkey(corId)referencescourses(corId));3.1.4為表設(shè)置外鍵通過圖形化工具設(shè)置外鍵【例3-7】使用Navicat為數(shù)據(jù)庫student中的sc表設(shè)置外鍵。3.2級聯(lián)更新和級聯(lián)刪除3.2級聯(lián)更新和級聯(lián)刪除所謂級聯(lián)更新,指在設(shè)置好外鍵的表A和B之間,如果表B的主鍵K中某一數(shù)據(jù)項發(fā)生更改,則數(shù)據(jù)庫會自動更改表A的外鍵F中對應的數(shù)據(jù)項(如果存在對應)。3.2級聯(lián)更新和級聯(lián)刪除所謂級聯(lián)刪除,指如果表B的主鍵K中某一數(shù)據(jù)項被刪除了,則數(shù)據(jù)庫會自動刪除表A的外鍵F中對應的數(shù)據(jù)項(如果存在對應)。3.2級聯(lián)更新和級聯(lián)刪除【例3-8】使用Navicat分別為student數(shù)據(jù)庫中的students表和sc表、courses表和sc表之間的主外鍵關(guān)系設(shè)置級聯(lián)更新和級聯(lián)刪除。3.2級聯(lián)更新和級聯(lián)刪除【例3-8】使用Navicat分別為student數(shù)據(jù)庫中的students表和sc表、courses表和sc表之間的主外鍵關(guān)系設(shè)置級聯(lián)更新和級聯(lián)刪除。3.3.1一對一聯(lián)系3.3.2一對多聯(lián)系3.3表間聯(lián)系3.3.3多對多聯(lián)系3.3.1

一對一聯(lián)系如果第一個表的一條記錄僅關(guān)聯(lián)到第二個表的一條(或零條)記錄,并且第二個表的一條記錄也僅關(guān)聯(lián)到第一個表的一條記錄(注意,此時必須有一條關(guān)聯(lián)記錄,不能是零條),就稱這對表之間存在一對一的聯(lián)系。這時,第一個表為父表,第二個表為子表。3.3.2

一對多聯(lián)系如圖3-15所示,students表中含有“dorNo”這一外鍵,表示宿舍序號,對應dormitory表中的主鍵“no”?,F(xiàn)實的情況是,一個學生住在一間宿舍,一間宿舍可以住多名學生,或者一名學生都不住。表現(xiàn)在表上,對于students表,每條記錄有一個宿舍序號dorNo;dormitory表(no為主鍵)的一條記錄對應學生表(dorNo為外鍵)零條或多條記錄。這種表間聯(lián)系即為一對多聯(lián)系,其中dormitory表是父表,students表是子表。一對多聯(lián)系是數(shù)據(jù)庫中出現(xiàn)最多、最為重要的表間聯(lián)系。3.3.2

一對多聯(lián)系3.3.3

多對多聯(lián)系如果第一個表的一條記錄可以關(guān)聯(lián)到第二個表的一條或多條記錄,并且第二個表的一條記錄,也可關(guān)聯(lián)到第一個表的一條或多條記錄,或者更精確地說,第一個表與第二個表是一對多,第二個表與第一個表也是一對多,就稱這兩個表之間存在多對多聯(lián)系。3.3.3

多對多聯(lián)系多對多的聯(lián)系難以在數(shù)據(jù)庫中直接表示,一般要轉(zhuǎn)換成兩個一對多的聯(lián)系。3.3.3

多對多聯(lián)系了解了表間聯(lián)系之后,我們?nèi)绾闻袛鄶?shù)據(jù)庫中存在的多個表兩兩之間到底有沒有聯(lián)系,又是哪種聯(lián)系呢?可以采用以下的步驟進行判斷:

(1)看看兩個表之間是否存在主外鍵的關(guān)聯(lián),即一個表的主鍵是否在另外一個表中出現(xiàn)了。如果不存在,則這兩個表一般沒有聯(lián)系。如果存在關(guān)聯(lián),則繼續(xù)步驟(2)。

(2)看看主鍵所在表中的一條記錄對應外鍵所在表的幾條記錄。如果主鍵表一條記錄僅對應外鍵表一條或零條記錄,則這兩個表之間存在一對一聯(lián)系;如果主鍵表一條記錄對應外鍵表多條或零條記錄,則這兩個表之間存在一對多聯(lián)系。實際上,一對多的聯(lián)系是數(shù)據(jù)庫中存在最多的表間聯(lián)系。多對多聯(lián)系因為難以在數(shù)據(jù)庫中表達,一般都會轉(zhuǎn)換成兩個一對多來表示。3.4.1排序3.4.2索引3.4排序和索引3.4.1

排序在數(shù)據(jù)庫中,常規(guī)的排序規(guī)則如下:(1)數(shù)值型數(shù)據(jù):按值的大小進行排序。(2)英文字符:按英文碼表內(nèi)的編碼進行排序,如ASCII碼。(3)中文字符:按中文碼表內(nèi)的編碼進行排序。表面上看,一般是按拼音的字典順序進行排序。(4)英文符號比中文符號小,中文符號比中文字小,而空值是最小的。3.4.1

排序在數(shù)據(jù)庫中,常規(guī)的排序規(guī)則如下:(5)可能在數(shù)據(jù)庫系統(tǒng)中,指定了別的排序規(guī)則,如漢字按筆畫順序排序。也可能在已有的排序規(guī)則基礎(chǔ)上,加上更多的規(guī)則,如加上一條“英文不區(qū)分大小寫”。(6)字符串確定大小的方法:逐個比較相應位置的字符,先出現(xiàn)大字符的字符串較大。(7)不同類型的數(shù)據(jù)無法正確比較大小。3.4.2

索引索引本質(zhì)上來說,就是一種排序。在已排序的表中查找數(shù)據(jù),通常速度會更快。索引的作用主要是為了加快數(shù)據(jù)的檢索定位。有時,表中有索引和沒有索引,查詢的性能相差極遠,足以影響用戶的體驗。3.4.2

索引圖3-19是索引原理的簡單示意圖。3.4.2

索引實際上,表上的索引并不是越多越好。通常情況下,只有當經(jīng)常查詢索引列中的數(shù)據(jù)時,才需要對該列創(chuàng)建索引。索引數(shù)據(jù)會占用磁盤空間,過度索引可能降低數(shù)據(jù)添加、刪除和更新的速度。不過在多數(shù)情況下,索引所帶來的數(shù)據(jù)檢索速度的優(yōu)勢大大超過它的不足之處。另外,如果列的數(shù)據(jù)存在大量重復,索引的效果將不明顯。3.4.2

索引常用的索引類型有:唯一索引、非唯一索引、主鍵索引等。唯一索引不允許兩行數(shù)據(jù)具有相同的索引值,但允許有空值。如果現(xiàn)有數(shù)據(jù)中存在重復的鍵值,則只能創(chuàng)建非唯一索引。當新數(shù)據(jù)存入使表中的鍵值重復時,若預先在該鍵上建有唯一索引,數(shù)據(jù)庫將拒絕接受此數(shù)據(jù)。數(shù)據(jù)庫對于唯一索引和非唯一索引的組織機制是不同的。定義表時,系統(tǒng)自動為主鍵創(chuàng)建主鍵索引,主鍵索引是唯一索引的特殊類型。主鍵索引要求主鍵中的每個值是唯一的。當在查詢中使用主鍵索引時,訪問數(shù)據(jù)的速度很快。3.4.2

索引表3.8student數(shù)據(jù)庫中的索引設(shè)計表索引列索引類型理由studentsstuId主鍵索引作為主鍵,索引自動產(chǎn)生。stuName非唯一索引經(jīng)常按姓名查找數(shù)據(jù)。birth非唯一索引經(jīng)常計算年齡,做與出生年月日相關(guān)的查找。telNo非唯一索引有時按電話查找數(shù)據(jù)。coursescorId主鍵索引作為主鍵,索引自動產(chǎn)生。corName唯一索引常按課程名查找數(shù)據(jù),希望所有課程都有唯一名稱,以示區(qū)分。scstuId,corId主鍵索引作為主鍵,索引自動產(chǎn)生。strDate非唯一索引選修時,需經(jīng)常作時間判斷,限定時間范圍等。3.4.2

索引為表創(chuàng)建索引的命令格式如下:

CREATE[UNIQUE]INDEX索引名ON表名(列名)[ASC|DESC]其中,UNIQUE為可選參數(shù),表示唯一索引;索引名最好使用有意義的名稱以方便識別;如果基于數(shù)據(jù)表中的單列創(chuàng)建索引,則列名為單個列,如果基于多列創(chuàng)建索引,則列名包含多個,用逗號隔開;ASC或DESC指定升序或降序排列索引數(shù)據(jù)。3.4.2

索引【例3-9】在student數(shù)據(jù)庫中,為courses表的corName列設(shè)置唯一索引。3.5.1實施非空約束3.5.2實施唯一約束3.5實施約束3.5.3實施默認約束3.5.4實施用戶自定義約束3.5.

實施約束約束,是施加在數(shù)據(jù)庫的表上或者表與表之間的一些規(guī)則。約束的作用是保證數(shù)據(jù)庫中的數(shù)據(jù)始終處于正確的狀態(tài)。要注意的是,有實在的意義的規(guī)則才是我們所需要的,規(guī)則必須在數(shù)據(jù)的有效性、一致性方面發(fā)揮確切有效的作用。3.5.

實施約束判斷一個約束是否必要,可根據(jù)以下幾個原則:1)可減少輸入錯誤,保證數(shù)據(jù)的有效性。2)約束能夠滿足業(yè)務(wù)的需求,是用戶提出來的,不是自己硬找出來的。3)當指定一個鍵是主鍵或外鍵時,此處隱含了約束(即實體完整性和參照完整性)。3.5.1

實施非空約束如果對表中的列實施了非空約束,則該列的取值不允許為空值。如果用戶在實施了非空約束的列上輸入了空值,數(shù)據(jù)庫系統(tǒng)將會報錯。非空約束使用“notnull”來表示。3.5.1

實施非空約束【例3-10】對students表的stuName列實施非空約束。createtablestudents(stuIdchar(9)primarykey,stuNamevarchar(10)notnull,classvarchar(30),sexenum('男','女'),birthdate,telNovarchar(15),Emailvarchar(50),commentvarchar(100));3.5.2

實施唯一約束如果對表中的列實施了唯一約束,則該列的取值不允許重復。如果用戶在實施了唯一約束的列上輸入了重復值,數(shù)據(jù)庫系統(tǒng)將會報錯。實施了唯一約束的列允許為空,但空值只能出現(xiàn)一次。唯一約束使用“unique”來表示。3.5.2

實施唯一約束【例3-11】對courses表的corName列實施唯一約束。createtablecourses(corIdchar(3)primarykey,corNamevarchar(30)unique,per

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論