中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 數據庫 > 
  • 【理論研究】數據庫基本知識與原理系列01-數據庫的基本原理與

【理論研究】數據庫基本知識與原理系列01-數據庫的基本原理與

發布時間:2020-05-27 14:50:02 來源:網絡 閱讀:452 作者:繁星亮 欄目:數據庫

數據庫作為使用頻率最廣的中間件,作為一個IT工程師,就算不打算從事數據庫開發或者做DBA,也應該掌握其基礎的知識、原理與基本的使用。

為此,本篇開始,嘗試對數據庫的基本知識與原理進行講解。


數據庫的類型

關系型數據庫以前,市面上最常見,使用最廣泛的數據庫,叫做關系型數據庫,例如大名鼎鼎的Oracle、SQL Server(微軟的,也叫MSSQL)、Mysql、DB2(IBM的),都是關系型的數據庫。由于它使用最廣泛、最常見,每個入門的人員都必須要掌握,因此接下來的幾篇《數據庫基本知識與原理》都會圍繞關系型數據庫先展開敘說,后面有機會再介紹No SQL的數據庫。

非關系型數據庫:叫作No SQL數據庫,其實只是個統稱,有各種的列式數據庫,KEY VALUE值的數據庫。



什么是關系型數據庫?

關系型數據庫的本質就是一張張有關聯關系的二維表。

二維表意思就是有行與列組成的表格,與EXCEL表里面的單個工作表(sheet)是一個意思。與EXCEL表里面每個獨立的工作表唯一的不同,是關系型數據庫中的表格,都是有關聯關系的。

假設你的EXCEL表里面有3個工作表分別叫A、B、C,如果表A有A1、A2、A3列且有內容,B表里面有B1、B2、B3列且有內容、C也有C1、C2、C3列且有內容,而B2的每個單元格其實是從A2列對應行的單元格里面引用過來的,而C3的單元格也是從B3里面引用過來的,那么其實A、B、C三個表格就有關聯關系了。那么這樣的EXCEL表就更加接近關系型數據庫里面的表了。

只不過,數據庫里面的,沒有規定B2的某個單元格一定要引用A2里面對應行的單元格,可以是任意一行的單元格的值。


為什么要用數據庫?

為什么要用數據庫而不用EXCEL表?這是一個重要的問題。如果都不知道一個東西有什么用,能解決什么問題,那么花時間學習一個新東西干嘛?

首先,在數據量很少的情況下,直接用EXCEL表格也是沒有問題的。

但是當數據有2萬行左右的時候,發覺一臺K22的聯想筆記本用EXCEL來打開,可能都要7~8秒才能打開了,這基本上已經到達了用戶可以忍受的延遲時間的極限了,如果一個用戶打開一個網頁,7~8秒都打不開的話,估計他會選擇叉掉這個網頁,然后去其他網站去了。

因此,當數據量很大的時候,我們發覺EXCEL已經無法滿足我們的性能需求了,因此需要使用數據庫。


除了性能之外,使用普通的二維表,還有以下幾個問題:

數據冗余:大量同樣的數據重復存儲,我們以下面一張很簡單的學生選課記錄表為例。

序號學號學生姓名性別聯系電話課程名稱授課老師
12019063001張三13900000001語文孫七
22019063001張三13900000001數學周八
32019063001張三13900000001英語吳九
42019063002李四13900000002語文孫七
52019063002李四13900000002數學周八
62019063003王五13900000003數學周八
72019063003王五13900000003英語吳九
82019063004趙六13900000004體育鄭十

看到“張三”選了“語文、數學、英語”3門課程,但是“張三”每選修一門課程,他的“學號”、“性別”、“聯系電話”等數據就會被重復存儲1次,如果有100條關于他的記錄,這些數據就會被重復100次。這樣的數據冗余會帶來如下問題:

1)浪費存儲空間。

2)導致增加了檢索有效數據的時長(因為數據總量增多了,搜索的時候遍歷的數據增多了)。


刪除異常:想刪除1個數據,結果會導致不想刪的數據也被刪除了。(依然以上述例子為例)

序號學號學生姓名性別聯系電話課程名稱授課老師
82019063004趙六13900000004體育鄭十

如果“趙六”退學了,我們想要刪除趙六的數據,但是我們會發現只有“趙六”選修了體育課。

這時候一旦刪除了“趙六”,“體育”的課程,“鄭十”這位授課老師,都會無故從這個表格被刪掉,這就叫刪除異常。


修改異常:修改一個數據,卻需要修改多次,并且如果修改不安全,會導致數據不一致。

序號學號學生姓名性別聯系電話課程名稱授課老師
12019063001張三13900000001語文孫七
22019063001張三13900000001數學周八
32019063001張三13900000001英語吳九

如果“張三”更換了手機,修改手機號,張三有多少條記錄就需要修改多少次,寫入操作的開銷是大于讀操作的,會帶了額外增加的開銷,并且如果修改不完全,會導致表格中“張三”的聯系電話不一致。


插入異常:應該插入的數據無法插入。

序號學號學生姓名性別聯系電話課程名稱授課老師





生物張強


數據庫是怎樣處理上面數據的?

數據庫會將上面的一張二維表,拆分為多張具有關聯關系的二維表進行存儲。注意關鍵詞有2個,1是多張,2是有關聯關系。如下:

1)先將1張二維表拆分為多張二維表

學生表
序號學號學生姓名性別聯系電話
12019063001張三13900000001
22019063002李四13900000002
32019063003王五13900000003
42019063004趙六13900000004


課程表
序號課程ID課程名稱
10001語文
20002數學
30003英語
40004體育



老師表
序號老師ID老師姓名
1T0001孫七
2T0002周八
3T0003吳九
4T0004鄭十

2)為上面獨立的表格,創建關聯關系,使得他們之間關聯起來

選課記錄表
序號學號課程ID
1139000000010001
2139000000010002
3139000000010003
4139000000020001
5139000000020002
6139000000030002
7139000000030003
8139000000040004


授課記錄表
序號學號課程ID
10001T0001
20002T0002
30003T0003
40004T0004


按照上述處理,有什么效果?

1張表,拆成了上面的5張表,好像把簡單的問題復雜化了。弄這么復雜,到底有什么作用呢?解決了什么問題?

1、解決數據冗余:

再看一下學生表,同一個學生的信息只存儲了一次,節省了空間、提升了查找性能,解決了數據冗余的問題。


2、解決刪除異常:

再看一下學生表,如果此時“趙六”退學,需要刪除“學生表”的“趙六”數據,此外,與“學生表”的“學號”字段有關聯關系的“選課記錄表”,會自動刪除“趙六”學號(2019063004)的行,即第8行,就完成操作了。而“體育課”與體育課的授課老師“鄭十”數據會完整保留在“課程表”與“老師表”中,不會被異常刪除,解決了刪除異常的問題。


3、解決修改異常:

現在“趙六”更換了手機,只需要在學生表中,更新“趙六”-“聯系電話”的字段,其他表格根本沒有保存這個信息,也就是說只需要進行一次的寫操作就完成了,不會出現數據不一致或者多次寫操作,解決了修改異常。


4、解決插入異常:

如果現在新增了“政治課”,沒有授課老師與選修的學生,只需要在課程表里面增加一行記錄“政治課”就可以了,其他表格需要寫入。不會出現像之前沒有授課老師或者沒有選修學生,連新增的課程都無法插入的問題,解決了插入異常。


綜上,我們需要使用數據庫,來解決上面幾個普通二維表無法解決的問題。


上面說的,大部分都是功能上需要使用數據庫的原因,下一篇我們再來討論一下從性能上,為啥要使用數據庫。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉黎县| 大关县| 永昌县| 皮山县| 宁波市| 开平市| 祁阳县| 阿拉善左旗| 双峰县| 武宁县| 贺兰县| 郯城县| 伽师县| 泰顺县| 开江县| 沿河| 增城市| 临沧市| 房产| 额尔古纳市| 施秉县| 马关县| 绥阳县| 嘉峪关市| 玛沁县| 静安区| 政和县| 都昌县| 霍山县| 临汾市| 东港市| 乐山市| 修武县| 游戏| 灵川县| 彭泽县| 灵台县| 郎溪县| 延川县| 新郑市| 万宁市|