如何設計資料庫表?

2021-10-05 02:56:54 字數 2137 閱讀 3825

背景

最近在準備軟體設計師的資格考試。首先表達一下我為什麼會去考這個證,主要有以下兩點:

薪資待遇,求職。雖然很多人說該證書沒有用。但是有一些大廠會直接給你加薪的。我記得hk中級資格證書,每個月1000的補貼。高階資格證書是1500的補貼。並且在簡歷中,你有這個證書,hr對你的認可也會深刻。在福利面前,我建議大家盡量去考一下。

於是,我就準備通過考證,來建立我的技能體系。有一句話,我很喜歡:不要為了考證而去考證。所以,在學習每一章節的時候,我會盡量聯絡到我已有的工作上來或嘗試用到某些方面。加深理解,也能提高工作上的效率。遇到感受很深刻的內容,我會記錄下來,和大家分享一下。

如何評價資料庫的優劣

本章的經驗之談,我覺得比較適合沒有接觸設計資料庫的朋友,並且不會很深入,高手可以忽略啦。

工作中,我們根據需求進行資料庫的設計,其實就是對錶的字段設計,表中該有哪些欄位是比較合理的。一般能夠滿足需求即可,很少會考慮到一些其他問題。其實對於資料庫表的格式,是有評判優劣標準的(我也是看書知道的,以往評判乙個表的好壞全由自己的經驗而來)。

資料庫的設計就是設計滿足適當正規化的模式。正規化有1nf,2nf,3nf,bcnf,4nf和5nf。它們的關係是:5nf>4nf>bcnf>3nf>2nf>1nf。這裡的正規化,你可以認為是表中各個屬性(字段)要滿足對應正規化的定義。實際工作中,我們一般滿足3nf即可。

第一正規化

定義:若關係模式r的每乙個分量是不可再分的資料項,則關係模式r屬於第一正規化

我的理解:就是表中的字段都是不可再分的資料項。如下表:

該錶的就不滿足第一正規化,因為高階職稱人數不是乙個原子屬性。將其拆分為教授和副教授則滿足1nf。

第二正規化

定義:若關係模式r屬於1nf,且每個非主屬性完全依賴於碼,則關係模式r屬於2nf.

我們先看下表:

關係模式:f=

snosname

status

city

pnoqty

s1精益

20天津

p1200

s1精益

20天津

p2300

s1精益

20天津

p3480

s2盛錫

10北京

p2168

s2盛錫

10北京

p3500

s3東方紅

30北京

p1300

s3東方紅

30北京

p2280

s4泰達

40上海

p2460

我們知道可以分辨出該表滿足1nf。但是存在4個問題:

從關係模式f中我們可以看出,sno,pno是主碼。而sno->status。因此非主屬性status部分依賴於碼。故非2nf。我們可以進行以下修改。將表分解為:

table1(sno,sname,status,city),主碼為sno

table2(sno,pno,qty),主碼為sno,pno

即可避免1nf存在的問題。

第三正規化

定義:若關係模式r(u,f)中不存在這樣的碼x,屬性組y及非主屬性z(z不屬於y)使得x->y,y->z成立,則關係模式r屬於3nf。

我的理解:這個定義可能比較複雜。簡單來說就是判斷表中是否存在傳遞依賴,即x->y,y->z的條件。若不存在,則是滿足3nf。

例:我們剛在2nf中,將表分解為table1(sno,sname,status,city)。其中存在sno->status,status->city。故上面的table1和table2花不滿足3nf。需要再進行下面的分解:

table1(sno,sname,status)

table2(status,city)

table3(sno,pno,qty)

既滿足3nf。

總結即使我們現在還不是大牛,但是在工作中,如果讓我們設計資料庫,起碼已經知道評判的方式,最起碼要建立乙個滿足3nf的資料表。

若有朋友也想考軟體設計師,我這邊可以將我的資料發給你。(在鹹魚上買的,個人覺得還不錯,有很多的習題以及歷年的考題)在下方留下你的郵箱即可

如何設計資料庫

表與表之間的關係 例如下圖 假設使用者下單需要哪些表?每張表設計什麼字段,要用什麼型別 例如 建立個user表 create table t user id int 11 not null auto increment comment 使用者表id username varchar 50 not n...

設計 資料庫表的設計

李阿昀的部落格 複雜型別的物件有幾種表現形態 以部門和員工的關係來說明一對多或多對一的物件是怎麼儲存到資料庫表中的。資料庫表的設計的原則 先不要去管這些物件的關係,看某個物件有什麼基本屬性,然後設計乙個表來儲存此物件的基本資料。在資料庫裡面怎麼去保證資料往資料庫裡面存的時候,關係不丟呢?這裡面有乙個...

如何設計資料庫 1 ?

為什麼需要設計資料庫 這裡我們思考兩個問題 修建茅屋需要設計嗎?修建大廈需要設計嗎?結論是 當資料庫比較複雜 如資料量大,表較多,業務關係複雜 時,我們需要先設計資料庫 因為,良好的資料庫設計能夠 q節省資料的儲存空間 q能夠保證資料的完整性 q方便進行資料庫應用系統的開發 糟糕的資料庫設計 q資料...