數(shù)據(jù)庫(kù)設(shè)計(jì)是指對(duì)一個(gè)給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫(kù)模式,建立數(shù)據(jù)庫(kù)及其他應(yīng)用系統(tǒng),使之能有效地存儲(chǔ)數(shù)據(jù),滿足各種用戶(hù)的需求。數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程中命名規(guī)范很是重要,命名規(guī)范合理的設(shè)計(jì)能夠省去開(kāi)發(fā)人員很多時(shí)間去區(qū)別數(shù)據(jù)庫(kù)實(shí)體。
最近也因?yàn)楣ぷ餍枰哉沓隽诉@個(gè)Word文檔,望大家指正。
2數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)規(guī)劃→需求分析→數(shù)據(jù)庫(kù)設(shè)計(jì)→應(yīng)用程序設(shè)計(jì)→實(shí)現(xiàn)→測(cè)試→運(yùn)行于維護(hù)
2.1數(shù)據(jù)庫(kù)規(guī)劃定義數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的主要目標(biāo),定義系統(tǒng)特定任務(wù),包括工作量的估計(jì)、使用資源、和需求經(jīng)費(fèi),定義系統(tǒng)的范圍以及邊界。
2.2需求分析2.1.1需求分析步驟與成果涉及人員:用戶(hù)和分析人員
任務(wù):對(duì)現(xiàn)實(shí)世界要處理的對(duì)象進(jìn)行詳細(xì)的調(diào)查,收集基礎(chǔ)數(shù)據(jù)及處理方法,在用戶(hù)調(diào)查的基礎(chǔ)上通過(guò)分析,逐步明確用戶(hù)對(duì)系統(tǒng)的需求,包括信息的要求及處理的要求。
方法與步驟:1.通過(guò)與用戶(hù)的調(diào)查,對(duì)用戶(hù)的信息需求進(jìn)行收集。
2.在收集數(shù)據(jù)的同時(shí),設(shè)計(jì)人員要對(duì)其進(jìn)行加工和整理,以數(shù)據(jù)字典和數(shù)據(jù)流圖的形式描述出來(lái),并以設(shè)計(jì)人員的角度向用戶(hù)講述信息,根據(jù)用戶(hù)的反饋加以修改并確定(該過(guò)程是反復(fù)的過(guò)程)
成果:數(shù)據(jù)流圖,數(shù)據(jù)字典,各種說(shuō)明性表格,統(tǒng)計(jì)輸出表以及系統(tǒng)功能結(jié)構(gòu)圖。
2.1.2數(shù)據(jù)流圖基本元素與數(shù)據(jù)流圖外部實(shí)體:存在于軟件系統(tǒng)之外的人員或組織(正方形或立方體表示)。
加工:數(shù)據(jù)處理,表示輸入數(shù)據(jù)在此進(jìn)行變換,產(chǎn)生輸出數(shù)據(jù)(圓角巨型或圓形表示)。
數(shù)據(jù)流:表示流動(dòng)著的數(shù)據(jù)(箭頭線表示)。
數(shù)據(jù)存儲(chǔ):用來(lái)表示要存儲(chǔ)的數(shù)據(jù)(開(kāi)門(mén)矩形或兩條平行橫線表示)。
訂單處理系統(tǒng)頂層流程圖:
0層數(shù)據(jù)流圖:
實(shí)體:現(xiàn)實(shí)中的事物例如,學(xué)生,老師
聯(lián)系:兩個(gè)實(shí)體之間的關(guān)系,1:1、1:N、M:N三種關(guān)系
屬性:實(shí)體所具有的屬性,例如 學(xué)生的學(xué)號(hào)、姓名、性別等
例如:一個(gè)學(xué)生屬于一個(gè)班級(jí),一個(gè)班級(jí)擁有多名學(xué)生,E-R圖如下
網(wǎng)上購(gòu)物系統(tǒng)E-R圖,該系統(tǒng)數(shù)據(jù)之間存在下列約束
圖2.2
2.3.2邏輯結(jié)構(gòu)設(shè)計(jì)2.3.2.1E-R圖轉(zhuǎn)換成關(guān)系模式將每個(gè)實(shí)體轉(zhuǎn)換成一個(gè)關(guān)系模式,實(shí)體的屬性即關(guān)系模式的屬性,實(shí)體的標(biāo)識(shí)即關(guān)系模式的鍵。
根據(jù)E-R圖實(shí)體之間的聯(lián)系可以轉(zhuǎn)換成以下關(guān)系模式:
客戶(hù)(客戶(hù)編號(hào),姓名,電話,E-mail)。關(guān)系的主鍵:客戶(hù)編號(hào);外鍵:無(wú)
訂單(訂單編號(hào),訂購(gòu)時(shí)間,客戶(hù)編號(hào))。關(guān)系的主鍵:訂單編號(hào);外鍵:客戶(hù)編號(hào)
訂購(gòu)細(xì)目(訂購(gòu)明細(xì)編號(hào),訂購(gòu)數(shù)量,支付金額,訂單編號(hào))。關(guān)系主鍵:訂購(gòu)明細(xì)編號(hào);外鍵:訂單編號(hào)。
出現(xiàn)(訂購(gòu)明細(xì)編號(hào),商品編號(hào),類(lèi)型)。關(guān)系的主鍵:訂購(gòu)明細(xì)編號(hào),商品編號(hào);外鍵:訂購(gòu)明細(xì)編號(hào),商品編號(hào)。
商品:(商品編號(hào),商品名稱(chēng),單價(jià),生產(chǎn)日期,商品類(lèi)別號(hào),商品類(lèi)別名)。關(guān)系的主鍵:商品編號(hào);外鍵:無(wú)
在關(guān)系模式設(shè)計(jì)中可能會(huì)出現(xiàn)以下幾個(gè)問(wèn)題:數(shù)據(jù)冗余、數(shù)據(jù)修改不一致、數(shù)據(jù)插入異常、數(shù)據(jù)刪除異常,所以提出范式的要求,目的就是最低限度地冗余,避免插入、刪除、修改異常。
2.3.2.2范式主屬性:包含鍵的所有屬性。
第一范式(1NF):若關(guān)系模式R的每一個(gè)分量是不可分的數(shù)據(jù)項(xiàng),則關(guān)系模式屬于第一范式。即每個(gè)屬性都是不可拆分的.
第二范式(2NF):R屬于1NF,且每一個(gè)非主屬性完全依賴(lài)于鍵(沒(méi)有部分依賴(lài)),則R屬于2NF
例如:選課關(guān)系(學(xué)號(hào),課程號(hào),成績(jī),學(xué)分)
該關(guān)系的主鍵是(學(xué)號(hào),課程號(hào)),但是課程號(hào)→學(xué)分,所以學(xué)分屬性部分依賴(lài)于主鍵,即關(guān)系部滿足第二范式,可以拆分為(學(xué)號(hào),課程號(hào),成績(jī)),(課程號(hào),學(xué)分)兩個(gè)關(guān)系
第三范式(3NF):R屬于2NF,且每個(gè)非主屬性即不部分依賴(lài)于碼,也不傳遞依賴(lài)于碼
例如:學(xué)生關(guān)系(學(xué)號(hào),姓名,所屬系,系地址)
該關(guān)系的主鍵是:學(xué)號(hào)
學(xué)號(hào)→所屬系,所屬系→學(xué)號(hào),所屬系→系地址;根據(jù)函數(shù)的依賴(lài)公理,系地址傳遞函數(shù)依賴(lài)于學(xué)號(hào),即關(guān)系不滿足第三范式,可以拆分關(guān)系為(學(xué)號(hào),姓名,所屬系),(所屬系,系地址)
如果不拆分會(huì)存在數(shù)據(jù)修改異常,比如該學(xué)生的換了系,修改了所屬系,但是系地址沒(méi)有修改,這樣就造成了修改異常
BCNF:R屬于3NF,且不存在主屬性對(duì)碼的部分和傳遞函數(shù)依賴(lài)
例如:關(guān)系R(零件號(hào),零件名,廠商名),如果設(shè)定每種零件號(hào)只有一個(gè)零件名,但不同的的零件號(hào)可以有相同的零件名,每種零件可以有多個(gè)廠商生產(chǎn),但每家廠商生產(chǎn)的零件應(yīng)有不同的零件名。這樣可以得到:
零件號(hào)→零件名,(廠商名,零件名)→零件號(hào)
所以主屬性包括(零件號(hào),廠商名,零件名),但是“零件名”傳遞依賴(lài)于碼“廠商名,零件名”,所以關(guān)系R不滿足BCNF,當(dāng)一個(gè)零件由多個(gè)生產(chǎn)廠商生產(chǎn)時(shí),由于零件號(hào)只有一個(gè)而零件名根據(jù)廠商不同而又多個(gè),零件名與零件號(hào)之間的聯(lián)系將多次重復(fù),帶來(lái)數(shù)據(jù)冗余和操作異常現(xiàn)象
可以將關(guān)系分解為(零件號(hào),廠商名),(零件號(hào),零件名)
4NF:關(guān)系模式R屬于1NF,若對(duì)于R的每個(gè)非平凡多值依賴(lài)X→→Y且Y不包含于X時(shí),X必含碼,則R屬于4NF
5NF:對(duì)關(guān)系進(jìn)行投影,消除關(guān)系中不是由候選碼所蘊(yùn)含的連接依賴(lài)
對(duì)于上面的商品關(guān)系,由于關(guān)系的主鍵是商品編號(hào),而商品類(lèi)別號(hào)→商品類(lèi)別名
所以商品關(guān)系部滿足第三范式,非主屬性商品類(lèi)別名傳遞依賴(lài)于商品編號(hào),會(huì)存在數(shù)據(jù)冗余,數(shù)據(jù)修改異常問(wèn)題。將商品關(guān)系分解為:
商品(商品編號(hào),商品名稱(chēng),單價(jià),生產(chǎn)日期,商品類(lèi)別號(hào))
商品類(lèi)別(商品類(lèi)別號(hào),商品類(lèi)別名)
2.3.3物理結(jié)構(gòu)設(shè)計(jì)為一個(gè)給定的邏輯數(shù)據(jù)模型設(shè)計(jì)一個(gè)最合適應(yīng)用要求的物理結(jié)構(gòu)的過(guò)程
采用高級(jí)語(yǔ)言以結(jié)構(gòu)化設(shè)計(jì)方法或面向?qū)ο蠓椒ㄟM(jìn)行設(shè)計(jì)
2.5系統(tǒng)實(shí)現(xiàn)3.優(yōu)化策略3.1.查詢(xún)優(yōu)化策略1.如果頻繁地訪問(wèn)涉及的是對(duì)兩個(gè)相關(guān)的表進(jìn)行連接操作,則考慮將其合并
2.如果頻繁地訪問(wèn)只是在表中的某一部分字段上進(jìn)行,則考慮分解表,將該部分單獨(dú)作為一個(gè)表
3.對(duì)于很少更新的表,引入物化視圖
4. 當(dāng)系統(tǒng)中有一些少量的,重復(fù)出現(xiàn)的值時(shí),使用字典表來(lái)節(jié)約存儲(chǔ)空間和優(yōu)化查詢(xún)。如地區(qū)、系統(tǒng)中用戶(hù)類(lèi)型的代號(hào)等。這類(lèi)值不會(huì)在程序的運(yùn)行期變化,但是需要存儲(chǔ)在數(shù)據(jù)庫(kù)中。
就地區(qū)而言,如果我們要查詢(xún)某個(gè)地區(qū)的記錄,則數(shù)據(jù)庫(kù)需要通過(guò)字符串匹配的方式來(lái)查詢(xún);如果將地區(qū)改為一個(gè)地區(qū)的代號(hào)保存在表中,查詢(xún)時(shí)通過(guò)地區(qū)的代號(hào)來(lái)查詢(xún),則查詢(xún)的效率將大大提高。
程序中宜大量的使用字典表來(lái)表示這類(lèi)值。字典表中保存這類(lèi)值的代號(hào)和實(shí)體的集合,以外鍵的方式關(guān)聯(lián)到使用這類(lèi)值的表中。然而,在編碼階段,程序員并不使用字典表,因?yàn)槭紫炔樵?xún)字典表中實(shí)體的代號(hào),違背了提高查詢(xún)效率的初衷。程序員在數(shù)據(jù)字典的幫助下,直接使用代號(hào)來(lái)代表實(shí)體,從而提高效率。
雖然字典表在實(shí)際上并不使用,但是仍應(yīng)該保留在數(shù)據(jù)庫(kù)中(起碼是在開(kāi)發(fā)期內(nèi)保留)。字典表作為另一種形式上的“數(shù)據(jù)字典文檔”出現(xiàn),以說(shuō)明數(shù)據(jù)庫(kù)中哪些表的哪些字段是使用了字典表的。
為了提高數(shù)據(jù)庫(kù)的數(shù)據(jù)完整性,在開(kāi)發(fā)階段可以保留完整的字典表和普通表的外鍵約束。但是在數(shù)據(jù)庫(kù)的運(yùn)行階段,應(yīng)該將普通表和字典表的外鍵刪除,以提高運(yùn)行效率,特別是某些表使用了很多字典表的情況。
案例:某數(shù)據(jù)庫(kù)中有百萬(wàn)條用戶(hù)信息,應(yīng)用系統(tǒng)中常常需要按照地區(qū)要查詢(xún)用戶(hù)的信息。用戶(hù)信息表以前是按照具體的地區(qū)名稱(chēng)來(lái)保存的,現(xiàn)在將具體的名稱(chēng)改為字典表中的地區(qū)代號(hào),查詢(xún)效率大大提高。
3.3索引對(duì)象 | 前綴 |
數(shù)據(jù)庫(kù) | 無(wú) |
表 | 無(wú) |
視圖 | VI |
索引 | IX |
存儲(chǔ)過(guò)程 | SP |
函數(shù) | FN |
觸發(fā)器 | TR |
自定義數(shù)據(jù)類(lèi)型 | ud |
Default | DF |
主鍵 | pk |
外鍵 | FK |
rule | ru |
序列 | Sq |
UNIQUE | uq |
數(shù)據(jù)庫(kù)對(duì)象采用26個(gè)英文字母(區(qū)分大小寫(xiě))和0-9這十個(gè)自然數(shù),加上下劃線_組成,共63個(gè)字符。不能出現(xiàn)其他字符(注釋除外)。
同一個(gè)數(shù)據(jù)庫(kù)中這些對(duì)象名都是不能重復(fù)
C CHECK_CONSTRAINT
D DEFAULT_CONSTRAINT
F FOREIGN_KEY_CONSTRAINT
IT INTERNAL_TABLE
P SQL_STORED_PROCEDURE
PK PRIMARY_KEY_CONSTRAINT
S SYSTEM_TABLE
SQ SERVICE_QUEUE
TR SQL_TRIGGER
U USER_TABLE
UQ UNIQUE_CONSTRAINT
V VIEW
4.2命名規(guī)范規(guī)定1.表名使用單數(shù)名
例如:對(duì)存儲(chǔ)客人信息的表(Customer)不使用Customers
2.避免無(wú)謂的表格后綴
1、 表是用來(lái)存儲(chǔ)數(shù)據(jù)信息的,表是行的集合。那么如果表名已經(jīng)能夠很好地說(shuō)明其包含的數(shù)據(jù)信息,就不需要再添加體現(xiàn)上面兩點(diǎn)的后綴了。
2、 GuestInfo(存儲(chǔ)客戶(hù)信息)應(yīng)寫(xiě)成Guest,F(xiàn)lightList(存儲(chǔ)航班信息的表)應(yīng)寫(xiě)成Flight
3.所有表示時(shí)間的字段,統(tǒng)一以 Date 來(lái)作
新聞熱點(diǎn)
疑難解答
圖片精選