數(shù)據(jù):是數(shù)據(jù)庫中存儲(chǔ)的基本對(duì)象,在計(jì)算機(jī)中的概念是廣義的,描述事物的符號(hào)記錄稱為數(shù)據(jù),比如你手機(jī)里的音樂、文檔和圖形都是數(shù)據(jù)。
數(shù)據(jù)庫:數(shù)據(jù)庫(Database,DB),簡(jiǎn)單的來講就是存放數(shù)據(jù)的倉庫,嚴(yán)格來講,是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi),有組織、可共享的大量數(shù)據(jù)集合。
數(shù)據(jù)庫管理系統(tǒng):數(shù)據(jù)庫管理系統(tǒng)(Database Management System,DBMS)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,用來定義數(shù)據(jù),管理數(shù)據(jù)。
數(shù)據(jù)庫系統(tǒng):數(shù)據(jù)庫系統(tǒng)由數(shù)據(jù)、數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)(及其開發(fā)應(yīng)用工具)、應(yīng)用程序和數(shù)據(jù)庫管理員(DBA)組成的存儲(chǔ)、管理、處理和維護(hù)數(shù)據(jù)的系統(tǒng),人們通常把它簡(jiǎn)稱為數(shù)據(jù)庫。
物理模型是對(duì)數(shù)據(jù)最底層的抽象,它描述數(shù)據(jù)在系統(tǒng)內(nèi)部的表示方式和存取方法,或在磁盤或磁帶上的存儲(chǔ)方式和存儲(chǔ)方法,是面向計(jì)算機(jī)系統(tǒng)的。
概念模型實(shí)際上是現(xiàn)實(shí)世界到機(jī)器世界的一個(gè)中間層次,用于信息世界的建模,是現(xiàn)實(shí)世界到信息世界的第一層抽象。
邏輯模型是按計(jì)算機(jī)系統(tǒng)的觀點(diǎn)對(duì)數(shù)據(jù)建模,主要用于數(shù)據(jù)庫管理系統(tǒng)的實(shí)現(xiàn)。常用的邏輯模型主要有層次模型、網(wǎng)狀模型、關(guān)系模型、面向?qū)ο髷?shù)據(jù)模型、對(duì)象關(guān)系數(shù)據(jù)模型和半結(jié)構(gòu)化數(shù)據(jù)模型。
關(guān)系型數(shù)據(jù)庫是依據(jù)關(guān)系模型來創(chuàng)建的數(shù)據(jù)庫,所謂關(guān)系模型就是“一對(duì)一”、“一對(duì)多”、“對(duì)多對(duì)”等。常見的關(guān)系型數(shù)據(jù)庫有Oracle、MySQL、SQL Server等。
非關(guān)系型數(shù)據(jù)庫主要基于“非關(guān)系型模型”,其中非關(guān)系型模型有:列模型、鍵值對(duì)模型、文檔類模型。比如redis屬于鍵值對(duì)模型。
優(yōu)點(diǎn)
易于維護(hù):都是使用表結(jié)構(gòu),格式一致。
使用方便:SQL語言通用,可用于復(fù)雜查詢。
復(fù)雜操作:支持SQL,可用于一個(gè)表以及多個(gè)表之間非常復(fù)雜的查詢。
缺點(diǎn)
讀寫性能比較差,尤其是海量數(shù)據(jù)的高效率讀寫。
固定的表結(jié)構(gòu),靈活度稍欠。
高并發(fā)讀寫需求,傳統(tǒng)關(guān)系型數(shù)據(jù)庫來說,硬盤I/O是一個(gè)很大的瓶頸。
優(yōu)點(diǎn)
格式靈活:存儲(chǔ)數(shù)據(jù)的格式可以是key,value形式、文檔形式、圖片形式等,使用靈活,應(yīng)用場(chǎng)景廣泛,而關(guān)系型數(shù)據(jù)庫則只支持基礎(chǔ)類型。
速度快:nosql可使用硬盤或者隨機(jī)存儲(chǔ)器作為載體,關(guān)系型數(shù)據(jù)庫只能使用硬盤。
高拓展性
成本低:nosql數(shù)據(jù)庫部署簡(jiǎn)單,基本都是開源軟件。
缺點(diǎn)
不提供sql支持,學(xué)習(xí)和使用成本較高。
無事務(wù)處理。
數(shù)據(jù)結(jié)構(gòu)相對(duì)復(fù)雜,復(fù)雜查詢方面稍欠。
E-R模型是使用E-R圖來描述現(xiàn)實(shí)世界的概念模型,是描述概念模型的有力工具。
● 1對(duì)1(1:1),比如一個(gè)客戶只有一個(gè)會(huì)員卡,一個(gè)會(huì)員卡屬于一個(gè)客戶
● 1對(duì)多(1:n),比如一個(gè)系有多個(gè)班級(jí),一個(gè)班級(jí)屬于一個(gè)系
● 多對(duì)多(n:m) ,比如一個(gè)學(xué)生可以選修多門課程,一門課程可以支持多名同學(xué)參加
第一范式:每個(gè)表都應(yīng)該有主鍵,并且每個(gè)字段要求原子性不可再分。
如以下表存在可再分項(xiàng)(高級(jí)職稱),所以不滿足第一范式。
第二范式:建立在第一范式基礎(chǔ)之上,所有非主鍵字段必須完全依賴主鍵,不能產(chǎn)生部分依賴。
舉例如關(guān)系模型(職工號(hào),姓名,職稱,項(xiàng)目號(hào),項(xiàng)目名稱)中,職工號(hào)->姓名,職工號(hào)->職稱,而項(xiàng)目號(hào)->項(xiàng)目名稱。顯然依賴關(guān)系不滿足第二范式,常用的解決辦法是差分表格,比如拆分為職工信息表和項(xiàng)目信息表。
第三范式:建立在第二范式基礎(chǔ)之上,所有非主鍵字段必須直接依賴主鍵,不能產(chǎn)生傳遞依賴。
比如Student表(學(xué)號(hào),姓名,年齡,性別,所在院校,院校地址,院校電話)這樣一個(gè)表結(jié)構(gòu),就存在上述關(guān)系。 學(xué)號(hào)--> 所在院校 --> (院校地址,院校電話)。我們應(yīng)該拆開來,如下:(學(xué)號(hào),姓名,年齡,性別,所在院校)--(所在院校,院校地址,院校電話)
設(shè)計(jì)范式的最終目的是:減少數(shù)據(jù)的冗余。但在實(shí)際的開發(fā)中,我們以滿足客戶的需求為目的,有的時(shí)候也會(huì)拿冗余來換取速度。(建議把這句話說上,體現(xiàn)工作經(jīng)驗(yàn))
1)MySQL是一個(gè)輕量級(jí)的關(guān)系型數(shù)據(jù)庫(開源),Oracle是一個(gè)重量級(jí)的關(guān)系型數(shù)據(jù)庫(收費(fèi))
2) MySQL支持自增主鍵(auto increment),而Oracle支持序列
3)MySQL占內(nèi)存小,Oracle占內(nèi)存大
4)MySQL字符串用雙引號(hào),Oracle用單引號(hào)
5)MySQL分頁用limit,Oacle使用rownum表名位置,而且只能用小于
6)MySQL用0、1判斷真假,Oracle用true、false
7)MySQL的事務(wù)級(jí)別是repeatable read,oracle的事務(wù)隔離性是read committed
● 左連接(左外連接):以左表作為基準(zhǔn)進(jìn)行查詢,左表數(shù)據(jù)會(huì)全部顯示出來,右表如果和左表數(shù)據(jù)不匹配則顯示為null。
● 右連接(右外連接):以右表作為基準(zhǔn)進(jìn)行查詢,右表數(shù)據(jù)會(huì)全部顯示出來,左表如果和右表的數(shù)據(jù)不匹配則顯示為null。
● 全連接:先以左表進(jìn)行左外連接,再以右表進(jìn)行右外連接。
● 內(nèi)連接:顯示表之間有連接匹配的所有行。
● 笛卡爾積也叫交叉連接
數(shù)據(jù)定義:Create Table,Alter Table,Drop/Truncate Table, Create/Drop Index
數(shù)據(jù)操縱:Select ,Insert,Update,Delete
數(shù)據(jù)控制:Grant,Revoke
NOT NULL: 用于控制字段的內(nèi)容一定不能為空(NULL)。
UNIQUE: 控件字段內(nèi)容不能重復(fù),一個(gè)表允許有多個(gè) Unique 約束。
PRIMARY KEY: 也是用于控件字段內(nèi)容不能重復(fù),但它在一個(gè)表只允許出現(xiàn)一個(gè)。
FOREIGN KEY: 用于預(yù)防破壞表之間連接的動(dòng)作,也能防止非法數(shù)據(jù)插入外鍵列,因?yàn)樗仨毷撬赶虻哪莻€(gè)表中的值之一。
CHECK: 用于控制字段的值范圍。