Java數據庫篇:Java數據庫學習資料珍藏筆記

Java數據資料分解

20世紀60年代後期以來,計算機管理的對象規模越來越大,應用範圍又越來越廣泛,數據量急劇增長,同時多種應用、多種語言互相覆蓋地共享數據集合的要求越來越強烈,數據庫技術便應運而生,出現了統一管理數據的專門軟件系統——數據庫管理系統。

一、數據庫相關理論

在數據庫中,數據不再以各個應用程序各自的要求來分別存儲,而是把整個系統所有的數據,根據它們之間固有的關係,分門別類地加以存儲。也就是說,數據庫是存儲在計算機系統內的結構化的、集成的、相關的、共享的和可控制的數據集合。

Java數據庫篇:Java數據庫學習資料珍藏筆記

數據模型

數據模型是數據庫系統的核心和基礎,任何DBMS都支持一種數據模型。任何一種數據模型都是由3部分組成:

1)數據結構:主要描述數據的類型、內容、性質以及數據間的聯繫等。

2)數據操作:主要描述在相應的數據結構上的操作類型和操作方式。

3)數據約束:主要描述數據結構內數據間的語法、詞義聯繫、他們之間的制約和依存關係,以及數據動態變化的規則,以保證數據的正確、有效和相容。

數據模型主要由三種,分別是層次模型、網狀模型和關係模型。

關係模型是目前使用最廣泛的數據模型,支持關係模型的DBMS稱為關係型數據庫管理系統。關係型數據庫是一組關係表的集合,關係表是關係模型的數據結構,它用二維表格來組織數據。

目前主流的關係型數據庫有Mysql、Oracle、SQLServer、DB2、Sybase等等。在下面的內容中,涉及到數據庫操作的部分我都是在MySQL數據庫中進行的,MySQL是開源的數據庫,使用起來很方便。

完整性約束

關係數據庫模型的完整性約束是數據庫設計的一部分。它的目的是創建檢查數據庫存儲數據的依據和保障數據的正確性。

不但可以防止授權用戶將不合法的數據存入數據庫,還能夠避免關係表之間的數據不一致。例如,學生表中學號必須唯一且不能為空,性別只能是男女兩個值之一等等。

完整性約束主要由四種,分別是鍵約束,定義域約束,實體完整性,引用完整性。

1. 鍵約束

關係表中的“鍵”是指關係表架構中單一屬性或者一組屬性的集合。鍵約束是指關係表一定擁有一個唯一和最小的主鍵。簡單的說,主鍵的目的就是關係表能夠從兩個及以上的元祖中標識出它們是不同的元祖。

在關係表中還有幾個其它的鍵,超鍵是關係表中單一熟悉或者一組屬性的集合,超鍵需要滿足唯一性。候選鍵是指滿足最小性的超鍵。外鍵是關係表的單一或多個屬性的集合,其屬性值是引用其他關係表的主鍵。

2. 定義域約束

定義域約束是指關係表的屬性值一定是定義域的單元值。例如,年齡屬性的定義域是int,那麼屬性值可以是24而不能是24.5。

3. 實體完整性

實體完整性是指在基底關係表主鍵的任何部分都不可以是空值,主鍵如果是多個屬性的集合,任何一個屬性都不可以是空值。

4. 引用完整性

引用完整性是當關系表存在外鍵時,外鍵的值一定來自引用關係表的主鍵值,或為空值。

關係表的規範化

規範化主要是決定關係表應該擁有哪些屬性,其目的是創建良好結構的關係表,去除關係表中的重複數據,去除關係表中的不一致的依賴性,避免在新增、刪除或者更新數據時造成錯誤或者數據不一致的異常情況。關係表的規範化首要工作是處理主鍵與屬性之間的“功能依賴”,它是三級範式的基礎。

1. 第一範式

第一範式(1NF),是指在關係表中刪除多值和複合屬性,讓關係表只擁有單元值屬性。例如,學號和課程組成的學生表中,如果在一條記錄中課程屬性值同時有語文、數學、英語三門課,那麼因為擁有多值屬性不符合1NF,應該將這條記錄分成3條。

2. 第二範式

第二範式(2NF),是指滿足第一範式,且關係表沒有部分依賴。簡單地說,第二範式是指在關係表中,不是主鍵的屬性需要完全依賴於主鍵。例如,如果在一個表中,有屬性學號,姓名,性別,導師編號,導師姓名,導師辦公室編號,辦公室地址,那麼因為導師姓名以及導師辦公室編號,辦公室地址並非完全依賴主鍵學號,所以不符合2NF。

3. 第三範式

第三範式(3NF),是指滿足第二範式,且關係表沒有遞移依賴。第三範式的目的是移除那些不是直接功能依賴於主鍵的屬性,這些屬性是藉由另一個屬性來功能依賴於主鍵的。

比如上面在第二範式中提到的表,我們將學生表拆分成學生表和導師表兩個表,但是導師表中辦公室地址並非直接依賴於主鍵,而是通過辦公室編號,不符合3NF。二、MySQL基本使用

關係型數據庫MySQL在現在使用還是比較廣泛的,我們平時進行基本的開發時可以安裝這個數據庫來使用,安裝完成後可以使用Navicat來對數據庫進行操作。(在開始的學習中建議最好還是在控制檯用命令行的方式來操作數據庫,Navicat是一個圖形化的數據庫管理軟件,使用它可以很方便地進行數據庫管理,但過度依賴圖形化操作還是不可取的,當然它也提供了命令行方式我們可以根據需要來選擇。)

Java數據庫篇:Java數據庫學習資料珍藏筆記

基本SQL語句

在Navicat中,我們先創建了數據庫dbtest,下面主要是通過一些基本操作,來展示SQL,結構化查詢語言的使用。

1. 創建表

Java數據庫篇:Java數據庫學習資料珍藏筆記
Java數據庫篇:Java數據庫學習資料珍藏筆記

5.查

Java數據庫篇:Java數據庫學習資料珍藏筆記

單多表查詢

Java數據庫篇:Java數據庫學習資料珍藏筆記

索引

索引是對數據庫表中一個或多個列的值進行排序的結構。創建數據表的索引可以提升SQL查詢效率,讓用戶更快速地得到查詢結果。

例如這樣一個查詢:select * from table1 where id=10000。如果沒有索引,必須遍歷整個表,直到ID等於10000的這一行被找到為止;有了索引之後(必須是在ID這一列上建立的索引),即可在索引中查找。由於索引是經過某種算法優化過的,因而查找次數要少的多。可見,索引是用來定位的。

創建索引的格式如下:

Java數據庫篇:Java數據庫學習資料珍藏筆記
Java數據庫篇:Java數據庫學習資料珍藏筆記

其中index_pk為索引名,on後面是表名,括號內是屬性。

數據庫索引的 優點 主要如下:

第一,通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。

第二,可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。

第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。

第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。

第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。

增加索引也有許多 不利的方面 :

第一,創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。

第二,索引需要佔物理空間,除了數據表佔數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。

第三,當對錶中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

到目前為止,我們都還只是在數據庫系統中直接對數據庫進行操作,要真正地開發出一款將數據保存在數據庫裡的應用,我們必須學會有編程語言來操作數據庫。下面主要介紹Java中的數據庫編程。

Java數據庫篇:Java數據庫學習資料珍藏筆記
Java數據庫篇:Java數據庫學習資料珍藏筆記
Java數據庫篇:Java數據庫學習資料珍藏筆記

私我 1,拿走Java不謝

相關推薦

推薦中...