10-1 資料庫管理系統簡介 10-2 關聯式資料模式和查詢語言 10-3 Access 簡介 10-4 XML 簡介 第10章 資料庫 10-1 資料庫管理系統簡介 10-2 關聯式資料模式和查詢語言 10-3 Access 簡介 10-4 XML 簡介
10-1 資料庫管理系統簡介 資料庫系統 資料庫系統應用 建立資料庫系統的方法 將資料數位化並輔以電腦處理 銀行記錄客戶存款與提款金額 航空公司管理班機航次和定位資料 學校記錄學籍和選課成績 等等 建立資料庫系統的方法 利用程式語言(缺點請見下頁) 利用專門的資料庫軟體
利用程式語言的缺失 造成資料的重複與不一致性 資料難以存取 資料的限制難以修改 難以達到資料異動的一致性 併行存取資料的錯誤 安全控管的困難 資料庫軟體提供資料分析和限定的工具來改善以上缺失 難以達到資料異動的一致性 資料庫軟體利用復原的機制 併行存取資料的錯誤 資料庫軟體利用鎖定的機制 安全控管的困難 資料庫軟體設定使用者的權限
資料庫系統架構
資料庫系統架構(續) 查詢處理模組 儲存處理模組 接收資料庫管理者下達的DDL(資料定義語言),將定義放在資料字典。 接收使用者下達的DML(資料處理語言)查詢句,利用編譯器解析後,透過執行引擎選擇最有效的執行方式。 儲存處理模組 檔案處理模組:管理資料存放的檔案 安全控管模組:檢查使用者的權限 異動處理模組:確定資料庫內容的一致性
資料庫管理者 簡稱DBA 具有專門技術且瞭解整個系統的人 職責包含下列幾項: 決定哪些資料包含在資料庫內,且設定資料彼此之間的關聯 設計資料存放在硬碟裡面的架構 建立使用者帳號 執行安全的控管 週期性的資料維護,譬如:將資料備份、確定硬碟空間是否足夠、監控系統的效能並作適當的調整 等等
10-2 關聯式資料模式和查詢語言 資料模式 關聯式模式 資料表示工具 早期有網路模式和階層模式 1970年由Codd提出 大多數商用的資料庫軟體都是建構於此模式之上 資料表示成一個個關聯
關聯 如同一個表格,由「列」和「欄」所構成 欄 列 每一欄各自對應到一個要表示的資料特性,稱作屬性(attribute)。 在學生關聯中(見下頁),定義了系別、年級、學號、姓名、地址、監護人、成績排名等屬性 。 列 代表了這個關聯集合裡的某一筆資料,稱作資料列(tuple)。 學生關聯(見下頁)的第一列,表示了一個學生,其系別為「資工系」、年級為「4」、學號為「B9201」、姓名為「王雅蕙」、地址為「台北市」、監護人為「王爸爸」、排名為「1」。
學生(student)關聯
SQL 標準的關聯式查詢語言 由三個部分所構成 查詢句1:輸出學號「B9201」同學的地址與監護人 輸出結果 SELECT:列舉欲顯示給使用者的屬性 FROM:所參考到的關聯 WHERE:資料列的選擇條件 查詢句1:輸出學號「B9201」同學的地址與監護人 輸出結果
條件限制 利用算數運算子:如「>」、「<」等 使用邏輯運算子:如「and」、「or」、「not」 查詢句2:選出所有在系上排名前10名的同學學號和姓名 使用邏輯運算子:如「and」、「or」、「not」 查詢句3:針對「資工系」的學生查出排名前10名的同學
條件限制(續) 查詢句2的輸出結果 成績關聯
參考多個關聯 當所需要的資料表示在不同關聯裡 常見的錯誤:直接把所要的關聯寫在FROM子句裡,而不加以限制 錯誤範例: 錯誤結果:產生學生關聯的10筆資料列,和成績關聯裡的6筆資料列,所有可能的組合,包含許多不合理或無意義的資料列 (見下頁第3到6筆資料列)
錯誤結果
連結多個關聯 正確寫法:將參考到的表格,以適當的屬性串連起來,我們稱作表格的連結(join) 範例: 正確結果
連結多個關聯(續) 範例:取出「王雅蕙」同學所修習的課程 範例:取出「王雅蕙」同學修習「資料庫」這門課的成績: 在學號欄位之前,利用符號「.」加註來源表格,以避免產生混淆
資料定義語言 簡稱DDL,提供建立資料表綱要(schema)的功能。 在定義一個關聯的綱要時,我們除了提供此關聯和所有屬性的名稱,每個屬性的資料型態及資料大小,都必須加以指定。 範例:學生表格定義
欄位資料型態 字串 char:使用所有宣告的空間 varchar:使用輸入資料大小的空間 數字 integer:整數 real:實數 等等
主鍵限制 定義在某一個表格上,它可以由一個屬性或多個屬性所構成 條件:是在任何情況下,這些屬性的屬性值在整個表格裡都不會重複 當有很多種可以成為主鍵的屬性,選擇一個合理且比較通用 範例:選擇「學號」為學生表格的主鍵。
外來鍵限制 定義在某一個表格上,表示和另一個表格之間的「從屬」關係 所定義的外來鍵屬性,對應到另一個表格的主鍵;且所有的外來鍵屬性,都曾經在另一個表格的主鍵欄位出現過 範例:將成績表格內的「學號」屬性定義為外來鍵,對應到為學生表格的「學號」
定義範例
10-3 Access簡介 為美國微軟公司所發展的資料庫軟體,是廣受歡迎的Office系列中之一員 啟動Access的方法,就如同啟動Word一樣,透過【開始】功能表,進入到【程式集】選項,即可點選【Microsoft Access】將Access啟動。 啟動之後的畫面類似Office其他軟體,Access的功能表如下圖:
建立資料庫 進入Access之後,在出現的視窗中按一下【Access空白資料庫】指令 再按【確定】,出現【開新資料庫】對話方塊 選取目錄以指定【儲存位置】 輸入資料庫檔案名稱(副檔名為mdb) 建立一個「學校」資料庫,檔名是「School.mdb」,檔案存放在「C」槽的「database」目錄 ,畫面如右:
資料庫視窗 左邊的窗格:為物件按鈕,如【資料表】【查詢】等 右邊的窗格,對應於此物件的命令或資訊
資料表功能表 開啟:將一個已經建立好的資料表打開,會顯示這個資料表內的所有資料列 設計:修改一個既有資料表的欄位格式及限制 新增:新增一個資料表 刪除:刪除一個既有的資料表 大圖示、小圖示、清單、詳細資料:指定資料表在資料庫視窗右邊窗格的顯示方式,如同檔案管理員所提供的功能
建立資料表的不同方法 資料工作表檢視:等同於選取資料庫視窗中的【藉由輸入資料建立資料表】,詳見下面的討論 設計檢視:等同於選取資料庫視窗中的【使用設計檢視建立資料表】,詳見下面的討論 資料表精靈:等同於選取資料庫視窗中的【使用精靈建立資料表】,也就是利用Access提供的內建範例資料再加以修改 匯入資料表:將外部資料轉入 連結資料表:連結外部資料
資料工作表檢視 會出現一個包含10欄位和21列記錄的空白資料表,其內建的欄位名稱依序為【欄位1】、【欄位2】等 可選取某一個欄位(該欄位會反白),然後按滑鼠右鍵,選擇【更改欄名】,再輸入有意義的欄位名稱
資料工作表檢視(續) 確定完欄位個數與名稱後,可直接輸入資料列 完成後,按一下視窗右上角的【x】,並鍵入表格的名稱「Student」
設計檢視步驟 設計個別欄位 欄位名稱、資料類型、一般限制 設計主鍵限制(設計檢視畫面如下:)
資料型態 文字:資料為字串,最長可包含255個字元 數字:資料為可計算之數值,可根據資料值的範圍或是否允許小數點,選擇「整數」、「長整數」、「單精準度」或「雙精準度」等 日期/時間:其中包含年、月、日、時、分、秒 自動編號:自動插入的唯一順序值,有時具有主鍵的功能 備忘:可輸入一長段文章,最長為65535個字元 OLE物件:其他程式建立的OLE物件,如圖形或Word文件,可連結或內嵌在 Microsoft Access 資料表之中 是/否:只能在二種值中選一,譬如「是/否 」、「真/假」 或「開/關」
一般欄位限制 格式: 資料顯示在螢幕上與列印出來的方式,若設定格式為「百分比」,則欄位值「0.6」會顯示為「60%」。 輸入遮罩: 遮罩是用來提醒或控制資料輸入的樣子,設定輸入遮罩時是以分號隔出以下三個區段: 第一區段:遮罩本身 第二區段:「0」表示顯示在螢幕上(非使用者輸入)的符號也會被儲存在資料庫中;否則使用「1」。 第三區段:提醒使用者輸入的定位字元。 譬如,「電話號碼」欄位的輸入遮罩可設定為 「\(999\) 0000\-0000;0;#」
一般欄位限制(續) 預設值: 使用者若未輸入任何值,則系統會為該欄位自動補上此值。譬如,將「性別」欄位預設值設定為「F」 驗證規則: 利用函數或算數運算子來寫出限制輸入值的式子。譬如,我們可利用「like」函數,設定「電子郵件」欄位的驗證規則為「like “*@*”」 驗證文字: 這裡是設定違反驗證規則時的提醒文字 必須有資料: 若填「是」的話,則使用者一定要在第一次輸入某筆資料列時,就提供該欄位的資料
一般欄位限制(續) 允許零長度字串: 針對資料型態為「文字」或「備忘錄」的欄位,如果允許空字串,才可設定為「是」 索引: 索引是一種可加快搜尋資料的結構,指定「是」則Access會幫此欄位建立索引,不過根據欄位值在表格中的特性,還必須再指定為「可重複」或「不可重複」。
設定主鍵 進入設計檢視的畫面,選取(反白)主鍵屬性 按滑鼠右鍵,選取「主索引」(如下圖),設定之後屬性的前面會出現鑰匙般的小符號
設定外來鍵 開啟「資料庫關聯圖」 在【顯示資料表】視窗內選取欲處理的表格 下圖圈選取了學生表格和成績表格
設定表格欄位間的關聯 利用滑鼠指標,從學生表格的學號欄位拖曳到成績表格的學號欄位,此時出現編輯關聯的視窗,如下圖:
設定表格欄位間的關聯(續) 設定強迫參考完整性:設定之後就代表定義了外來鍵,在這裡我們將它選取。此項設定,會強制要求建立成績表格的學號時,該值必須已經存在於學生表格裡。 串接更新相關欄位:若是選取此項,則當更改學生表格的學號欄位時,會連帶更新成績表格的對應學號值,在這裡我們不選取。 串接刪除相關記錄:若是選取此項,則刪除學生表格的某筆紀錄時,會把成績表格中,所有學號相同的資料列連帶刪除,在這裡我們不選取。
設定表格欄位間的關聯(續) 透過之前已經設定好的主索引定義,Access會自動偵測到這兩個表格學號屬性值的【關聯類型】是【1對多】 按下【建立】,這時兩個表格間會出現一條線,把互相關聯的屬性連結起來,同時利用「1」和「」這兩個符號來表示「1對多」的關係,結果如下圖:
建立SQL設計查詢 於【資料庫視窗】中,選取【查詢】之後,再選取【新增】,會出現【新增查詢】視窗 選取【設計檢視】,則會出現【顯示資料表】視窗 在該視窗中選取查詢句需要參考到的一個或數個資料表後,就會出現【選取查詢】視窗 【選取查詢】視窗 上半部:顯示已經選取好的資料表 下半部:或稱為【設計格線區】,提供指定輸出的欄位及限制資料選取的準則。
查詢1的Access設計
查詢句3的Access設計
查詢句5的Access設計
10-4 XML簡介 全球資訊網(World-Wide-Web;簡稱WWW或Web)已經可以說是全世界資訊分享的主要方式 HTML主要被設計為顯示資料之用,以便將文件內容呈現在使用者面前,所以內含許多控制輸出的標籤,而不是表示資訊的內容及它的結構,所以不利於自動化的資訊傳遞與交流。 可延伸式標註語言(Extensible Markup Language;簡稱 XML)是由W3C制定的一個有關於描述資訊的Mata Language(設計語言的語言),其1.0版於1998年2月正式推出。
XML特性 XML提供一個描述資料之標準,允許使用者可以自由定義標籤來描述資料 將資料與使用者介面分離,而提高更大的使用彈性 以文字基礎的標籤語言,所以容易長久保存,不會因軟體過時而無法讀取;且能過穿過防火牆,便於在不同企業間進行資料交換。 以統一碼(unicode)為基礎建構,能支援中文的標籤,所以沒有國際化的問題 對於各類型資料(如物件、文章、圖形、文字檔、二元檔…)都能標註
XML文件範例 下圖表示了四本書籍的部分資料,每一本書分別描述了書名、作者、出版廠商、出版日期、關鍵字等訊息 :
XML文件架構 XML是由一個個元素所組成的 每個XML文件中只有一個根元素 元素中可以包含其他元素(子元素),如Book元素有5個子元素:Title、Authors、Publisher、Date、Keyword。 XML要求文件必須格式正確 每一個元素均須包含開始標籤及結束標籤(End-Tag),如L2行的開始標籤 <Book> 對應到L12行的 </Book>。 每個元素的開始標籤與結束標籤須成對, 標籤之間不可交錯,即所有元素的排列必須為嚴謹的巢狀結構。 元素可包含屬性,屬性值加上單引號或雙引號,如L10行的Date元素包含一個屬性year,其值為2000。
XML文件型態定義 文件型態定義(Document Type Definition;簡稱DTD)是用來定義某份XML文件的格式,也就是將每一個元素包含哪些子元素或屬性、各元素出現的順序等,清楚地加以定義和規範。 ELEMENT標籤之後放的是元素名,接著用小括號括起來的,是它的「內容模型」,也就是在對應的XML文件中可以出現的內容。 星號(*)代表可包含多個元素 #PCDATA為預先定義的標記,代表可解析的文字資料。 ATTLIST標籤則是宣告元素的屬性,包含了屬性名、屬性類別及預設行為的描述, 屬性的類別為ID,表示該屬性值在同一個XML文件中不可重複;預設行為的描述為 #REQUIRED ,表示該屬性值必須存在
XML文件型態定義範例
節點位置語言 稱為Xpath ,為W3C定義來處理XML資料的輔助技術,用來描述XML元素的位置 如果我們要指定一個特定的元素,我們可以把它完整的路徑寫出來 譬如:“/Books/Book/Title” 可利用萬用字元,取出不限定名稱的所有元素 譬如:“/Books/Book/*” 可利用函數來做進一步地限制 譬如:“//*[count(Book)=3]”,是取出擁有三個「Book」 子元素的所有元素。
XML查詢語言 W3C在2001的2月首先提出了XML Query Requirements,討論對XML資料做查詢時的需求,隨後也在2001的6月提出了XQuery 1.0 Working Draft,以作為XML查詢語言的標準,預計正式版本將在2004年推出 視一個XML文件為一棵標記(label)樹,並考慮標記樹中每個節點及所有值之順序關係 利用基於Xpath語法的路徑表示法,以便在XML資料中尋找任意長度路徑的資料
XQuery敘述式 以表示式為基礎 常稱為FLWR(For-Let-Where-Return))表示式 包含常數、變數、各種運算子、函數呼叫、元素的建構子等 常稱為FLWR(For-Let-Where-Return))表示式 For子句:讓變數可以遞迴取得一個表示式的結果 Let子句:將變數直接與某一個的表示式結合 Where子句:允許對變數做條件的限制 Return子句:建構新的XML元素為查詢的輸出
XQuery範例(一) XML資料是存放在網址「http://dblab.cs.ntou.edu.tw」下檔名為「B0001.xml」的文件內 L3行指定「B0001.xml」檔案內的每一個「/Books/Book」元素給 $b這個變數, L4行的目的在限定 $b元素下的Keyword子元素必須包含「XML」這個字串
XQuery範例(二) 假設B0002.xml檔案的格式(亦即元素定義)與B0001.xml相同 L3行和L4行分別從B0001.xml和B0002.xml兩個檔案中選出是2001年出版的書籍資料 L5行則計算($t/Title)和($u/Title)的聯集後再拿出它們不同的值