550 likes | 816 Views
Ch01 資料庫基本概念. 胡念祖. 資料參考:資料庫理論與實務 / 旗標 / 施威銘工作室. 商業智慧 / 資料庫 架構圖. BSC. Mining. Monitor. What-If. Strategy. KPI. Dashboard. Report. Others. Business. Cube. Data Mart. Management. Sales. Inventory. Production. Others. Data warehouse. Rules. Scheduling. ETL. ERP. CRM. SCM.
E N D
Ch01 資料庫基本概念 胡念祖 資料參考:資料庫理論與實務/旗標/施威銘工作室
商業智慧/資料庫 架構圖 BSC Mining Monitor What-If Strategy KPI Dashboard Report Others Business Cube Data Mart Management Sales Inventory Production Others Data warehouse Rules Scheduling ETL ERP CRM SCM Others.. Database
資料庫系統簡介 • 資料庫是儲存資料的地方。 • 一個資料庫系統中可以有多個資料庫, 每個資料庫都是一組經過整理好的資料集合。 • 一般, 我們會將資料庫想像成是一個存放資料的容器, 但資料庫的真實型態其實是一個個的電子檔案 (file)。
資料庫系統簡介 • 資料庫管理系統則是指管理資料庫的軟體, 它們負責使用者與資料庫之間的溝通, 如存取資料庫中的資料、以及管理資料庫的各項事務等。 • SQL Server、 Access 、Oracle、SyBase、Informix、MySQL、PostgreSQL ... 等皆是資料庫管理系統。
資料庫系統簡介 • 應用程式是指自行開發的使用者介面, 因為並非每個使用者都會操作複雜的資料庫, 所以必須藉由另外設計的程式, 來提供較簡單且人性化的操作介面 • 例如我們利用 Visual Basic 開發的人事管理系統、進銷存管理系統...等。這些應用程式都必須透過資料庫管理系統才能存取及管理資料庫內的資料。
資料庫系統的使用者 • 資料庫系統從設計、建立、操作到管理階段, 都會有不同的使用者參與, 我們可以大致區分出四種類型: • 資料庫設計者 (Database Designer):資料庫設計者負責整個資料庫系統的設計, 依據使用者的需求設計適當的格式來存放資料。 • 資料庫管理者 (DataBase Administrator, DBA):資料庫建好之後, 便可以交給資料庫管理者來負責管理及維護。
資料庫系統的使用者 • 應用程式設計者 (Application Designer):應用程式設計者負責撰寫存取資料庫的用戶端應用程式, 讓使用者得以透過方便的操作介面來使用資料庫。 • 一般使用者 (End user):一般使用者就是真正經常在存取資料庫的使用者, 他們只需要學會端的應用程式, 不需要擔心資料庫的維護或管理方面的任何問題。
關聯式資料庫(Relational Database) • 關聯式資料庫是以 2 維的矩陣來儲存資料。 • 可以說是將資料儲存在表格的欄、列之中。 • 儲存在欄、列裡的資料必會有所 "關聯", 所以這種儲存資料的方式才會稱為關聯式資料庫, 而儲存資料的表格則稱為 "資料表"。
關聯式資料庫(Relational Database) • 假如我們要從以上的資料表尋找 "盧拉拉" 的地址, 則是由橫向的 『盧拉拉』 與縱向的 『地址』, 交相關聯而得來:
關聯式資料庫(Relational Database) • 除了儲存在資料表中的行與列會有所關聯, 關聯式資料庫裡面的資料表之間通常也會互有關聯。 • 這種方式的優點是可以從一個資料表中的欄位, 透過資料表的關聯, 而找到另一個資料表中的資料。
關聯式資料庫(Relational Database) • 目前市場上是以關聯式資料庫使用最廣泛。 • Microsoft SQL Server、SyBase、Informix、MySQL、PostgreSQL、Access...等, 都是屬於關聯式資料庫管理系統 (Relational DBMS, RDBMS)。
關聯式與物件導向式資料庫的比較 • 關聯式資料庫必須由資料庫設計者來設計、建立、及管理關聯。 • 由下圖可知, 兩個資料表是藉由客戶編號來達成關聯的, 而這個關聯性在關聯式資料庫中, 必須由設計者自行建立才會真正產生關聯。
關聯式與物件導向式資料庫的比較 • 物件導向式資料庫中, 物件和物件之間的連繫, 是因其屬性而必然發生的。 • 簡單地說, 在關聯式資料庫中資料表間的關係必須靠設計者自行建立來產生關聯, 而物件導向式資料庫中, 各物件之間的關係則是在物件建立之時, 便會自行連繫起來。
資料庫管理系統的基本功能 • 資料庫管理系統其實就是管理資料庫的軟體系統, 它們要負責整個資料庫的建立、資料存取、權限設定、資料備份、操作的監督與記錄... 等等工作。 • 底下再進一步說明資料庫管理系統 所應具備的基本功能。
資料庫管理系統的基本功能 • 資料定義: • DBMS 必須能夠充份定義並管理各種類型的資料項目。 • 例如關聯式資料庫管理系統必須具備建立資料庫、資料表、定義各欄位的資料型別, 以及資料表之間的關聯 ... 等等的能力才行。 • 資料處理: • DBMS 必須提供使用者對資料庫的存取能力, 包括新增、修改、查詢、與刪除等基本功能。 • 有時 DBMS 提供的功能雖然完善, 但是並不是很適合一般的使用者操作, 這時就需要程式設計師另外再撰寫用戶端的應用程式, 以供一般使用者操作。
資料庫管理系統的基本功能 • 資料安全: • DBMS 應該具備設定使用者帳戶、密碼、及權限的功能, 讓每一個使用者只能存取授權範圍內的資料, 以防止機密資料外洩, 或資料庫遭受任何有意或無意的破壞。 • 資料備份: • DBMS 必須提供方便的資料備份功能, 如此在資料庫不幸意外毀損時, 還可以還原到備份資料時的狀況, 以減少損失。
認識關聯式資料庫 • SQL Server 是一個關聯式資料庫, 所謂 “關聯”(Relationship) 是指藉由表格的形式找出資料的方法。 • 例如我們想從下圖查詢訂單序號 4 的訂購數量, 就可由橫的一列 (記錄) 與縱的一行 (欄位) 的關聯而取得:
認識關聯式資料庫 • 除了每個資料表中行與列的關聯之外, 數個資料表之間, 也可經由各個資料表中相同的意義及資料類型的欄位來實現 (欄位名稱不一定要相同), 例如:
認識關聯式資料庫 • 關聯式資料庫的強大資料處理功能是完全來自於關聯二字, 也就是先將一堆複雜的資料分類存放, 然後再 "建立關聯性" 將資料連接起來, 並靈活應用。
認識關聯、 Primary Key (主索引鍵) 與Foreign Key(連外鍵) • 在實際分析資料表的關聯時, 一般都是用分割資料表的方式, 先將所有需要的欄位大略歸類, 然後再透過正規化分析將重複的資料一一挑出來, 另外產生新的資料表, 並建立與原資料表的關聯。 • 關聯式資料庫的優點如下。 • 節省儲存空間 • 減少輸入錯誤 • 方便資料修改
節省儲存空間 • 因為資料庫中的資料常常會產生重複的情況, 如果每一次都要輸入相同的資料, 容易浪費儲存的空間, 例如下圖的書籍資料表: • 很明顯地在作者及分類欄位中, 有許多資料是重複的, 例如作者 “威威研究室” 輸入 4 次、分類 “Windows”及 “影像處理" 分別輸入 2 次。
節省儲存空間 • 若將作者及分類欄位抽離, 另外獨立成作者資料表及分類資料表, 並建立這 3 個資料表之間的關聯。 • 那麼在作者資料表中, 相同的作者就只要建立一筆記錄, 而分類資料表中的每一種類型也只要記錄一次即可。
減少輸入錯誤 • 若是經常輸入同樣的資料, 難免會有漏打或打錯字的情況發生: • 若是使用關聯式資料庫, 則作者欄的資料實際是來自作者資料表, 只要確認作者資料表中的 "威威研究室" 這筆記錄是正確的, 就不需要重複輸入 "威威研究室", 自然就減少輸入錯誤的機會了。
方便資料修改 • 若有一天要將 “威威研究室” 改為 “旗旗研究室”。在沒建立關聯的資料表中, 我們必須逐項修改每一筆記錄中的作者欄位。 • 若使用關聯式資料庫, 則只要將作者資料表的 "威威研究室" 改為 "旗旗研究室", 書籍資料表中所有關聯到作者欄位的值, 便都會改為 "旗旗研究室" 了。
Primary Key (主索引鍵) • 資料表之間是由『鍵(Key)』來建立彼此的關聯。 • 在 SQL Server 中, 我們可為資料表設定 Primary Key 及 Foreign Key。 • Primary Key 是用來辨識記錄的欄位, 具有唯一性, 且不允許重複。 • 例如在書籍資料表中加入書籍編號欄位, 給每一本書一個唯一的編號, 那麼這個書籍編號欄位就可用來當作Primary Key, 使用者即可依據此Primary Key找到特定書籍的詳細記錄。
Primary Key (主索引鍵) • 雖然資料表不一定要有Primary Key, 但一般都建議最好要有。 • 有時資料表可能沒有一個欄位具有唯一性, 此時可考慮使用兩個或多個欄位組合起來做為Primary Key。
Primary Key (主索引鍵) • 下表中將訂單編號及書籍編號這 2 個欄位組合起來具有唯一性, 因此我們可將這 2 個欄位同時設為Primary Key, 那麼就具有辨識唯一一筆記錄的特性
Foreign Key • Foreign Key 是用來連結其他資料表之用, • 在關聯式資料庫中, 資料表之間的關係是藉由連外鍵來建立的, 例如:
Foreign Key • 書籍和作者資料表中的作者編號欄位, 前者為Foreign Key, 後者為Primary Key。 • 兩個欄位的類型、寬度等屬性必須相同, 但名稱不一定要一樣, 只是習慣上都會取相同的名稱。 • 一個資料表中可包含多個連外鍵, 且其資料可重複 (例如很多本書的作者可能是同一人), 這點和Primary Key不同。
資料的完整性 • 對於關聯式資料庫來說, 還有一個重要的觀念就是資料完整性(Data Integrity)。 • 所謂資料完整性是用來確保資料庫中資料的正確性及可靠性。 • 例如在某一個資料表中更新了一筆資料, 則所有用到此資料的地方也都要更新
資料的完整性 • 資料完整性大致分為下列幾種類型: • 實體完整性 (Entity Integrity) • 區域完整性 (Domain Integrity) • 參考完整性 (Referential Integrity) • 使用者定義的完整性 (User-defined Integrity)
實體完整性 (Entity Integrity) • 實體完整性是為了確保資料表中的記錄是 “唯一” 的。我們設定Primary Key就是為了達成實體完整性。
區域完整性 (Domain Integrity) • 區域完整性是為了確保資料在允許的範圍中。 • 例如限制某一個整數值欄位的資料範圍在 100 ~ 999 之間, 若輸入的資料不在此範圍內, 即不符合區域完整性, 會被 SQL Server 拒絕。
參考完整性 (Referential Integrity) • 參考完整性是用來確保相關資料表間的資料一致, 避免因一個資料表的記錄改變, 而造成另一個資料表的內容變成無效值。
參考完整性 (Referential Integrity) • 上述範例中, 若我們在其關聯上設定了參考完整性, 當要在作者資料表中刪除一筆記錄, 則刪除的動作會失敗, 以免書籍資料表中的資料失去連結。
使用者定義的完整性 (User-defined Integrity) • 顧名思義, 這是由使用者自行定義, 而又不屬於前面三種的完整性。 • 例如某個客戶欠款超過 6 個月, 則下次再下訂單時就不賣他, 這就是由使用者定義的完整性限制。
資料表的關聯種類 • 資料表間的關聯可分為3 種對應方式: • 一對一 • 一對多 • 多對多
一對一關聯 • 當兩個資料表之間是一對一關聯時, 表示甲資料表中的一筆記錄, 只能對應到乙資料表中的一筆記錄, 而乙資料表中的一筆記錄也只能對應到甲資料表中的一筆記錄。 • 例如對『員工資料』來說, 我們可以將之分為 "可公開" 與 "機密" 二類, 然後分別存放在二個資料表中:
一對一關聯 • 這樣一來, 在平時只需要用到 "可公開" 的資料, 若有特殊需要時, 例如計算這個月的薪資, 那麼就可以利用一對一關聯, 由這二個資料表中找出員工的完整資料了。
一對多關聯 • 這是最常見的一種關聯, 當兩個資料表之間是一對多關聯時, 表示甲資料表中的一筆記錄可對應到乙資料表中的多筆記錄;而乙資料表中的一筆記錄只能對應甲資料表中的一筆記錄。
一對多關聯 • 在客戶資料表中每個客戶都只有一筆記錄, 但可以對應到訂單資料表中的多筆記錄, 這便是一對多的關聯。 • 利用這種關聯, 我們可以得到以下的好處: • 從客戶資料中, 可找出任一個客戶的所有訂單資料。 • 從訂單資料中, 可找出該訂單所屬客戶的相關資料。
多對多關聯 • 當兩個資料表之間是多對多關聯時, 表示甲資料表的一筆記錄能夠對應到乙資料表中的多筆記錄;而乙資料表中的一筆記錄也能對應到甲資料表中的多筆記錄。 • 例如一個客戶可訂購好幾種書, 而一本書也可賣給好幾個客戶, 若要將兩者建立關聯, 那就是多對多關聯了。
多對多關聯 • 資料庫在處理多對多關聯時, 因為彼此間的關係太複雜, 較容易發生問題, 因此通常會將這兩個資料表重新設計, 或是在這 2 個資料表之間在加上一個資料表, 使得它們之間成為 2 個一對多的關聯。