一、資料庫的介紹 資料庫(Database)是存儲與管理數據的軟體系統,就像一個存入數據的物流倉庫。每個資料庫都有一個或多個不同的API介面用於創建,訪問,管理,搜索和複製所保存的數據。我們也可以將數據存儲在文件中,但是在文件中讀寫數據速度相對較慢,所以我們使用關係型資料庫管理系統(RDBMS)來存 ...
一、資料庫的介紹
資料庫(Database)是存儲與管理數據的軟體系統,就像一個存入數據的物流倉庫。每個資料庫都有一個或多個不同的API介面用於創建,訪問,管理,搜索和複製所保存的數據。我們也可以將數據存儲在文件中,但是在文件中讀寫數據速度相對較慢,所以我們使用關係型資料庫管理系統(RDBMS)來存儲和管理的大數據量。
二、常見資料庫技術品牌、服務與架構
發展了這麼多年市場上出現了許多的資料庫系統,最強的個人認為是Oracle,當然還有許多如:DB2、Microsoft SQL Server、MySQL、SyBase等,下圖列出常見資料庫技術品牌、服務與架構。
三、資料庫的分類
資料庫通常分為層次式資料庫、網路式資料庫和關係式資料庫三種,而不同的資料庫是按不同的數據結構來聯繫和組織的。而在當今的互聯網中,最常見的資料庫模型主要是兩種,即關係型資料庫和非關係型資料庫。
關係型資料庫代表:Oracle、MySql、SQL Server
非關係型資料庫代表:Mongodb、Redis
四、E-R模型
- 當前物理的資料庫都是按照E-R模型進行設計的
- E表示entry,實體
- R表示relationship,關係
- 一個實體轉換為資料庫中的一個表
- 關係描述兩個實體之間的對應規則,包括
- 一對一
- 一對多
- 多對多
- 關係轉換為資料庫表中的一個列 *在關係型資料庫中一行就是一個對象
五、三大範式
1、 什麼是範式
要設計規範化的資料庫,就要求我們根據資料庫設計範式――也就是資料庫設計的規範原則來做。範式可以指導我們更好地設計資料庫的表結構,減少冗餘的數據,藉此可以提高資料庫的存儲效率,數據完整性和可擴展性。
設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫冗餘越小。目前關係資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。滿足最低要求的範式是第一範式(1NF)。在第一範式的基礎上進一步滿足更多規範要求的稱為第二範式(2NF),其餘範式以次類推。一般說來,資料庫只需滿足第三範式(3NF)就行了。
2、三大範式
第一範式(1NF)
所謂第一範式(1NF)是指在關係模型中,對列添加的一個規範要求,所有的列都應該是原子性的,即資料庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,記錄等非原子數據項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一範式(1NF)表中的每個域值只能是實體的一個屬性或一個屬性的一部分。簡而言之,第一範式就是無重覆的域。
例如:表1-1中,其中”工程地址”列還可以細分為省份,城市等。在國外,更多的程式把”姓名”列也分成2列,即”姓”和“名”。
雖然第一範式要求各列要保存原子性,不能再分,但是這種要求和我們的需求是相關聯的,如上表中我們對”工程地址”沒有省份,城市這樣方面的查詢和應用需求,則不需拆分,”姓名”列也是同樣如此。
表1-1 原始表
工程號 |
工程名稱 |
工程地址 |
員工編號 |
員工名稱 |
薪資待遇 |
職務 |
P001 |
港珠澳大橋 |
廣東珠海 |
E0001 |
Jack |
6000/月 |
工人 |
P001 |
港珠澳大橋 |
廣東珠海 |
E0002 |
Join |
7800/月 |
工人 |
P001 |
港珠澳大橋 |
廣東珠海 |
E0003 |
Apple |
8000/月 |
高級技工 |
P002 |
南海航天 |
海南三亞 |
E0001 |
Jack |
5000/月 |
工人 |
第二範式(2NF)
在1NF的基礎上,非Key屬性必須完全依賴於主鍵。第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個實例或記錄必須可以被唯一地區分。選取一個能區分每個實體的屬性或屬性組,作為實體的唯一標識。
第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關係。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。簡而言之,第二範式就是在第一範式的基礎上屬性完全依賴於主鍵。
例如:表1-1中,一個表描述了工程信息,員工信息等。這樣就造成了大量數據的重覆。按照第二範式,我們可以將表1-1拆分成表1-2和表1-3:
表1-2 工程信息表
工程編號 |
工程名稱 |
工程地址 |
P001 |
港珠澳大橋 |
廣東珠海 |
P002 |
南海航天 |
海南三亞 |
表1-3 員工信息表
員工編號 |
員工姓名 |
職務 |
薪資水平 |
E0001 |
Jack |
工人 |
3000/月 |
E0002 |
Join |
工人 |
3000/月 |
E0003 |
Apple |
高級技工 |
6000/月 |
這樣,表1-1就變成了兩張表,每個表只描述一件事,清晰明瞭。
第三範式(3NF)
第三範式是在第二範式基礎上,更進一層,第三範式的目標就是確保表中各列與主鍵列直接相關,而不是間接相關。即各列與主鍵列都是一種直接依賴關係,則滿足第三範式。
第三範式要求各列與主鍵列直接相關,我們可以這樣理解,假設張三是李四的兵,王五則是張三的兵,這時王五是不是李四的兵呢?從這個關係中我們可以看出,王五也是李四的兵,因為王五依賴於張三,而張三是李四的兵,所以王五也是。這中間就存在一種間接依賴的關係而非我們第三範式中強調的直接依賴。
現在我們來看看在第二範式的講解中,我們將表1-1拆分成了兩張表。這兩個表是否符合第三範式呢。在員工信息表中包含:”員工編號”、”員工名稱”、”職務”、”薪資水平”,而我們知道,薪資水平是有職務決定,這裡”薪資水平”通過”職務”與員工相關,則不符合第三範式。我們需要將員工信息表進一步拆分,如下:
員工信息表:員工編號,員工名稱,職務
職務表:職務編號,職務名稱,薪資水平
現在我們已經瞭解了資料庫規範化設計的三大範式,下麵我們再來看看對錶1-1優化後的數據表:
員工信息表(Employee)
員工編號 |
員工姓名 |
職務編號 |
E0001 |
Jack |
1 |
E0002 |
Join |
1 |
E0003 |
Apple |
2 |
工程信息表(ProjectInfo)
工程編號 |
工程名稱 |
工程地址 |
P001 |
港珠澳大橋 |
廣東珠海 |
P002 |
南海航天 |
海南三亞 |
職務表(Duty)
職務編號 |
職務名稱 |
工資待遇 |
1 |
工人 |
3000/月 |
2 |
高級技工 |
6000/月 |
工程參與人員記錄表(Project_ Employee_info)
編號 |
工程編號 |
人員編號 |
1 |
P001 |
E0001 |
2 |
P001 |
E0002 |
3 |
P002 |
E0003 |
通過對比我們發現,表多了,關係複雜了,查詢數據變的麻煩了,編程中的難度也提高了,但是各個表中內容更清晰了,重覆的數據少了,更新和維護變的更容易了,哪麽如何平衡這種矛盾呢?
4、範式與效率
在我們設計資料庫時,設計人員、客戶、開發人員通常對資料庫的設計有一定的矛盾,客戶更喜歡方便,清晰的結果,開發人員也希望資料庫關係比較簡單,降低開發難度,而設計人員則需要應用三大範式對資料庫進行嚴格規範化,減少數據冗餘,提高資料庫可維護性和擴展性。由此可以看出,為了滿足三大範式,我們資料庫設計將會與客戶、開發人員產生分歧,所以在實際的資料庫設計中,我們不能一味的追求規範化,既要考慮三大範式,減少數據冗餘和各種資料庫操作異常,又要充分考慮到資料庫的性能問題,允許適當的資料庫冗餘。
六、MySQL介紹
MySQL所使用的 SQL 語言是用於訪問資料庫的最常用標準化語言。MySQL 軟體採用了雙授權政策,分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站資料庫。
MySQL官網:https://www.mysql.com/
MySQL下載:https://www.mysql.com/downloads/
MySQL以前一直是開源免費的,被Oracle收購後有些變化:以前的版本都是免費的,社區版按GPL協議開源免費,商業版提供更加豐富的功能,但收費。
社區版的下載地址:https://dev.mysql.com/downloads/ (免費)
企業版的下載地址:https://www.mysql.com/downloads/(收費)
七、MySQL的卸載
為什麼還沒安裝就要先學習卸載呢?因為很多同學的電腦可能以前裝過MySQL,在再次裝之前如果以前的沒有卸載或者卸載的不幹凈,都會影響MySQL的再次安裝,所以在安裝之前我們先確保我們電腦上沒有上次安裝的殘留。
1、mac系統下刪除
通過命令行刪除
sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Library/PreferencePanes/My* rm -rf ~/Library/PreferencePanes/My* sudo rm -rf /Library/Receipts/mysql* sudo rm -rf /Library/Receipts/MySQL* sudo rm -rf /var/db/receipts/com.mysql.*
2、ubuntu系統下刪除
sudo apt-get remove mysql-* dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
八、MySQL的安裝
1、mac 系統安裝
在安裝的時候會讓你填寫一個root用戶的密碼,用來做MySQL的登錄使用
安裝好了之後再你電腦的系統偏好設置面板中能找到MySQL
點擊進入到MySQL面板
安裝好了之後MySQL服務預設是開啟的,不用的時候通過stop可以關閉,此時mac系統我們的MySQL就安裝好了。
2、ubuntu下安裝MySQL
2.1、安裝
sudo apt-get install mysql-server mysql-client
2.2、啟動
service mysql start
2.3、停止
service mysql stop
2.4、重啟
service mysql restart
3、windows下就不帶著大家安裝了,我想大家都會
九、圖形工具(Navicat)鏈接資料庫
如果一直使用命令行去操作資料庫,這樣對於數據的整理,表結構的觀察是很不方便,所以我們在安裝好了MySQL服務之後,我們都會使用圖形界面工具去編輯和處理資料庫,圖形界面工具有很多,這裡給大家介紹一個很好用的資料庫連接工具Navicat,這個工具正版是收費的,當然網上有很多破解版和破解攻略,我相信大家都會的。
Navicat官網:https://www.navicat.com.cn/
Navicat產品下載:https://www.navicat.com.cn/products
下載安裝好了之後,打開如下圖
我們操作連接按鈕,連接到我們要操作的資料庫
這個時候我們創建一個表驗證一下我們的鏈接是成功的,通過Navicat可以操作資料庫,
使用終端登錄MySQL驗證
OK、到此我們連接成功,就可以對資料庫進程曾刪改查等操作了,具體操作請看下一篇