數(shù)據(jù)庫(kù)開發(fā)規(guī)范詳細(xì)介紹(一)
一.?dāng)?shù)據(jù)表和字段的設(shè)計(jì)
表設(shè)計(jì)原則
1、標(biāo)準(zhǔn)化和規(guī)范化
數(shù)據(jù)的標(biāo)準(zhǔn)化有助于消除數(shù)據(jù)庫(kù)中的數(shù)據(jù)冗余。標(biāo)準(zhǔn)化有好幾種形式,我們?cè)谶@里采用Third Normal Form(3NF),因?yàn)?NF在性能、擴(kuò)展性和數(shù)據(jù)完整性方面達(dá)到了***平衡。
遵守3NF 標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)某個(gè)表只包括其本身基本的屬性,當(dāng)不是它們本身所具有的屬性時(shí)需進(jìn)行分解。表之間的關(guān)系通過(guò)外鍵相連接。它具有以下特點(diǎn):有一組表專門存放通過(guò)鍵連接起來(lái)的關(guān)聯(lián)數(shù)據(jù)。
2、考慮各種變化
在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候考慮到哪些數(shù)據(jù)字段將來(lái)可能會(huì)發(fā)生變更。
字段設(shè)計(jì)原則:
1) 每個(gè)表中都應(yīng)該添加的3 個(gè)有用的字段,即要求每張數(shù)據(jù)表中字段不得少于3個(gè);
2) 選擇數(shù)字類型和文本類型盡量充足。在字段類型為數(shù)字或文本時(shí),其長(zhǎng)度***比實(shí)際所需的大一些。
3) 增加自動(dòng)增長(zhǎng)的操作ID字段(czid)
5) 增加記錄創(chuàng)建的日期字段(CreateDate)。
4) 增加刪除標(biāo)記字段(isvoid):
在表中包含一個(gè)"刪除標(biāo)記"字段,這樣就可以把行標(biāo)記為刪除。在關(guān)系數(shù)據(jù)庫(kù)里不單獨(dú)刪除某一行;一般采用清除數(shù)據(jù)程序而且要仔細(xì)維護(hù)索引整體性。
二.鍵和索引的設(shè)計(jì)
1、鍵選擇原則:
1)為關(guān)聯(lián)字段創(chuàng)建外鍵。
2)所有的鍵都必須唯一。
3)避免使用復(fù)合鍵。
4)外鍵總是關(guān)聯(lián)唯一的鍵字段。
使用系統(tǒng)生成的主鍵
設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候采用系統(tǒng)生成的鍵作為主鍵,那么實(shí)際控制了數(shù)據(jù)庫(kù)的索引完整性。這樣,數(shù)據(jù)庫(kù)和非人工機(jī)制就有效地控制了對(duì)存儲(chǔ)數(shù)據(jù)中每一行的訪問。采用系統(tǒng)生成鍵作為主鍵還有一個(gè)優(yōu)點(diǎn):當(dāng)擁有一致的鍵結(jié)構(gòu)時(shí),找到邏輯缺陷很容易。不要用用戶的鍵(不讓主鍵具有可更新性)在確定采用什么字段作為表的鍵的時(shí)候,小心用戶將要編輯的字段。通常的情況下不要選擇用戶可編輯的字段作為鍵。
可選鍵有時(shí)可做主鍵
把可選鍵進(jìn)一步用做主鍵,可以擁有建立強(qiáng)大索引的能力。
2、索引使用原則:
索引是從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)的***效方式之一。95%的數(shù)據(jù)庫(kù)性能問題都可以采用索引技術(shù)得到解決。
索引外鍵
大多數(shù)數(shù)據(jù)庫(kù)都索引自動(dòng)創(chuàng)建的主鍵字段,但是可別忘了索引外鍵,它們也是經(jīng)常使用的鍵,比如運(yùn)行查詢顯示主表和所有關(guān)聯(lián)表的某條記錄就用得上。
不要索引大型字段(有很多字符),這樣作會(huì)讓索引占用太多的存儲(chǔ)空間。
不要索引常用的小型表
不要為小型數(shù)據(jù)表設(shè)置任何鍵,假如它們經(jīng)常有插入和刪除操作就更別這樣作了。對(duì)這些插入和刪除操作的索引維護(hù)可能比掃描表空間消耗更多的時(shí)間。
三. 數(shù)據(jù)完整性設(shè)計(jì)
完整性實(shí)現(xiàn)機(jī)制:實(shí)體完整性:主鍵
參照完整性:
父表中刪除數(shù)據(jù):級(jí)聯(lián)刪除;受限刪除;置空值
父表中插入數(shù)據(jù):受限插入;遞歸插入
父表中更新數(shù)據(jù):級(jí)聯(lián)更新;受限更新;置空值
DBMS對(duì)參照完整性可以有兩種方法實(shí)現(xiàn):外鍵實(shí)現(xiàn)機(jī)制(約束規(guī)則)和觸發(fā)器實(shí)現(xiàn)機(jī)制
用戶定義完整性:NOT NULL;CHECK;觸發(fā)器
用約束而非商務(wù)規(guī)則強(qiáng)制數(shù)據(jù)完整性
采用數(shù)據(jù)庫(kù)系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)的完整性。這不但包括通過(guò)標(biāo)準(zhǔn)化實(shí)現(xiàn)的完整性而且還包括數(shù)據(jù)的功能性。在寫數(shù)據(jù)的時(shí)候還可以增加觸發(fā)器來(lái)保證數(shù)據(jù)的正確性。不要依賴于商務(wù)層保證數(shù)據(jù)完整性;它不能保證表之間(外鍵)的完整性所以不能強(qiáng)加于其他完整性規(guī)則之上。
強(qiáng)制指示完整性
在有害數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)之前將其剔除。激活數(shù)據(jù)庫(kù)系統(tǒng)的指示完整性特性。這樣可以保持?jǐn)?shù)據(jù)的清潔而能迫使開發(fā)人員投入更多的時(shí)間處理錯(cuò)誤條件。
使用查找控制數(shù)據(jù)完整性
控制數(shù)據(jù)完整性的***方式就是限制用戶的選擇。只要有可能都應(yīng)該提供給用戶一個(gè)清晰的價(jià)值列表供其選擇。這樣將減少鍵入代碼的錯(cuò)誤和誤解同時(shí)提供數(shù)據(jù)的一致性。
采用視圖
為了在數(shù)據(jù)庫(kù)和應(yīng)用程序代碼之間提供另一層抽象,可以為應(yīng)用程序建立專門的視圖而不必非要應(yīng)用程序直接訪問數(shù)據(jù)表。這樣做還等于在處理數(shù)據(jù)庫(kù)變更時(shí)給你提供了更多的自由。
在進(jìn)行數(shù)據(jù)庫(kù)開發(fā)時(shí),嚴(yán)格遵守這些規(guī)范原則就能將數(shù)據(jù)庫(kù)的開發(fā)工作做的很完善,希望大家能很熟練的掌握這些設(shè)計(jì)規(guī)范,以便于大家在以后的數(shù)據(jù)庫(kù)開發(fā)過(guò)程中能很輕松的應(yīng)用上。
【編輯推薦】