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