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