資料庫表的設計原則

2021-07-05 03:05:12 字數 2530 閱讀 1208

建立資料庫裡最基本的應該就是建表,建索引、儲存過程等一系列操作了。談到表就不得不談到實體。

資料實體

什麼是實體,客觀存在並且可以相互區別的事物稱為實體。這裡我們就簡單的把它理解為乙個表吧,描述實體的特性,我們就把他們稱為了屬性。也可以說當我們把乙個資料庫表當作乙個實體,那麼它裡面的所有字段是不是就是乙個屬性了呢?結果是肯定的。

實體間的聯絡

我想說的是,很簡單,資料庫裡表跟表間的關係莫過於三種:一對一;多對多;一對多。

一對一其實就是說我們建的主表跟相關聯的表之間是一一對應的,比如說,我建了乙個學生基本資訊表:t_student,然後我又建了乙個成績表,裡面有個外來鍵,studentid,學生基本資訊表裡的字段studentid和成績表裡的studentid就是一對一。

一對多,也是類似,我另外建乙個班級表,而每個班級有多個學生,每個學生就對應乙個班級,對班級來說當然就是一對多了。

多對多,我還舉這個例子,我建個選課表,可能有許多科目,每個科目有很多學生選,而每個學生又可以選擇多個科目。這就是多對多了。

基本表的完整性

(1) 原子性。基本表中的字段是不可再分解的。

(2) 原始性。基本表中的記錄是原始資料(基礎資料)的記錄。

(3) 演繹性。由基本表與**表中的資料,可以派生出所有的輸出資料。

(4) 穩定性。基本表的結構是相對穩定的,表中的記錄是要長期儲存的。

這是基本表的完整性,也是它特有的。這裡我想說的是,在資料庫裡還有幾種表也是常用的那就是中間表和臨時表。

在本次專案中,我們就要用到臨時表,首先來看看什麼是臨時表吧。這是我從網上書上查到的。因為我們用的是ms sql server 2000資料庫,而在這個資料庫裡是支援臨時表的。

臨時表:其實就是那些以#號開頭為名字的資料表,它主要是用來存放臨時資料的,當使用者斷開連線但沒有出去臨時表裡的資料時,系統會自動把臨時表裡的資料清空。這裡要說一點,臨時表是放在系統資料庫 tempdb中的,而不是當前資料庫。

臨時表總共是分兩種:本地臨時表和全域性臨時表。

(1)這裡我們需要了解的就是,在資料庫中本地臨時表是以乙個#開頭的,這種臨時表只對當前的資料庫使用者可見,而其他的使用者是不可見的。當資料庫例項斷開後當然也就丟失了資料了,不管是顯式清空還是系統**。

(2)還有乙個就是全域性臨時表。它是以「##」開頭的,而且是對於所有的使用者都是可見的,當你斷開資料庫例項連線時,只要還有別的系統專案在引用它,連著資料庫,那麼資料就存在,只有當別的系統也斷開連線時,系統才會清除全域性臨時表的資料。

下面是建立臨時表的語句:

本地臨時表:

create table #student(

studentid int ,

studentname nvarchar (40),

classid int

);全域性臨時表:

create table ##student(

studentid int ,

studentname nvarchar (40).

classid int

); 這裡我們也可以用sql語句完成:

select * from employee into #student

現在就來看看三大正規化。

第一正規化:如果每列(或者每個屬性)都是不可再分的最小資料單元(也稱為最小的原子單元),則滿足第一正規化.比如乙個工人的基本資訊表,裡面有工人的工號,性別,年齡,這些屬性都是不可分割的,所以這個表就符合了第一正規化。

第二正規化: 就是在第一正規化的基礎上延伸,使之表裡的每個欄位都與主鍵發生關係。假如乙個關係滿足第一正規化,並且除了主鍵以外的其它字段,都依賴於該主鍵,則滿足第二正規化.

例如:訂單表(訂單編號、產品編號、定購日期、**、……),」訂單編號」為主鍵,」產品編號」和主鍵列沒有直接的關係,即」產品編號」列不依賴於主鍵列,這個列我們就可以把它刪除。

我們來看一下它的定義:

設u是關係模式r 的屬性集,f 是r 上成立的只涉及u 中屬性的函式依賴集。若x→y 和 y→z在r 上成立,則x →z 在r 上成立。因此我們就來看在網上搜尋到的例子:例如:訂單表(訂單編號,定購日期,顧客編號,顧客姓名,……),初看該錶沒有問題,滿足第二正規化,每列都和主鍵列」訂單編號」相關,再細看你會發現」顧客姓名」和」顧客編號」相關,」顧客編號」和」訂單編號」又相關,最後經過傳遞依賴,」顧客姓名」也和」訂單編號」相關。為了滿足第三正規化,應去掉」顧客姓名」列,放入客戶表中。

這裡其實就是為了說明資料庫的表裡步要出現冗餘,在顧客表裡已經有了」顧客姓名」了,而在訂單表裡就別出現了,而直接根據顧客編號相關聯就可以,否則造成資源浪費。

以上就是三大正規化。

延伸:我們來看這三大正規化:

第一正規化:1nf是對屬性的原子性約束,要求屬性具有原子性,不可再分解;

第二正規化:2nf是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;

第三正規化:3nf是對字段冗餘性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗餘。

其實在設計資料庫的時候我們最多的要遵循的就是第三正規化,但是並不是越滿足第三正規化資料庫就設計的越完美,這種錯誤是錯誤的。有時候增加點冗餘相反的會提高訪問速率,因此在實際的設計過程中應降低對正規化的要求。

mysql的表設計原則 資料庫表設計的原則

命名規則 1 資料庫名 表名 欄位名全部採用小寫字母,以下劃線分割 表設計原則 1 各表必須設定主鍵 可以是組合主鍵 否則無法生成該錶的 2 當表中有 create time update time欄位時,web後台會生成獨特的功能,否則生成的web後台還需要稍微改一下 請習慣建立這兩個字段 3 當...

資料庫設計原則

高效資料庫的設計原則 讀寫分離原則。這裡的讀寫分離是指,讀多寫少的字段與寫多讀少的字段分開存放於不同的表。按照磁碟的工作原理,磁碟是以扇區為單位存放資料的,並且有寫緩衝 排隊 延遲寫入的特點。資料庫是以記錄為單位的,每次訪問,總是將整行記錄讀入緩衝區,再依命令所需的字段從中篩選資料,組成返回的記錄行...

資料庫設計原則

1.原始單據與實體之間的關係 可以是一對 一 一對多 多對多的關係。在一般情況下,它們是一對一的關係 即一張原始單據對應且只對應乙個實體。在特殊情況下,它們可能是一對多或多對一的關係,即一張原始單證對應多個實體,或多張原始單證對應乙個實體。這裡的實體可以理解為基本表。明確這種對應關係後,對我們設計錄...