Introduction to Database
但是資料庫不只是單純儲存在那裡, 還需要能夠不時地汰舊換新, 且能提供使用者有用的資訊 何謂資料庫 資料庫就是用來儲存一堆資料 日常生活中處處可見資料庫的存在 銀行記錄客戶存款與提款金額 航空公司管理班機航次和定位資料 學校記錄學籍和選課成績 但是資料庫不只是單純儲存在那裡, 還需要能夠不時地汰舊換新, 且能提供使用者有用的資訊 需要資料庫管理系統來幫忙維護資料庫
資料庫與資料庫管理系統的關係 使用者介面 用來管理, 分析, 查詢 儲存資料的地方 資料庫 資料庫管理系統
資料庫管理系統簡介 建立資料庫系統的方法 利用程式語言 利用專門的資料庫軟體 資料難以存取 造成資料的重複與不一致性 安全控管的困難 Access, MySQL
Access簡介 為美國微軟公司所發展的資料庫軟體,是廣受歡迎的Office系列中之一員 啟動Access的方法,就如同啟動Word一樣,透過【開始】功能表,進入到【程式集】選項,即可點選【Microsoft Access】將Access啟動。 啟動之後的畫面類似Office其他軟體,Access的功能表如下圖:
資料庫管理者 具有專門技術且瞭解整個系統的人 職責包含下列幾項: 決定哪些資料包含在資料庫內,且設定資料彼此之間的關聯 設計資料存放在硬碟裡面的架構 建立使用者帳號 執行安全的控管 週期性的資料維護,譬如:將資料備份、確定硬碟空間是否足夠、監控系統的效能並作適當的調整等等
以資料庫的儲存架構來看, 資料庫又可以分為多種類型 關聯式資料庫 以資料庫的儲存架構來看, 資料庫又可以分為多種類型 關聯式, 階層式, 網狀式, 以及物件導向式等 最常見的是關聯式資料庫 關聯式資料庫是以2維矩陣來儲存資料, 而儲存在行,列裡的資料必會有所關聯 姓名 地址 電話 小明 台北市敦化南路 02-2222 小華 台中市精誠路 04-1111 小小 新竹市光復路 03-5555 一筆資料 欄位
通常一張資料表都會盡量精簡, 避免資料的重複性, 以防資料被修改後的不一致性 關聯式資料庫 資料表和資料表也常有關連存在 通常一張資料表都會盡量精簡, 避免資料的重複性, 以防資料被修改後的不一致性 我們可透過資料表間的關聯性, 找到更多資訊 客戶資料表 訂單資料表 客戶 編號 姓名 地址 電話 1 小明 台北市敦化南路 02-2222 2 小華 台中市精誠路 04-1111 3 小小 新竹市光復路 03-5555 訂單 序號 日期 客戶 編號 是否付款 1 11/23 3 否 2 11/24 是
資料定義語言 定義一筆資料裡有哪些欄位, 每個欄位的資料型態, 簡稱DDL 範例:學生表格定義
資料型態 文字:資料為字串,最長可包含255個字元 數字:資料為可計算之數值,可根據資料值的範圍或是否允許小數點,選擇「整數」、「長整數」、「單精準度」或「雙精準度」等 日期/時間:其中包含年、月、日、時、分、秒 自動編號:自動插入的唯一順序值,有時具有主鍵的功能 是/否:只能在二種值中選一,譬如「是/否 」、「真/假」 或「開/關」
一般欄位限制 (cont) 格式: 資料顯示在螢幕上與列印出來的方式,若設定格式為「百分比」,則欄位值「0.6」會顯示為「60%」。 輸入遮罩: 遮罩是用來提醒或控制資料輸入的樣子,設定輸入遮罩時是以分號隔出以下三個區段: 第一區段:遮罩本身 第二區段:「0」表示顯示在螢幕上(非使用者輸入)的符號也會被儲存在資料庫中;否則使用「1」。 第三區段:提醒使用者輸入的定位字元。 譬如,「電話號碼」欄位的輸入遮罩可設定為 「\(999\) 0000\-0000;0;#」
一般欄位限制 (cont) 預設值: 使用者若未輸入任何值,則系統會為該欄位自動補上此值。譬如,將「性別」欄位預設值設定為「F」 驗證規則: 利用函數或算數運算子來寫出限制輸入值的式子。譬如,我們可利用「like」函數,設定「電子郵件」欄位的驗證規則為「like “*@*”」 驗證文字: 這裡是設定違反驗證規則時的提醒文字 必須有資料: 若填「是」的話,則使用者一定要在第一次輸入某筆資料列時,就提供該欄位的資料
一般欄位限制 允許零長度字串: 針對資料型態為「文字」或「備忘錄」的欄位,如果允許空字串,才可設定為「是」 索引: 索引是一種可加快搜尋資料的結構,指定「是」則Access會幫此欄位建立索引,不過根據欄位值在表格中的特性,還必須再指定為「可重複」或「不可重複」。
建立資料庫 進入Access之後,在出現的視窗中按一下【Access空白資料庫】指令 再按【確定】,出現【開新資料庫】對話方塊 選取目錄以指定【儲存位置】 輸入資料庫檔案名稱(副檔名為mdb) 建立一個「學校」資料庫,檔名是「School.mdb」,檔案存放在「C」槽的「database」目錄 ,畫面如右:
資料庫視窗 左邊的窗格:為物件按鈕,如【資料表】【查詢】等 右邊的窗格,對應於此物件的命令或資訊
資料表功能表 開啟:將一個已經建立好的資料表打開,會顯示這個資料表內的所有資料列 設計:修改一個既有資料表的欄位格式及限制 新增:新增一個資料表 刪除:刪除一個既有的資料表 大圖示、小圖示、清單、詳細資料:指定資料表在資料庫視窗右邊窗格的顯示方式,如同檔案管理員所提供的功能
建立資料表的不同方法 資料工作表檢視:等同於選取資料庫視窗中的【藉由輸入資料建立資料表】 設計檢視:等同於選取資料庫視窗中的【使用設計檢視建立資料表】 資料表精靈:等同於選取資料庫視窗中的【使用精靈建立資料表】,也就是利用Access提供的內建範例資料再加以修改 匯入資料表:將外部資料轉入 連結資料表:連結外部資料
設計檢視步驟 設計個別欄位 欄位名稱、資料類型、一般限制 設計主鍵限制(設計檢視畫面如下:)
資料工作表檢視 確定完欄位個數與名稱後,可直接輸入資料列 完成後,按一下視窗右上角的【x】,並鍵入表格的名稱「Student」
使用主鍵(primary key)和外來鍵(foreigner key)來建立資料表間的關聯性 建立資料表間的關聯性 (cont) 使用主鍵(primary key)和外來鍵(foreigner key)來建立資料表間的關聯性 主鍵(primary key): 找到表格裡某個欄位的值是獨一無二, 不會有重複的情況發生 可想成是資料的身分證號碼 可由多個欄位組成, 只要是獨一無二即可 當有很多欄位可以成為主鍵,選擇一個合理且比較通用 客戶 編號 姓名 地址 電話 1 小明 台北市敦化南路 02-2222 2 小華 台中市精誠路 04-1111 3 小小 新竹市光復路 03-5555 主鍵
外來鍵(foreigner key): 用來連結某一個表格上和另一個表格之間的關係 外來鍵通常是另一個表格的主鍵 建立資料表間的關聯性 外來鍵(foreigner key): 用來連結某一個表格上和另一個表格之間的關係 外來鍵通常是另一個表格的主鍵 客戶資料表 訂單資料表 客戶 編號 姓名 地址 電話 1 小明 台北市敦化南路 02-2222 2 小華 台中市精誠路 04-1111 3 小小 新竹市光復路 03-5555 訂單 序號 日期 客戶 編號 是否付款 1 11/23 3 否 2 11/24 是 訂單資料表的主鍵 外來鍵, 可和客戶資料表建立連結 客戶資料表的主鍵
定義範例
設定主鍵(Primary key) 進入設計檢視的畫面,選取(反白)主鍵屬性 按滑鼠右鍵,選取「主索引」(如下圖),設定之後屬性的前面會出現鑰匙般的小符號
設定外來鍵(foreigner key) 開啟[工具]→[資料庫關聯圖] 在【顯示資料表】視窗內選取欲處理的表格 下圖圈選取了學生表格和成績表格
設定表格欄位間的關聯 利用滑鼠指標,從學生表格的學號欄位拖曳到成績表格的學號欄位,此時出現編輯關聯的視窗,如下圖:
設定表格欄位間的關聯 (cont) 設定強迫參考完整性:設定之後就代表定義了外來鍵。此項設定,會強制要求建立成績表格的學號時,該值必須已經存在於學生表格裡。 重疊顯示更新相關欄位:若是選取此項,則當更改學生表格的學號欄位時,會連帶更新成績表格的對應學號值,在這裡我們不選取。 重疊顯示刪除相關記錄:若是選取此項,則刪除學生表格的某筆紀錄時,會把成績表格中,所有學號相同的資料列連帶刪除,在這裡我們不選取。
設定表格欄位間的關聯
SQL 使用者欲查詢資料, 通常會給一些條件的限制 SQL是用來描述使用者的查詢, 而關聯式資料庫都支援SQL 由三個部分所構成 SELECT:想要列出來的欄位 FROM:欲查詢的資料表 WHERE:條件的限制 查詢句1:輸出名字為小明的客戶地址與電話 輸出結果 SELECT 地址, 電話 FROM 客戶資料表 WHERE 姓名=“小明” 台北市敦化南路 02-2222
條件限制 利用算數運算子:如「>」、「<」等 使用邏輯運算子:如「and」、「or」、「not」 查詢句2:列出所有編號小於3的客戶的姓名和地址 使用邏輯運算子:如「and」、「or」、「not」 查詢句3:針對客戶編號小於3的客戶, 查出住在台北市敦化南路的客戶, 並列出姓名和電話 SELECT 姓名, 電話 FROM 客戶資料表 WHERE 客戶編號<3 SELECT 姓名, 電話 FROM 客戶資料表 WHERE 客戶編號<2 and 地址=‘台北市敦化南路’
條件限制(續) 查詢句2的輸出結果 查詢句3的輸出結果 小明 02-2222 小華 04-1111 小明 02-2222
常見的錯誤:直接把所要的關聯寫在FROM子句裡,而不加以限制 錯誤範例: 參考多個關聯 當所需要的資料表示在不同資料表裡 常見的錯誤:直接把所要的關聯寫在FROM子句裡,而不加以限制 錯誤範例: 錯誤結果:產生所有可能的組合,包含許多不合理或無意義的資料列 (見下頁) SELECT * FROM 訂單資料表, 客戶資料表
錯誤結果 訂單序號 日期 訂單資料表.客戶編號 是否付款 客戶資料表.客戶編號 姓名 地址 電話 1 11/23 3 否 小明 台北市敦化南路 02-2222 2 小華 台中市精誠路 04-1111 小小 新竹市光復路 03-5555 11/24 是
連結多個關聯 正確寫法:將參考到的表格,以適當的屬性串連起來 範例: 正確結果 SELECT 訂單日期, 姓名, 地址 FROM 訂單資料表, 客戶資料表 WHERE 訂單資料表.客戶編號 = 客戶資料表.客戶編號 訂單日期 姓名 地址 11/23 小小 新竹市光復路 11/24 小明 台北市敦化南路
於【資料庫視窗】中,選取【查詢】之後,再選取【新增】,會出現【新增查詢】視窗 選取【設計檢視】,則會出現【顯示資料表】視窗 建立SQL設計查詢 於【資料庫視窗】中,選取【查詢】之後,再選取【新增】,會出現【新增查詢】視窗 選取【設計檢視】,則會出現【顯示資料表】視窗 在該視窗中選取查詢句需要參考到的一個或數個資料表後,就會出現【選取查詢】視窗 【選取查詢】視窗 上半部:顯示已經選取好的資料表 下半部:或稱為【設計格線區】,提供指定輸出的欄位及限制資料選取的準則。
Access提供的查詢介面 其實Access也是將使用者的查詢轉成SQL
資料庫系統的管理必須具備? 資料庫管理者 資料庫管理軟體 如何分類資料庫(切割成數張資料表) 建立資料表間的關連性 資料庫 主鍵 外來鍵 管理資料庫系統(汰舊換新, 提供查詢) SQL
練習 請下載db.xls 試著將這些資料分成數個資料表, 並且在各資料表都要設主鍵(primary key)和外來鍵(foreigner key) 畫出此資料庫的關連圖 查詢清華書店什麼時候買了超過400元的書,列出書名和數量 查詢哪些還沒結帳的書單價超過400元, 列出書名和訂單日期和客戶 查詢新竹市的書店買了哪些超過400元的書, 列出書名和數量和單價
Reference Avi Silberschatz Henry F. Korth S. Sudarshan, “Database System Concepts” 全華科技圖書,”計算機概論”