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