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

来源:https://www.cnblogs.com/Se7eN-HOU/archive/2019/07/09/11158123.html
-Advertisement-
Play Games

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 之所以會寫下這篇日誌,是因為安裝的過程有點虐心。目前這篇文章是針對windows操作系統上的mysqldb的安裝。安裝python的mysqldb模塊,首先當然是找一些官方的網站去下載:https://pypi.python.org/pypi/MySQL-python。下載後,cmd進入MySQL- ...
  • <1>概念 <2>使用場景 <3>分類 1.default 2.not null 3.unique 4.主鍵約束 5.auto_increment:自增長約束 6.unsigned:無符號約束 7.zerofill:零填充約束 8.外鍵約束 總結:資料庫的約束 ...
  • 摘要: 下文講述sqlserver中,更新腳本中常用if exists關鍵字的用法說明,如下所示: 實驗環境:sql server 2008 R2 一、檢測資料庫是否存在於當前資料庫引擎下 二、檢測數據表是否存在於指定資料庫下 三、檢測存儲過程是否存在的方法 四、臨時表是否存在的方法 五、視圖是否存 ...
  • 1. 基礎知識點圖解 編程語言核心結構:變數、基本語法、分支、迴圈、數組、…… Java面向對象的核心邏輯:OOP、封裝、繼承、多態、介面…… 開發Java SE高級應用程式:異常、集合、I/O、多線程、反射機制、網路編程…… 2. 各種語言對比 3. Java誕生 Sun公司(斯坦福大學網路,不是 ...
  • 寫作於:2019-07-09 關鍵字:1.MySQL、 2.MySQL Workbench、 3.eclipse、 4.JDBC連接測試 1.MySQL 一、資源下載 三步下載: 第一步:選擇安裝程式頁面(https://dev.mysql.com/downloads/installer/) 第二步 ...
  • 連接池技術 連接池技術的核心思想是:連接復用,通過建立一個資料庫連接池以及一套連接使用、分配、管理策略,使得該連接池中的連接可以得到高效、安全的復用,避免了資料庫連接頻繁建立、關閉的開銷。另外,由於對JDBC中的原始連接進行了封裝,從而方便了資料庫應用對於連接的使用(特別是對於事務處理),提高了獲取 ...
  • 表結構如下: –1.學生表 Student(s_id,s_name,s_birth,s_sex) –學生編號,學生姓名, 出生年月,學生性別 –2.課程表 Course(c_id,c_name,t_id) – –課程編號, 課程名稱, 教師編號 –3.教師表 Teacher(t_id,t_name) ...
  • -- 空表不導出,建立表空間 select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 -- 查詢鎖表 select b.username,b.sid,b.serial#,logo... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...