數(shù)據(jù)庫的設(shè)計范式

我們都知道在建立數(shù)據(jù)表中需要遵循一定的規(guī)則,在運用關(guān)系型數(shù)據(jù)庫中的這種規(guī)則就稱為范式,所以要建立合理的數(shù)據(jù)表就需要遵循這些規(guī)則。

首先先來說說數(shù)據(jù)庫設(shè)計中存在哪些設(shè)計范式:最多使用的是3NF,除此之外還有針對多值依賴的第四范式,連接依賴的第五范式,DK范式和第六范式。

好了,廢話不多說了,今天重點介紹下數(shù)據(jù)庫設(shè)計中的三大范式:

第一范式

1NF 屬性的原子性

舉個例子:

ID? 學(xué)號? 姓名? 地址? 出生年月日? ? 這個還可以 將 地址 和? 出生年月日進行拆分? 不符合第一范式?

ID? 學(xué)號? 姓名? 省份 市區(qū) 縣區(qū)? ? 年 月? 日? ? 字段不能再拆分? ? 這就是符合第一范式? ?

第一范式作為數(shù)據(jù)庫中最基本的范式,要求數(shù)據(jù)表中所有的字段都是不可分割的基本數(shù)據(jù)項,也就是原子性的特征,比如上例中的地址可以再拆分為 省 市 縣區(qū)。

第二范式

2NF 實體唯一性

同樣也是來個例子:

學(xué)號? 課程號? 姓名? 學(xué)分? ? ? 這里邊? 學(xué)號 依賴于姓名? ? 學(xué)分 依賴于 課程號?

? 問題:

? 1.每行會存在相同信息?

? 2.刪除 成績?nèi)菀装颜n程信息干掉

3.如果學(xué)生沒選課程? 數(shù)據(jù)庫中就不存在該學(xué)生的姓名?

? 4.調(diào)整學(xué)分? 所有的行都得更新?

正確的做法? Student (學(xué)號? 姓名)

Course(課程號 學(xué)分? )

? ? ? ? 選課表(學(xué)號? 課程號? 成績? )

第二范式首先遵循 第一范式? ? 記錄要有唯一的標識 實體唯一性? 不存在部分依賴。也就是說一個數(shù)據(jù)庫表中,一個表只能保存一種數(shù)據(jù),不能將同一種數(shù)據(jù)保存在同一張表中

第三范式

3NF 不存在傳遞依賴

哈哈,還是以例子來說明吧:

學(xué)號? 姓名? 年齡? 學(xué)院? 學(xué)院電話?

? 學(xué)號 ->學(xué)生姓名? ->所在學(xué)院 ->學(xué)院電話?

正確的做法 是? ?

? 學(xué)生 (學(xué)號 姓名? 年齡 所在學(xué)院)

? 學(xué)院? (學(xué)院名稱? 學(xué)院電話)

第三范式就是任何字段不能由其他字段派生出來 也就是說 不存在傳遞依賴

再舉另外一個例子說明:

比如在設(shè)計一張訂單數(shù)據(jù)表的時候,可以將商品的編號和訂單的編號建立相應(yīng)的關(guān)系,而不是將商品的信息和訂單的信息放在同一張表中進行存儲。

當然可以進行反范式的設(shè)計:為了提高查詢? 更新效率? 可以適當增加冗余字段 以 空間? 換時間

范式和非范式的區(qū)別:

范式?

減少數(shù)據(jù)的冗余?

更新 快? 表 體積小?

范式 比反范式 更新起來快?

缺點:

? 查詢? 表關(guān)聯(lián)?

? 索引優(yōu)化 難度 大?

反范式

減少表關(guān)聯(lián)? ?

索引優(yōu)化 比 范式優(yōu)化方便?

缺點

數(shù)據(jù)冗余? ?

更新數(shù)據(jù) 成本大? ? ? ?

如果 表? 讀的多? 適當反范式設(shè)計? ? 以空間 換時間? ? 如果更新的 多? 那么 遵循第三范式? ? ?

從性能上講,范式有更好的寫性能,飯范式有更好的讀性能。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容