一、關系型數據庫是什么
關系型數據庫,是指采用(yong)了關(guan)系(xi)模(mo)型來組織(zhi)(zhi)數(shu)(shu)(shu)(shu)據(ju)(ju)的數(shu)(shu)(shu)(shu)據(ju)(ju)庫(ku),其以行和列的形式存儲數(shu)(shu)(shu)(shu)據(ju)(ju),以便于用(yong)戶(hu)理解,關(guan)系(xi)型數(shu)(shu)(shu)(shu)據(ju)(ju)庫(ku)這一(yi)系(xi)列的行和列被稱(cheng)為表,一(yi)組表組成了數(shu)(shu)(shu)(shu)據(ju)(ju)庫(ku)。用(yong)戶(hu)通過查詢(xun)來檢索(suo)數(shu)(shu)(shu)(shu)據(ju)(ju)庫(ku)中的數(shu)(shu)(shu)(shu)據(ju)(ju),而查詢(xun)是一(yi)個用(yong)于限定數(shu)(shu)(shu)(shu)據(ju)(ju)庫(ku)中某些區域的執行代碼。關(guan)系(xi)模(mo)型可以簡單理解為二(er)維表格(ge)模(mo)型,而一(yi)個關(guan)系(xi)型數(shu)(shu)(shu)(shu)據(ju)(ju)庫(ku)就是由二(er)維表及其之間的關(guan)系(xi)組成的一(yi)個數(shu)(shu)(shu)(shu)據(ju)(ju)組織(zhi)(zhi)。
二、關系型數據庫的特點
1、存儲方(fang)式(shi):傳統的關(guan)系型數據庫采用表格(ge)的儲存方(fang)式(shi),數據以行和(he)(he)列的方(fang)式(shi)進行存儲,要讀(du)取和(he)(he)查詢都十分方(fang)便。
2、存(cun)(cun)儲結構(gou):關系型數(shu)(shu)(shu)(shu)(shu)據(ju)(ju)庫按照結構(gou)化的(de)方法存(cun)(cun)儲數(shu)(shu)(shu)(shu)(shu)據(ju)(ju),每個(ge)數(shu)(shu)(shu)(shu)(shu)據(ju)(ju)表都(dou)必須對各(ge)個(ge)字(zi)段定(ding)義好(hao)(hao)(也就是(shi)先定(ding)義好(hao)(hao)表的(de)結構(gou)),再根據(ju)(ju)表的(de)結構(gou)存(cun)(cun)入數(shu)(shu)(shu)(shu)(shu)據(ju)(ju),這樣(yang)做的(de)好(hao)(hao)處就是(shi)由于數(shu)(shu)(shu)(shu)(shu)據(ju)(ju)的(de)形式和內容(rong)在存(cun)(cun)入數(shu)(shu)(shu)(shu)(shu)據(ju)(ju)之前就已經(jing)定(ding)義好(hao)(hao)了,所以整個(ge)數(shu)(shu)(shu)(shu)(shu)據(ju)(ju)表的(de)可(ke)靠(kao)性(xing)和穩定(ding)性(xing)都(dou)比較高,但帶來的(de)問(wen)題(ti)就是(shi)一旦存(cun)(cun)入數(shu)(shu)(shu)(shu)(shu)據(ju)(ju)后,如果(guo)需要修改數(shu)(shu)(shu)(shu)(shu)據(ju)(ju)表的(de)結構(gou)就會十(shi)分困難。
3、存(cun)儲規范:關系(xi)型(xing)數(shu)(shu)(shu)據(ju)(ju)庫(ku)為了避(bi)免(mian)重復、規范化(hua)數(shu)(shu)(shu)據(ju)(ju)以(yi)及充(chong)分(fen)利用好存(cun)儲空間(jian),把數(shu)(shu)(shu)據(ju)(ju)按照最小關系(xi)表(biao)(biao)的(de)(de)形式進(jin)行存(cun)儲,這樣(yang)數(shu)(shu)(shu)據(ju)(ju)管理(li)的(de)(de)就(jiu)可以(yi)變得很(hen)清晰(xi)、一目了然,當然這主(zhu)要是(shi)一張(zhang)數(shu)(shu)(shu)據(ju)(ju)表(biao)(biao)的(de)(de)情(qing)況(kuang)。如果是(shi)多張(zhang)表(biao)(biao)情(qing)況(kuang)就(jiu)不一樣(yang)了,由于數(shu)(shu)(shu)據(ju)(ju)涉及到(dao)多張(zhang)數(shu)(shu)(shu)據(ju)(ju)表(biao)(biao),數(shu)(shu)(shu)據(ju)(ju)表(biao)(biao)之間(jian)存(cun)在著復雜(za)的(de)(de)關系(xi),隨著數(shu)(shu)(shu)據(ju)(ju)表(biao)(biao)數(shu)(shu)(shu)量的(de)(de)增加,數(shu)(shu)(shu)據(ju)(ju)管理(li)會越(yue)來(lai)越(yue)復雜(za)。
4、擴(kuo)展(zhan)(zhan)方式:由于關系型數(shu)(shu)據(ju)庫將數(shu)(shu)據(ju)存(cun)儲在數(shu)(shu)據(ju)表中,數(shu)(shu)據(ju)操(cao)作(zuo)的(de)(de)瓶頸出現在多(duo)張數(shu)(shu)據(ju)表的(de)(de)操(cao)作(zuo)中,而且數(shu)(shu)據(ju)表越多(duo)這個(ge)問題越嚴重,如(ru)果(guo)要緩解這個(ge)問題,只(zhi)能(neng)提高(gao)處理能(neng)力,也(ye)就是選(xuan)擇速度更(geng)快性能(neng)更(geng)高(gao)的(de)(de)計算機,這樣的(de)(de)方法雖(sui)然可以一(yi)定(ding)的(de)(de)拓展(zhan)(zhan)空間,但這樣的(de)(de)拓展(zhan)(zhan)空間一(yi)定(ding)有非(fei)常有限(xian)的(de)(de),也(ye)就是關系型數(shu)(shu)據(ju)庫只(zhi)具(ju)備縱向(xiang)擴(kuo)展(zhan)(zhan)能(neng)力。
5、查詢(xun)(xun)方(fang)式:關系(xi)型數據庫(ku)采用結構(gou)化查詢(xun)(xun)語言(即SQL)來(lai)對數據庫(ku)進(jin)行(xing)查詢(xun)(xun),SQL早(zao)已獲得了(le)各個(ge)數據庫(ku)廠商的支(zhi)持,成為數據庫(ku)行(xing)業的標準,它能夠(gou)支(zhi)持數據庫(ku)的CRUD(增加,查詢(xun)(xun),更新,刪除(chu))操作(zuo),具有非常(chang)強大的功(gong)能,SQL可(ke)以采用類似索引的方(fang)法(fa)來(lai)加快查詢(xun)(xun)操作(zuo)。
6、規范化(hua):在數(shu)(shu)據(ju)(ju)(ju)庫的(de)(de)設計(ji)開發(fa)過(guo)程(cheng)中(zhong)開發(fa)人員通常(chang)會(hui)面對同(tong)時需(xu)要對一個(ge)(ge)或者多(duo)(duo)個(ge)(ge)數(shu)(shu)據(ju)(ju)(ju)實體(ti)(包括數(shu)(shu)組、列表和(he)嵌套(tao)數(shu)(shu)據(ju)(ju)(ju))進行(xing)操作,這樣(yang)在關系(xi)型數(shu)(shu)據(ju)(ju)(ju)庫中(zhong),一個(ge)(ge)數(shu)(shu)據(ju)(ju)(ju)實體(ti)一般首先要分(fen)(fen)割成多(duo)(duo)個(ge)(ge)部分(fen)(fen),然后再對分(fen)(fen)割的(de)(de)部分(fen)(fen)進行(xing)規范化(hua),規范化(hua)以(yi)后再分(fen)(fen)別存入到(dao)多(duo)(duo)張關系(xi)型數(shu)(shu)據(ju)(ju)(ju)表中(zhong),這是一個(ge)(ge)復雜的(de)(de)過(guo)程(cheng)。好消息是隨著軟件(jian)技術(shu)的(de)(de)發(fa)展(zhan),相當多(duo)(duo)的(de)(de)軟件(jian)開發(fa)平臺都提供一些簡單的(de)(de)解決(jue)方法(fa),例(li)如,可(ke)以(yi)利用ORM層(也就(jiu)是對象(xiang)關系(xi)映(ying)射)來將數(shu)(shu)據(ju)(ju)(ju)庫中(zhong)對象(xiang)模型映(ying)射到(dao)基于(yu)SQL的(de)(de)關系(xi)型數(shu)(shu)據(ju)(ju)(ju)庫中(zhong)去以(yi)及進行(xing)不同(tong)類型系(xi)統的(de)(de)數(shu)(shu)據(ju)(ju)(ju)之間的(de)(de)轉換(huan)。
7、事(shi)務性(xing)(xing):關(guan)系型數(shu)(shu)據(ju)(ju)(ju)庫(ku)(ku)強(qiang)(qiang)調ACID規則(原子(zi)性(xing)(xing)(Atomicity)、一(yi)(yi)致(zhi)性(xing)(xing)(Consistency)、隔離性(xing)(xing)(Isolation)、持久性(xing)(xing)(Durability)),可以滿足對事(shi)務性(xing)(xing)要求(qiu)(qiu)較(jiao)高或(huo)者需(xu)要進(jin)行復雜數(shu)(shu)據(ju)(ju)(ju)查詢(xun)的數(shu)(shu)據(ju)(ju)(ju)操(cao)作(zuo),而且可以充分(fen)滿足數(shu)(shu)據(ju)(ju)(ju)庫(ku)(ku)操(cao)作(zuo)的高性(xing)(xing)能和操(cao)作(zuo)穩(wen)定性(xing)(xing)的要求(qiu)(qiu)。并且關(guan)系型數(shu)(shu)據(ju)(ju)(ju)庫(ku)(ku)十(shi)分(fen)強(qiang)(qiang)調數(shu)(shu)據(ju)(ju)(ju)的強(qiang)(qiang)一(yi)(yi)致(zhi)性(xing)(xing),對于事(shi)務的操(cao)作(zuo)有(you)很好的支持。關(guan)系型數(shu)(shu)據(ju)(ju)(ju)庫(ku)(ku)可以控制事(shi)務原子(zi)性(xing)(xing)細粒(li)度(du),并且一(yi)(yi)旦操(cao)作(zuo)有(you)誤或(huo)者有(you)需(xu)要,可以馬上回滾事(shi)務。
8、讀(du)寫性(xing)(xing)(xing)能:關系(xi)型(xing)(xing)數(shu)(shu)據(ju)庫十分強調數(shu)(shu)據(ju)的(de)一致性(xing)(xing)(xing),并為此(ci)降(jiang)低讀(du)寫性(xing)(xing)(xing)能付出了巨大的(de)代價,雖然(ran)關系(xi)型(xing)(xing)數(shu)(shu)據(ju)庫存儲(chu)數(shu)(shu)據(ju)和處(chu)理(li)數(shu)(shu)據(ju)的(de)可靠性(xing)(xing)(xing)很不錯,但一旦面對海(hai)量(liang)數(shu)(shu)據(ju)的(de)處(chu)理(li)的(de)時(shi)候效率就會(hui)變得很差,特(te)別是遇到高并發讀(du)寫的(de)時(shi)候性(xing)(xing)(xing)能就會(hui)下降(jiang)的(de)非(fei)常厲害。
9、授(shou)權方式:關系型(xing)(xing)數(shu)據庫(ku)常見的(de)有Oracle,SQLServer,DB2,Mysql,除(chu)了Mysql大多數(shu)的(de)關系型(xing)(xing)數(shu)據庫(ku)如果要使用都需(xu)要支付(fu)一(yi)筆價格高昂(ang)的(de)費用,即使是免費的(de)Mysql性(xing)能也(ye)受到了諸多的(de)限制。
三、關系型數據庫設計原則
在進(jin)行關(guan)系型數據(ju)(ju)庫(ku)(ku)的(de)設計過(guo)程中,要(yao)遵循以下幾個原則,借此可以提高數據(ju)(ju)庫(ku)(ku)的(de)存(cun)儲效率、數據(ju)(ju)完整性和可擴(kuo)展(zhan)性。
1、命名規范化
在概念模(mo)型設(she)計中,對于出(chu)(chu)現(xian)的實(shi)體、屬(shu)(shu)(shu)性(xing)(xing)及相關表(biao)的結構要(yao)統(tong)一。例(li)如在數據庫設(she)計中,指(zhi)定學生(sheng)Sstudent,專指(zhi)本科生(sheng),相關的屬(shu)(shu)(shu)性(xing)(xing)有:學號、姓(xing)名(ming)、性(xing)(xing)別、出(chu)(chu)生(sheng)年月等,及每個屬(shu)(shu)(shu)性(xing)(xing)的類型、長(chang)度、取(qu)值范圍等都(dou)要(yao)進行確定,這樣就能保證在命(ming)名(ming)時不會出(chu)(chu)現(xian)同名(ming)異義或異名(ming)同義、屬(shu)(shu)(shu)性(xing)(xing)特征及結構沖突等問題(ti)。
2、數據的一致性和完整性
在關(guan)系(xi)型數據庫中(zhong)可以采用域完整(zheng)性(xing)、實體完整(zheng)性(xing)和參照完整(zheng)性(xing)等約(yue)束(shu)條件來滿(man)足其(qi)數據的一致性(xing)和完整(zheng)性(xing),用check、default、null、主(zhu)鍵和外鍵約(yue)束(shu)來實現。
3、數據冗余
數(shu)據(ju)庫(ku)中的(de)數(shu)據(ju)應盡(jin)可(ke)能地減(jian)少冗余,這就意味(wei)著(zhu)重復數(shu)據(ju)應該減(jian)少到最少。例如:若(ruo)一(yi)個(ge)部門職員(yuan)的(de)電話存(cun)儲在(zai)不(bu)同的(de)表(biao)中,假設(she)該職員(yuan)的(de)電話號碼(ma)發生變化(hua)時(shi),冗余數(shu)據(ju)的(de)存(cun)在(zai)就要求對多個(ge)表(biao)進(jin)行更新(xin)操作,若(ruo)某個(ge)表(biao)不(bu)幸被忽略(lve)了(le),那么就會造成(cheng)數(shu)據(ju)不(bu)一(yi)致的(de)情(qing)況。所以在(zai)數(shu)據(ju)庫(ku)設(she)計(ji)中一(yi)定要盡(jin)可(ke)能存(cun)在(zai)少地冗余。
4、范式理論
在關系數據(ju)(ju)庫(ku)設計時,一(yi)(yi)般(ban)是通(tong)過設計滿足某一(yi)(yi)范式來獲得一(yi)(yi)個(ge)好(hao)的數據(ju)(ju)庫(ku)模式,通(tong)常認為3NF在性能、擴展(zhan)性和數據(ju)(ju)完(wan)整性方面(mian)達到(dao)了最好(hao)的平(ping)衡,因此,一(yi)(yi)般(ban)數據(ju)(ju)庫(ku)設計要求達到(dao)3NF,消(xiao)除(chu)數據(ju)(ju)依賴(lai)中不合理的部分,最終實現(xian)使(shi)一(yi)(yi)個(ge)關系僅描述一(yi)(yi)個(ge)實體或者實體間(jian)一(yi)(yi)種(zhong)聯系的目的。
四、關系型數據庫設計步驟
關系型數據庫設計的過程可(ke)大體分為四(si)個時期七個階段。
1、用(yong)(yong)戶需求(qiu)分(fen)析時期,主要是(shi)了解和分(fen)析用(yong)(yong)戶對數據(ju)的功能需求(qiu)和應用(yong)(yong)需求(qiu),是(shi)整個(ge)設(she)(she)計過程的基礎,事關整個(ge)數據(ju)庫應用(yong)(yong)系(xi)統設(she)(she)計的成敗。
2、數(shu)據庫設計時期,主要是將用(yong)戶需(xu)求進行綜合、歸納與抽象,形成(cheng)一(yi)個獨立于具體(ti)DBMS的數(shu)據模(mo)(mo)型,可用(yong)實(shi)體(ti)—聯(lian)系(xi)模(mo)(mo)型來表示,然(ran)后將其(qi)(qi)轉換為已選(xuan)好的關系(xi)型數(shu)據庫管理(li)系(xi)統RDBMS所支持(chi)的一(yi)組關系(xi)模(mo)(mo)式(shi)并為其(qi)(qi)選(xuan)取一(yi)個適(shi)合應(ying)用(yong)環境的物理(li)結(jie)構,包括存儲(chu)結(jie)構和存取方法(fa)。
3、數(shu)(shu)據(ju)(ju)庫實現時(shi)期,包括數(shu)(shu)據(ju)(ju)庫結構創建(jian)(jian)(jian)階段(duan)和應用(yong)行為設(she)計與實現階段(duan),是根據(ju)(ju)數(shu)(shu)據(ju)(ju)庫的物理模型創建(jian)(jian)(jian)數(shu)(shu)據(ju)(ju)庫、創建(jian)(jian)(jian)表、創建(jian)(jian)(jian)索引、創建(jian)(jian)(jian)聚簇等。
4、數據(ju)庫運(yun)(yun)行(xing)與維護(hu)時期,最后一個階(jie)段則是數據(ju)庫應用系統經過(guo)試運(yun)(yun)行(xing)后即可投入正式(shi)運(yun)(yun)行(xing)。