前提要述:參考書籍《MySQL必知必會》算法
數據庫是一個以某種有組織的方式存儲的數據集合,也就是:保存有組織的數據的容器(一般是一個文件或者一組文件)。數據庫
對於數據庫的介紹有不少術語,也能夠這樣理解 數據庫是「==按照數據結構來組織、存儲和管理數據的倉庫==」。是一個長期存儲在計算機內的、有組織的、有共享的、統一管理的數據集合。(百度百科)安全
**數據庫管理系統主要用來操做和管理數據庫的軟件,**也能夠稱爲數據庫軟件。它對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性。數據結構
好比:MySQL,Oracle,SQL Server、MongoDB等。機器學習
數據庫能夠保存在硬設備上的文件,但也能夠不是,究竟數據庫是否是文件仍是別的什麼東西不重要,由於你並不直接訪問數據庫,而是使用DBMS去訪問數據庫。數據庫設計
**數據庫系統是指在計算機系統中引入數據庫後的系統,由數據庫、數據庫管理員及其管理軟件組成的系統,**包含了數據庫、數據庫管理系統、應用系統、數據庫管理員,數據庫開發工具。分佈式
概念模型就是**在瞭解用戶的需求,用戶的業務領域工做狀況之後,通過分析和總結,提煉出來的用以描述用戶業務需求的一些概念的東西。**如銷售業務中的「客戶」和「定單」,還有就是「商品」,「業務員」。工具
實體(Entity)是客觀存在並能夠互相區分的事物,從具體的人,物,事件到抽象的狀態與概念均可以用實體抽象地表示。好比一我的,一個學生。性能
屬性(Attribute) 是實體所具備的某些特性。由屬性組成實體,經過屬性對實體進行描述。好比一我的的名字。學習
碼(Key):若是有一個屬性或者屬性集可以惟一地標識每個實體,則稱該屬性或屬性集爲該實體的碼。好比一我的的身份證,學生的學號。
數據模型是對客觀事物及聯繫的數據描述,是概念模型的數據化,即數據模型提供表示和組織數據的方法。
網狀和層次模型很好解決了數據集中和共享問題,可是在數據的獨立性和抽象級別上仍有很大缺陷,用戶在對這兩種數據模型進行存取時仍須要明確數據的存儲結構,指出存取路徑,而後就出現了關係模型。
**關係模式是用二維表格結構表示實體及實體間的聯繫的數據模型。**標準數據查詢語言SQL就是一種基於關係數據庫的語言,這種語言執行對關係數據庫中數據的檢索和操做。像MySQL,Oracle等屬於關係型數據庫。
指的是分佈式的、非關係型的、不保證遵循ACID原則的數據存儲系統。
NoSQL數據庫適合追求速度和可擴展性、業務多變的應用場景。 對於非結構化數據的處理更合適,如文章、評論,這些數據如全文搜索、機器學習一般只用於模糊處理,並不須要像結構化數據同樣,進行精確查詢,並且這類數據的數據規模每每是海量的,數據規模的增加每每也是不可能預期的,而NoSQL數據庫的擴展能力幾乎也是無限的,因此NoSQL數據庫能夠很好的知足這一類數據的存儲。
目前NoSQL數據庫仍然沒有一個統一的標準,它如今有四種大的分類:
(1)鍵值對存儲(key-value):表明軟件Redis,它的優勢可以進行數據的快速查詢,而缺點是須要存儲數據之間的關係。
(2)列存儲:表明軟件Hbase,它的優勢是對數據能快速查詢,數據存儲的擴展性強。而缺點是數據庫的功能有侷限性。
(3)文檔數據庫存儲:表明軟件MongoDB,它的優勢是對數據結構要求不特別的嚴格。而缺點是查詢性的性能很差,同時缺乏一種統一查詢語言。
(4)圖形數據庫存儲:表明軟件InfoGrid,它的優勢能夠方便的利用圖結構相關算法進行計算。而缺點是要想獲得結果必須進行整個圖的計算,並且遇到不適合的數據模型時,圖形數據庫很難使用。
ACID原則:指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。一個支持事務(Transaction)的數據庫,必需要具備這四種特性,不然在事務過程(Transaction processing)當中沒法保證數據的正確性,交易過程很可能達不到交易方的要求。
參考
非關係型數據庫的優點:
關係型數據庫的優點:
把數據庫當作文件櫃,那麼若是在存放資料時,並非將它們隨便扔進文件櫃的某個抽屜,而是在某個抽屜貼上特定的標籤,而後把資料存放進該特定的抽屜中。
該抽屜在數據庫在領域中被稱爲表。==表是一種結構化的文件,可用來存儲某種特定類型的數據==。好比保存顧客清單,產品目錄等。下面就是一張表。
表具備一些特性,這些特性定義了數據在表中如何存儲,如能夠存儲什麼樣的數據(類型),數據如何分解(看下面列中的解釋),各部分信息如何命名等。描述表的這組信息就是所謂的模式(Schema),模式能夠用來描述數據庫中特定的表以及整個數據庫(和其中表的關係),詳細請看。
**列是表中的一個字段,是某一個事物的一個特徵。**全部的表都是由一個或多個列組成的。列也能夠稱爲屬性。
解釋一下數據分解:正確的把數據分解爲多個列極爲重要,例如城市,省,郵政編碼應該老是獨立的列。經過將它分解開,纔有可能利用特定的列對數據進行排序和過濾。若是城市和省組合在一個列中,則若是按照省進行排序或者過濾很困難。
數據類型是指所允許的數據的類型。
**行指的是表中的一個記錄(元組),事物特徵的組合,能夠描述一個具體的事物。**例如學號是什麼,名字是什麼等這些。提到行時稱其爲數據庫記錄,這兩個術語能夠互相代替。但從技術上說,行纔是正確的術語。
表就是記錄的組合,表示同一類事物的組合。
目前先從關係型數據庫學起
表中每一行都應該有能夠惟一標識本身的一列(或一組列),這就是主鍵。 每一個表雖然不老是都須要主鍵,可是大多數數據庫設計人員都應保證他們建立的每一個表至少具備一個主鍵。
表中的任何列均可以做爲主鍵,只要知足如下條件:
任意兩行都不具備相同的主鍵值。
每一個行都必須具備一個主鍵值(主鍵列不容許NULL值) 。
主鍵的最好習慣:除了MySQL強制實施的規則外,應該堅持的幾個廣泛承認的最好習慣:
- 不更新主鍵列中的值;
- 不重用主鍵列的值;
- 不在主鍵列中使用可能會更改的值。
在關係中能惟一標識元組的屬性集稱爲超鍵。 好比學生表可能有學號和身份證的字段,那麼它們兩的組合或者含有它們二者之一的都是超鍵。好比(學號,姓名),(學號,身份證)等。
候選鍵是不含有多餘屬性的超鍵,屬性最小的超鍵。 好比(學號)、(身份證)。
若是一張表中的某個字段是在另外一張表做爲主鍵,那麼該字段就是外鍵。 好比輔導員這個字段,就有可能有一張輔導員信息表來記錄輔導員的信息。