一、數據庫的介紹
數據庫(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、到此我們連接成功,就可以對數據庫進程曾刪改查等操作了,具體操作請看下一篇