當前位置:首頁 » 數據倉庫 » 資料庫設計規范
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫設計規范

發布時間: 2022-02-07 15:28:49

㈠ 請大夥給我解釋一下資料庫設計的基本原則!

資料庫設計的三範式所謂範式,是關系型資料庫關系模式規范化的標准,從規范化的寬松到嚴格,分別為不同的範式,通常使用的有第一範式、第二範式、第三範式及BC範式等。範式是建立在函數依賴基礎上的。

函數依賴

定義:設有關系模式R(U),X和Y是屬性集U的子集,函數依賴是形為X→Y的一個命題,對任意R中兩個元組t和s,都有t[X]=s[X]蘊涵t[Y]=s[Y],那麼FD X→Y在關系模式R(U)中成立。X→Y讀作『X函數決定Y』,或『Y函數依賴於X』。通俗的講,如果一個表中某一個欄位Y的值是由另外一個欄位或一組欄位X的值來確定的,就稱為Y函數依賴於X。函數依賴應該是通過理解數據項和企業的規則來決定的,根據表的內容得出的函數依賴可能是不正確的。

第一範式(1NF)

定義:如果關系模式R的每個關系r的屬性都是不可分的數據項,那麼就稱R是第一範式的模式。
簡單的說,每一個屬性都是原子項,不可分割。1NF是關系模式應具備的最起碼的條件,如果資料庫設計不能滿足第一範式,就不稱為關系型資料庫。關系資料庫設計研究的關系規范化是在1NF之上進行的。

第二範式(2NF)

定義:如果關系模式R是1NF,且每個非主屬性完全函數依賴於候選鍵,那麼就稱R是第二範式。
簡單的說,第二範式要滿足以下的條件:首先要滿足第一範式,其次每個非主屬性要完全函數依賴與候選鍵,或者是主鍵。也就是說,每個非主屬性是由整個主鍵函數決定的,而不能由主鍵的一部分來決定。舉個例子:
有股票日行情表的主鍵是股 票代碼和交易日期組成。非主屬性中有收盤價和成交量等,都是由主鍵,即股票代碼和交易日期函數決定的,單獨的股票代碼或者交易日期都不能函數決定這些非主 屬性。如果這個表中有非主屬性股票簡稱,則股票簡稱是可以由股票代碼來函數決定的,這樣股票簡稱這個非主屬性就不是完全函數依賴於候選鍵,這樣的設計就不 滿足第二範式。

第三範式(3NF)
定義:如果關系模式R是2NF,且關系模式R(U,F)中的所有非主屬性對任何候選關鍵字都不存在傳遞依賴,則稱關系R是屬於第三範式。
簡單的說,第三範式要滿足以下的條件:首先要滿足第二範式,其次非主屬性之間不存在函數依賴。由於滿足了第二範式,表示每個非主屬性都函數依賴於主鍵。如果非主屬性之間存在了函數依賴,就會存在傳遞依賴,這樣就不滿足第三範式。
舉 個例子:在股票基本情況表中,主鍵是股票代碼,有非主屬性所屬一級行業和所屬二級行業。根據業務規則,所屬二級行業能夠函數決定所屬一級行業,這就表示存 在這樣一種關系:股票代碼函數決定所屬二級行業,所屬二級行業函數決定所屬一級行業,這就形成了傳遞依賴,這樣的設計就不符合第三範式。不過在實際運用 中,為查詢和使用的方便,有時也會違反第三範式。如上例,如果沒有所屬一級行業的屬性,需要查詢所屬一級行業的相關股票,需要查詢時使用函數來從二級行業 中函數生成所屬一級行業,使用性能上會受影響。所以通常會加上所屬一級行業的屬性。

BC範式(BCNF)

BC範式是第三範式的增強版,不過也有人說是直接從1NF發展過來的,即每個屬性,包括主屬性或非主屬性,都完全依賴於候選鍵,並且不存在傳遞依賴情況。

㈡ 資料庫規范設計

這個書上應該都有的啊1.需求分析階段
准確了解與分析用戶需求(包括數據與處理)
是整個設計過程的基礎,是最困難、最耗費時間的一步
2.概念結構設計階段
是整個資料庫設計的關鍵
通過對用戶需求進行綜合、歸納與抽象,形成一個獨立於具體DBMS的概念模型
3.邏輯結構設計階段
將概念結構轉換為某個DBMS所支持的數據模型
對其進行優化
4.資料庫物理設計階段
為邏輯數據模型選取一個最適合應用環境的物理結構(包括存儲結構和存取方法)
5.資料庫實施階段
運用DBMS提供的數據語言、工具及宿主語言,根據邏輯設計和物理設計的結果
建立資料庫,編制與調試應用程序,組織數據入庫,並進行試運行
6.資料庫運行和維護階段
資料庫應用系統經過試運行後即可投入正式運行。

㈢ 理解什麼是資料庫規范化

優點是降低冗餘,利於保證數據的一致性和完整性;缺點是過度的規范化,易造成查詢和統計時的效率下降,這主要是由於多表連接所造成的問題。適當的反規范化設計可以提高效率,但最好在那些數據不太發生變化的情況下使用。通常情況下,可以從兩個方面來判斷資料庫是否設計的比較規范。一是看看是否擁有大量的窄表,二是寬表的數量是否足夠的少。若符合這兩個條件,則可以說明這個資料庫的規范化水平還是比較高的。當然這是兩個泛泛而談的指標。為了達到資料庫設計規范化的要求,一般來說,需要符合以下五個要求。要求一:表中應該避免可為空的列。雖然表中允許空列,但是,空欄位是一種比較特殊的數據類型。資料庫在處理的時候,需要進行特殊的處理。如此的話,就會增加資料庫處理記錄的復雜性。當表中有比較多的空欄位時,在同等條件下,資料庫處理的性能會降低許多。所以,雖然在資料庫表設計的時候,允許表中具有空欄位,但是,我們應該盡量避免。若確實需要的話,我們可以通過一些折中的方式,來處理這些空欄位,讓其對資料庫性能的影響降低到最少。一是通過設置默認值的形式,來避免空欄位的產生。如在一個人事管理系統中,有時候身份證號碼欄位可能允許為空。因為不是每個人都可以記住自己的身份證號碼。而在員工報到的時候,可能身份證沒有帶在身邊。所以,身份證號碼欄位往往不能及時提供。為此,身份證號碼欄位可以允許為空,以滿足這些特殊情況的需要。但是,在資料庫設計的時候,則可以做一些處理。如當用戶沒有輸入內容的時候,則把這個欄位的默認值設置為0或者為N/A。以避免空欄位的產生。二是若一張表中,允許為空的列比較多,接近表全部列數的三分之一。而且,這些列在大部分情況下,都是可有可無的。若資料庫管理員遇到這種情況,筆者建議另外建立一張副表,以保存這些列。然後通過關鍵字把主表跟這張副表關聯起來。將數據存儲在兩個獨立的表中使得主表的設計更為簡單,同時也能夠滿足存儲空值信息的需要。要求二:表不應該有重復的值或者列。為了解決這個問題,有多種實現方式。但是,若設計不合理的話在,則會導致重復的值或者列。如我們也可以這么設計,把客戶信息、聯系人都放入同一張表中。為了解決多個聯系人的問題,可以設置第一聯系人、第一聯系人電話、第二聯系人、第二聯系人電話等等。若還有第三聯系人、第四聯系人等等,則往往還需要加入的欄位。所以,在資料庫設計的時候要盡量避免這種重復的值或者列的產生。筆者建議,若資料庫管理員遇到這種情況,可以改變一下策略。如把客戶聯系人另外設置一張表。然後通過客戶ID把供應商信息表跟客戶聯系人信息表連接起來。也就是說,盡量將重復的值放置到一張獨立的表中進行管理。然後通過視圖或者其他手段把這些獨立的表聯系起來。要求三:表中記錄應該有一個唯一的標識符。在資料庫表設計的時候,資料庫管理員應該養成一個好習慣,用一個ID號來唯一的標識行記錄,而不要通過名字、編號等欄位來對紀錄進行區分。每個表都應該有一個ID列,任何兩個記錄都不可以共享同一個ID值。另外,這個ID值最好有資料庫來進行自動管理,而不要把這個任務給前台應用程序。否則的話,很容易產生ID值不統一的情況。要求四:資料庫對象要有統一的前綴名。一個比較復雜的應用系統,其對應的資料庫表往往以千計。若讓資料庫管理員看到對象名就了解這個資料庫對象所起的作用,恐怕會比較困難。而且在資料庫對象引用的時候,資料庫管理員也會為不能迅速找到所需要的資料庫對象而頭疼。其次,表、視圖、函數等最好也有統一的前綴。如視圖可以用V為前綴,而函數則可以利用F為前綴。如此資料庫管理員無論是在日常管理還是對象引用的時候,都能夠在最短的時間內找到自己所需要的對象。要求五:盡量只存儲單一實體類型的數據。這里將的實體類型跟數據類型不是一回事,要注意區分。這里講的實體類型是指所需要描述對象的本身。筆者舉一個例子,估計大家就可以明白其中的內容了。如現在有一個圖書館里系統,有圖書基本信息、作者信息兩個實體對象。若用戶要把這兩個實體對象信息放在同一張表中也是可以的。如可以把表設計成圖書名字、圖書作者等等。可是如此設計的話,會給後續的維護帶來不少的麻煩。遇到這種情況時,筆者建議可以把上面這張表分解成三種獨立的表,分別為圖書基本信息表、作者基本信息表、圖書與作者對應表等等。如此設計以後,以上遇到的所有問題就都引刃而解了。以上五條是在資料庫設計時達到規范化水平的基本要求。除了這些另外還有很多細節方面的要求,如數據類型、存儲過程等等。而且,資料庫規范往往沒有技術方面的嚴格限制,主要依靠資料庫管理員日常工作經驗的累積。第一範式每個分量不可再分第一範式消除了非主屬性對鍵的部分函數依賴,就是第二範式第二範式消除了任何屬性對鍵的傳遞依賴,就是第三範式~

㈣ 資料庫的規范化設計方法~

第一範式(1NF):資料庫表中的欄位都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字元型、邏輯型、日期型等。

例如,如下的資料庫表是符合第一範式的:

欄位1 欄位2 欄位3 欄位4

而這樣的資料庫表是不符合第一範式的:

欄位1 欄位2 欄位3 欄位4
欄位3.1 欄位3.2

很顯然,在當前的任何關系資料庫管理系統(DBMS)中,傻瓜也不可能做出不符合第一範式的資料庫,因為這些DBMS不允許你把資料庫表的一列再分成二列或多列。因此,你想在現有的DBMS中設計出不符合第一範式的資料庫都是不可能的。

第二範式(2NF):資料庫表中不存在非關鍵欄位對任一候選關鍵欄位的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些欄位決定非關鍵欄位的情況),也即所有非關鍵欄位都完全依賴於任意一組候選關鍵字。

假定選課關系表為SelectCourse(學號, 姓名, 年齡, 課程名稱, 成績, 學分),關鍵字為組合關鍵字(學號, 課程名稱),因為存在如下決定關系:

(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)

這個資料庫表不滿足第二範式,因為存在如下決定關系:

(課程名稱) → (學分)

(學號) → (姓名, 年齡)

即存在組合關鍵字中的欄位決定非關鍵字的情況。

由於不符合2NF,這個選課關系表會存在如下問題:

(1) 數據冗餘:

同一門課程由n個學生選修,"學分"就重復n-1次;同一個學生選修了m門課程,姓名和年齡就重復了m-1次。

(2) 更新異常:

若調整了某門課程的學分,數據表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。

(3) 插入異常:

假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。

(4) 刪除異常:

假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分信息也被刪除了。很顯然,這也會導致插入異常。

把選課關系表SelectCourse改為如下三個表:

學生:Student(學號, 姓名, 年齡);

課程:Course(課程名稱, 學分);

選課關系:SelectCourse(學號, 課程名稱, 成績)。

這樣的資料庫表是符合第二範式的, 消除了數據冗餘、更新異常、插入異常和刪除異常。

另外,所有單關鍵字的資料庫表都符合第二範式,因為不可能存在組合關鍵字。

第三範式(3NF):在第二範式的基礎上,數據表中如果不存在非關鍵欄位對任一候選關鍵欄位的傳遞函數依賴則符合第三範式。所謂傳遞函數依賴,指的是如果存在"A → B → C"的決定關系,則C傳遞函數依賴於A。因此,滿足第三範式的資料庫表應該不存在如下依賴關系:

關鍵欄位 → 非關鍵欄位x → 非關鍵欄位y

假定學生關系表為Student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院電話),關鍵字為單一關鍵字"學號",因為存在如下決定關系:

(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院電話)

這個資料庫是符合2NF的,但是不符合3NF,因為存在如下決定關系:

(學號) → (所在學院) → (學院地點, 學院電話)

即存在非關鍵欄位"學院地點"、"學院電話"對關鍵欄位"學號"的傳遞函數依賴。

它也會存在數據冗餘、更新異常、插入異常和刪除異常的情況,讀者可自行分析得知。

把學生關系表分為如下兩個表:

學生:(學號, 姓名, 年齡, 所在學院);

學院:(學院, 地點, 電話)。

這樣的資料庫表是符合第三範式的,消除了數據冗餘、更新異常、插入異常和刪除異常。

鮑依斯-科得範式(BCNF):在第三範式的基礎上,資料庫表中如果不存在任何欄位對任一候選關鍵欄位的傳遞函數依賴則符合第三範式。

假設倉庫管理關系表為StorehouseManage(倉庫ID, 存儲物品ID, 管理員ID, 數量),且有一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品。這個資料庫表中存在如下決定關系:

(倉庫ID, 存儲物品ID) →(管理員ID, 數量)

(管理員ID, 存儲物品ID) → (倉庫ID, 數量)

所以,(倉庫ID, 存儲物品ID)和(管理員ID, 存儲物品ID)都是StorehouseManage的候選關鍵字,表中的唯一非關鍵欄位為數量,它是符合第三範式的。但是,由於存在如下決定關系:

(倉庫ID) → (管理員ID)

(管理員ID) → (倉庫ID)

即存在關鍵欄位決定關鍵欄位的情況,所以其不符合BCNF範式。它會出現如下異常情況:

(1) 刪除異常:

當倉庫被清空後,所有"存儲物品ID"和"數量"信息被刪除的同時,"倉庫ID"和"管理員ID"信息也被刪除了。

(2) 插入異常:

當倉庫沒有存儲任何物品時,無法給倉庫分配管理員。

(3) 更新異常:

如果倉庫換了管理員,則表中所有行的管理員ID都要修改。

把倉庫管理關系表分解為二個關系表:

倉庫管理:StorehouseManage(倉庫ID, 管理員ID);

倉庫:Storehouse(倉庫ID, 存儲物品ID, 數量)。

這樣的資料庫表是符合BCNF範式的,消除了刪除異常、插入異常和更新異常。

範式應用

我們來逐步搞定一個論壇的資料庫,有如下信息:

(1) 用戶:用戶名,email,主頁,電話,聯系地址

(2) 帖子:發帖標題,發帖內容,回復標題,回復內容

第一次我們將資料庫設計為僅僅存在表:

用戶名 email 主頁 電話 聯系地址 發帖標題 發帖內容 回復標題 回復內容

這個資料庫表符合第一範式,但是沒有任何一組候選關鍵字能決定資料庫表的整行,唯一的關鍵欄位用戶名也不能完全決定整個元組。我們需要增加"發帖ID"、"回復ID"欄位,即將表修改為:

用戶名 email 主頁 電話 聯系地址 發帖ID 發帖標題 發帖內容 回復ID 回復標題 回復內容

這樣數據表中的關鍵字(用戶名,發帖ID,回復ID)能決定整行:

(用戶名,發帖ID,回復ID) → (email,主頁,電話,聯系地址,發帖標題,發帖內容,回復標題,回復內容)

㈤ 如何在資料庫設計是規范成第三範式

你好,很高興能為您解答,請耐心看完,記得採納,謝謝.
第一範式:在任何一個關系資料庫中,第一範式(1NF)是對關系模式的基本要求,不滿足第一範式(1NF)的資料庫就不是關系資料庫。所謂第一範式(1NF)是指資料庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一範式(1NF)中表的每一行只包含一個實例的信息。

第二範式:第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個實例或行必須可以被唯一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。這個唯一屬性列被稱為主關鍵字或主鍵、主碼。

第三範式:滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息。

資料庫的設計範式是資料庫設計所需要滿足的規范,滿足這些規范的資料庫是簡潔的、結構明晰的;同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的編程人員製造麻煩,而且面目可憎,可能存儲了大量不需要的冗餘信息。

㈥ 簡述資料庫設計的要求

資料庫設計的要求

資料庫設計的目標是建立一個合適的數據模型。這個數據模型應當是:

(1)滿足用戶要求:既能合理地組織用戶需要的所有數據,又能支持用戶對數據的所有處理功能。

(2)滿足某個資料庫管理系統的要求:能夠在資料庫管理系統中實現。

(3)具有較高的範式:數據完整性好、效益高,便於理解和維護,沒有數據沖突

㈦ 資料庫設計規范化的第三範式除了要滿足第一第二範式外,還要滿足什麼

還需要滿足:不存在任何一個依賴非關鍵字的列。

㈧ 如何合理和有效的進行資料庫設計

通常情況下,可以從兩個方面來判斷資料庫設計的是否規范:
1)一是看看是否擁有大量的窄表
窄表往往對於OLTP比較合適,符合範式設計原則
2)寬表的數量是否足夠的少。
所謂的寬表就是欄位比較多的表,包含的維度層次比較多,造成冗餘也比較多,毀範式設計,但是利於取數統計
若符合這兩個條件,我們可以說資料庫設計的比較好.
當然這是兩個泛泛而談的指標。為了達到資料庫設計規范化的要求,一般來說,需要符合以下五個要求。
要求一:表中應該避免可為空的列。
雖然表中允許空列,但是,空欄位是一種比較特殊的數據類型。資料庫在處理的時候,需要進行特殊的處理。如此的話,就會增加資料庫處理記錄的復雜性。當表中有比較多的空欄位時,在同等條件下,資料庫處理的性能會降低許多。
所以,雖然在資料庫表設計的時候,允許表中具有空欄位,但是,我們應該盡量避免。若確實需要的話,我們可以通過一些折中的方式,來處理這些空欄位,讓其對資料庫性能的影響降低到最少。
要求二:表不應該有重復的值或者列。
如現在有一個進銷存管理系統,這個系統中有一張產品基本信息表中。這個產品開發有時候可以是一個人完成,而有時候又需要多個人合作才能夠完成。所以,在產品基本信息表產品開發者這個欄位中,有時候可能需要填入多個開發者的名字。
如進銷存管理中,還需要對客戶的聯系人進行管理。有時候,企業可能只知道客戶一個采購員的姓名。但是在必要的情況下,企業需要對客戶的采購代表、倉庫人員、財務人員共同進行管理。因為在訂單上,可能需要填入采購代表的名字;可是在出貨單上,則需要填入倉庫管理人員的名字等等。
為了解決這個問題,有多種實現方式。但是,若設計不合理的話在,則會導致重復的值或者列。如我們也可以這么設計,把客戶信息、聯系人都放入同一張表中。為了解決多個聯系人的問題,可以設置第一聯系人、第一聯系人電話、第二聯系人、第二聯系人電話等等。若還有第三聯系人、第四聯系人等等,則往往還需要加入更多的欄位。
所以,我們在資料庫設計的時候要盡量避免這種重復的值或者列的產生。筆者建議,若資料庫管理員遇到這種情況,可以改變一下策略。如把客戶聯系人另外設置一張表。然後通過客戶ID把供應商信息表跟客戶聯系人信息表連接起來。也就是說,盡量將重復的值放置到一張獨立的表中進行管理。然後通過視圖或者其他手段把這些獨立的表聯系起來。
要求三:表中記錄應該有一個唯一的標識符。
在資料庫表設計的時候,資料庫管理員應該養成一個好習慣,用一個ID號來唯一的標識行記錄,而不要通過名字、編號等欄位來對紀錄進行區分。每個表都應該有一個ID列,任何兩個記錄都不可以共享同一個ID值。另外,這個ID值最好有資料庫來進行自動管理,而不要把這個任務給前台應用程序。否則的話,很容易產生ID值不統一的情況。
另外,在資料庫設計的時候,最好還能夠加入行號。如在銷售訂單管理中,ID號是用戶不能夠維護的。但是,行號用戶就可以維護。如在銷售訂單的行中,用戶可以通過調整行號的大小來對訂單行進行排序。通常情況下,ID列是以1為單位遞進的。但是,行號就要以10為單位累進。如此,正常情況下,行號就以10、20、30依次擴展下去。若此時用戶需要把行號為30的紀錄調到第一行顯示。此時,用戶在不能夠更改ID列的情況下,可以更改行號來實現。如可以把行號改為1,在排序時就可以按行號來進行排序。如此的話,原來行號為30的紀錄現在行號變為了1,就可以在第一行中顯示。這是在實際應用程序設計中對ID列的一個有效補充。這個內容在教科書上是沒有的。需要在實際應用程序設計中,才會掌握到這個技巧。
要求四:資料庫對象要有統一的前綴名。
一個比較復雜的應用系統,其對應的資料庫表往往以千計。若讓資料庫管理員看到對象名就了解這個資料庫對象所起的作用,恐怕會比較困難。而且在資料庫對象引用的時候,資料庫管理員也會為不能迅速找到所需要的資料庫對象而頭疼。
其次,表、視圖、函數等最好也有統一的前綴。如視圖可以用V為前綴,而函數則可以利用F為前綴。如此資料庫管理員無論是在日常管理還是對象引用的時候,都能夠在最短的時間內找到自己所需要的對象。
要求五:盡量只存儲單一實體類型的數據。
這里將的實體類型跟數據類型不是一回事,要注意區分。這里講的實體類型是指所需要描述對象的本身。筆者舉一個例子,估計大家就可以明白其中的內容了。如現在有一個圖書館里系統,有圖書基本信息、作者信息兩個實體對象。若用戶要把這兩個實體對象信息放在同一張表中也是可以的。如可以把表設計成圖書名字、圖書作者等等。可是如此設計的話,會給後續的維護帶來不少的麻煩。
如當後續有圖書出版時,則需要為每次出版的圖書增加作者信息,這無疑會增加額外的存儲空間,也會增加記錄的長度。而且若作者的情況有所改變,如住址改變了以後,則還需要去更改每本書的記錄。同時,若這個作者的圖書從資料庫中全部刪除之後,這個作者的信息也就盪然無存了。很明顯,這不符合資料庫設計規范化的需求。
遇到這種情況時,筆者建議可以把上面這張表分解成三種獨立的表,分別為圖書基本信息表、作者基本信息表、圖書與作者對應表等等。如此設計以後,以上遇到的所有問題就都引刃而解了。

sql資料庫設計規范及如何設置外鍵

20個資料庫設計最佳實踐: 使用明確、統一的標明和列名,例如 School, SchoolCourse, CourceID。 數據表名使用單數而不是復數,例如 StudentCourse,而不是StudentCourses。 數據表名不要使用空格。 數據表名不要使用不必要的前綴或者後綴,例如使用School,而不是TblSchool,或者SchoolTable等等。 資料庫中的密碼要加密,到應用中再解密。 使用整數作為ID欄位,也許現在沒有這個必要,但是將來需要,例如關聯表,索引等等。 使用整數欄位做索引,否則會帶來很大的性能問題 。 使用bit 作為布爾欄位,使用整數或者varcha是浪費。同時,這類欄位應該以「Is」開頭。 要經過認證才能訪問資料庫,不要給每一個用戶管理員許可權。 盡量避免使用「select *」,而使用「select [required_column_list]」以獲得更好的性能。 假如程序代碼比較復雜,使用ORM框架,例如hibernate,iBatis。ORM框架的性能問題可以通過詳細的配置去解決。 分割不常使用的數據表到不同的物理存儲以獲得更好的性能。 對於關鍵資料庫,使用安全備份系統,例如集群,同步等等。 使用外鍵,非空等限制來保證數據的完整性,不要把所有的東西都扔給程序。 缺乏資料庫文檔是致命的。你應該為你的資料庫設計寫文檔,包括觸發器、存儲過程和其他腳本。 對於經常使用的查詢和大型數據表,要使用索引。數據分析工具可以幫助你決定如何建立索引。 資料庫伺服器和網頁伺服器應該放在不同的機器上。這回提高安全性,並減輕CPU壓力。 Image和blob欄位不應該定義在常用的數據表中,否則會影響性能。 範式(Normalization)要按照要求使用以提高性能。Normalization做的不夠會導致數據冗餘,而過度Normalization 會導致太多的join和數據表,這兩種情況都會影響性能。 多花點時間在資料庫設計上,否則你將來會付出加倍的時間來償還。設置外鍵:方法一:SQL語句alter table 表名 add constraint 外鍵名 foreign key(欄位名) references 主表名(欄位名) on delete cascade方法二:不想寫sql 語句也可以直接用圖形化操作 選擇你要創建外鍵的表,反鍵選擇修改表,點擊