1. 程式人生 > >python資料庫-資料庫的介紹及安裝(47)

python資料庫-資料庫的介紹及安裝(47)

一、資料庫的介紹

  資料庫(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的解除安裝(mac系統下)

  為什麼還沒安裝就要先學習解除安裝呢?因為很多同學的電腦可能以前裝過MySQL,在再次裝之前如果以前的沒有解除安裝或者解除安裝的不乾淨,都會影響MySQL的再次安裝,所以在安裝之前我們先確保我們電腦上沒有上次安裝的殘留。

  通過命令列刪除

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.*

八、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、到此我們連線成功,就可以對資料庫程序曾刪改查等操作了,具體操作請看下一篇

&n