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