数据库计划中的14个才略
本源:站長資訊??
1. 原始票據與實體之間的關系
可所以一對一、一對多、多對多的關系。在淺顯情形下,它們是一對一的關系:即一張原始票據對應且只對應一個實體。在非凡情形下,它們可以是一對多或多對一的關系,即一張原始單證對應多個實體,或多張原始單證對應一個實體。這里的實體可以相識為底子表。清楚明明這種對應關系后,對我們計劃錄入界面年夜有好處。
〖例1〗:一份員工經歷資料,在人力資本信息零碎中,就對應三個底子表:員工底子情形表、社會關系表、使命簡歷表。這便是“一張原始單證對應多個實體”的規范例子。
2. 主鍵與外鍵
淺顯而言,一個實體不能既無主鍵又無外鍵。在E—R 圖中, 處于葉子部位的實體, 可以定義主鍵,也可以不定義主鍵(由于它無子孫), 但必需要有外鍵(由于它有父親)。
主鍵與外鍵的計劃,在全局數據庫的計劃中,占據首要職位地方。當全局數據庫的計劃完成當前,有個美國數據庫計劃專家說:“鍵,到處都是鍵,除了鍵之外,什么也沒有”,這便是他的數據庫計劃經歷之談,也反映了他對信息零碎中間(數據模型)的高度籠統頭腦。由于:主鍵是實體的高度籠統,主鍵與外鍵的配對,表示實體之間的跟尾。
3. 底子表的性質
底子表與中間表、暫時表不同,由于它具有如下四個特征:
(1) 原子性。底子表中的字段是不可再分化的。
(2) 原始性。底子表中的記載是原始數據(底子數據)的記載。
(3) 歸結性。由底子表與代碼表中的數據,可以派生出一切的輸入數據。
(4) 堅決性。底子表的結構是絕對堅決的,表中的記載是要暫時生涯的。
相識底子表的性質后,在計劃數據庫時,就能將底子表與中間表、暫時表區分隔隔離松散來。
4. 范式尺度
底子表及其字段之間的關系, 應只管饜足第三范式。然則,饜足第三范式的數據庫計劃,每每不是最好的計劃。為了進步數據庫的運轉功用,每每需求低沉范式尺度:適當添加冗余,抵達以空間換功夫的目的。
〖例2〗:有一張寄存商品的底子表,如表1所示。“金額”這個字段的存在,標明該表的計劃不饜足第三范式,由于“金額”可以由“單價”乘以“數量”失蹤失蹤,說明');“金額”是冗余字段。然則,添加“金額”這個冗余字段,可已往進盤問統計的速度,這就是以空間換功夫的作法。
在Rose 2002中,規定列有兩品種型:數據列和對照爭論列?!敖痤~”如許的列被稱為“對照爭論列”,而“單價”和“數量”如許的列被稱為“數據列”。
表1 商品表的表結構
商品稱號 商品型號 單價 數量 金額
電視機 29吋 2,500 40 100,000
5. 偉年夜地相識三個范式
偉年夜地相識三個范式,關于數據庫計劃年夜有好處。在數據庫計劃中,為了更好地利用三個范式,就必需偉年夜地相識三個范式(偉年夜地相識是夠用的相識,并不是最科學最正確的相識):
第一范式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分化;
第二范式:2NF是對記載的專注性約束,要求記載有專注標識,即實體的專注性;
第三范式:3NF是對字段冗余性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗余.
沒有冗余的數據庫計劃可以做到。然則,沒有冗余的數據庫未必是最好的數據庫,偶爾為了進步運轉功用,就必需低沉范式尺度,適當生涯冗余數據。詳盡做法是:在見地數據模型計劃時苦守第三范式,低沉范式尺度的使命放到物理數據模型計劃時思索。低沉范式便是添加字段,應允冗余。
6. 要長于辨認與正確處理賞罰多對多的關系
若兩個實體之間存在多對多的關系,則應消弭這種關系。消弭的方法是,在兩者之間添加第三個實體。如許,原本一個多對多的關系,今朝變為兩個一對多的關系。要將原本兩個實體的屬性公道地分派到三個實體中去。這里的第三個實體,素質上是一個較龐年夜的關系,它對應一張底子表。淺顯來講,數據庫計劃東西不能辨認多對多的關系,但能處理賞罰多對多的關系。
〖例3〗:在“圖書館信息零碎”中,“圖書”是一個實體,“讀者”也是一個實體。這兩個實體之間的關系,是一個規范的多對多關系:一本圖書在不同功夫可以被多個讀者借閱,一個讀者又可以借多本圖書。為此,要在二者之間添加第三個實體,該實體取名為“借還書”,它的屬性為:借還功夫、借還標志(0表示借書,1表示還書),其余,它還應該有兩個外鍵(“圖書”的主鍵,“讀者”的主鍵),使它能與“圖書”和“讀者”跟尾。
7. 主鍵PK的取值方法
PK是供次序員運用的表間跟尾東西,可所以一無物理意義的數字串, 由次序主動加1來完成。也可所以有物理意義的字段名或字段名的組合。不過前者比后者好。當PK是字段名的組合時,倡議字段的個數不要太多,多了不光索引占用空間年夜,并且速度也慢。
8. 正確理解數據冗余
主鍵與外鍵在多表中的屢次出現, 不屬于數據冗余,這個見地必需清楚,現實上有良多人還不清楚。非鍵字段的屢次出現, 才是數據冗余!并且是一種低級冗余,即屢次性的冗余。低級冗余不是字段的屢次出現,而是字段的派生出現。
〖例4〗:商品中的“單價、數量、金額”三個字段,“金額”便是由“單價”乘以“數量”派生出來的,它便是冗余,并且是一種低級冗余。冗余的目的是為了進步處理賞罰速度。只需低級冗余才會添加數據的紛比方律性,由于統一數據,可以從不同功夫、地址、腳色上多次錄入。是以,我們倡議低級冗余(派素性冗余),支持低級冗余(屢次性冗余)。
9. E--R圖沒有尺度謎底
信息零碎的E--R圖沒有尺度謎底,由于它的計劃與畫法不是專注的,只需它籠蓋了零碎需求的業務范圍和成果內容,便是可行的。反之要點竄E--R圖。雖然它沒有專注的尺度謎底,并不料味著可以隨意計劃。好的E—R圖的尺度是:結構清楚、關聯簡便、實體個數適中、屬性分派公道、沒有低級冗余。
10. 視圖手藝在數據庫計劃中很有用
與底子表、代碼表、中間表不同,視圖是一種虛表,它依賴數據源的實表而存在。視圖是供次序員運用數據庫的一個窗口,是基表數據綜合的一種方式, 是數據處理賞罰的一種方法,是用戶數據失蹤密的一種才干。為了終止龐年夜處理賞罰、進步運算速度和節約存儲空間, 視圖的定義深度淺顯不得超出三層。 若三層視圖仍不敷用, 則應在視圖上定義暫時表, 在暫時表上再定義視圖。如許屢次交迭定義, 視圖的深度就不受限定了。
關于某些與國度政治、經濟、手藝、軍事和寧靜所長有關的信息零碎,視圖的感染愈加首要。這些零碎的底子表完成物理計劃之后,當即在底子表上直立第一層視圖,這層視圖的個數和結構,與底子表的個數和結構是完全雷同。并且規定,一切的次序員,一概只準在視圖上操縱。只需數據庫辦理員,帶著多個職員配合駕馭的“寧靜鑰匙”,才干間接在底子表上操縱。請讀者想想:這是為什么?
11. 中間表、報表和暫時表
中間表是寄存統計數據的表,它是為數據堆棧、輸入報表或盤問結果而計劃的,偶爾它沒有主鍵與外鍵(數據堆棧除外)。暫時表是次序員個人計劃的,寄存暫時記載,為個人所用?;砗椭虚g表由DBA維護,暫時表由次序員本人用次序主動維護。
12. 完整性約束表今朝三個方面
域的完整性:用Check來完成約束,在數據庫計劃東西中,對字段的取值范圍終止定義時,有一個Check按鈕,通過它定義字段的值城。參照完整性:用PK、FK、表級觸發器來完成。用戶定義完整性:它是一些業務紀律,用存儲進程和觸發器來完成。
13. 防范數據庫計劃打補丁的方法是“三少準繩”
(1) 一個數據庫中表的個數越少越好。只需表的個數少了,才干說明');零碎的E--R圖少而精,去失蹤了屢次的多余的實體,組成了對客不雅全國的高度籠統,終止了零碎的數據集成,防范了打補丁式的計劃;
(2) 一個表中組合主鍵的字段個數越少越好。由于主鍵的感染,一是建主鍵索引,二是做為子表的外鍵,所以組合主鍵的字段個數少了,不光節約了運轉功夫,并且節約了索引存儲空間;
(3) 一個表中的字段個數越少越好。只需字段的個數少了,才干說明');在零碎中不存在數據屢次,且很少罕有據冗余,更首要的是煽動讀者學會“列變行”,如許就防范了將子表中的字段拉入到主表中去,在主表中留下良多空余的字段。所謂“列變行”,便是將主表中的一部分外容拉出去,其余單獨建一個子表。這個方法很樸實,有的人便是不習氣、不采用、不執行。
數據庫計劃的適用準繩是:在數據冗余和處理賞罰速度之間找到相宜的均衡點?!叭佟笔且粋€個人見地,綜合不雅念,不能伶仃某一個準繩。該準繩是絕對的,不是絕對的?!叭唷睖世K一定是錯誤的。試想:若籠蓋零碎異樣的成果,一百個實體(共一千個屬性) 的E--R圖,一定比二百個實體(共二千個屬性) 的E--R圖,要好得多。
倡議“三少”準繩,是叫讀者學會利用數據庫計劃手藝終止零碎的數據集成。數據集成的步調是將文件零碎集成為利用數據庫,將利用數據庫集成為主題數據庫,將主題數據庫集成為全局綜合數據庫。集成的水平越高,數據共享性就越強,信息孤島現象就越少,整個企業信息零碎的全局E—R圖中實體的個數、主鍵的個數、屬性的個數就會越少。
倡議“三少”準繩的目的,是防范讀者利用打補丁手藝,賡續地對數據庫終止增編削,使企業數據庫變成了隨意計劃數據庫表的“渣滓堆”,或數據庫表的“年夜雜院”,末了形成數據庫中的底子表、代碼表、中間表、暫時表紊亂無章,不計其數,招致企奇不雅單位的信息零碎無法維護而癱瘓。
“三多”準繩任何人都可以做到,該準繩是“打補丁方法”計劃數據庫的正理學說?!叭佟睖世K是少而精的準繩,它要求有較高的數據庫計劃才略與藝術,不是任何人都能做到的,由于該準繩是根絕用“打補丁方法”計劃數據庫的實際根據。
14. 進步數據庫運轉功用的方法
在給定的零碎硬件和瑣金飾件前提下,進步數據庫零碎的運轉功用的方法是:
(1) 在數據庫物理計劃時,低沉范式,添加冗余, 常用觸發器, 多用存儲進程。
(2) 當對照爭論非常龐年夜、并且記載條數非常龐年夜時(比方一千萬條),龐年夜對照爭論要先在數據庫皮相,以文件零碎方式用C 言語對照爭論處理賞罰完成之后,末了才入庫追加到表中去。這是電信計費零碎計劃的經歷。
(3) 發現某個表的記載太多,比方超出一千萬條,則要對該表終止水平聯絡。水平聯絡的做法是,以該表主鍵PK的某個值為界線,將該表的記載水平聯絡為兩個表。若發現某個表的字段太多,比方超出八十個,則垂直聯絡該表,將原本的一個表分化為兩個表。
(4) 對數據庫辦理零碎DBMS終止零碎優化,即優化各種零碎參數,如緩沖區個數。
(5) 在運用面向數據的SQL言語進行程序計劃時,只管授與優化算法。
總之,要進步數據庫的運轉功用,必需從數據庫零碎級優化、數據庫計劃級優化、次序完成級優化,這三個條理上同時下功夫。
上述十四個才略,是良多人在年夜批的數據庫剖析與計劃實際中,逐步總結出來的。關于這些經歷的運用,讀者不能生幫硬套,去世記硬背,而要消化相識,踏扎實實,迅速駕馭。并逐步做到:在利用中展開,在展開中利用。
版權聲明: 原創作品,應允轉載,轉載時請務必以超鏈接方式標明文章 原始來因 、作者信息和本聲明。不然將追究司法責任。
轉載于:https://www.cnblogs.com/zgqjymx/archive/2011/03/07/1975712.html
總結
以上是生活随笔為你收集整理的数据库计划中的14个才略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL的答理证和技艺撑持费用
- 下一篇: poj 1852