數據庫設計


第一.數據庫優化包括哪些方面

數據庫優化是一個綜合型的技術,並不是通過某一種方式讓數據庫效率提高很多,而是通過多方面的提高,從而使的數據庫提高很多
主要包括:
1.表的設計合理化(三范式)
2.給表要添加合適的索引
3.分表技術(水平分割、垂直分割)
4.定時清除垃圾數據,定時進行碎片整理
5.對mysql的配置進行一些優化
6.讀寫分離

第二.數據庫的設計

2.1好數據庫和糟糕數據庫的對比

良好的數據庫:
1.節省存儲空間
2.保證數據完整性
糟糕的數據庫
1.數據冗余,存儲空間的浪費
2.產生數據不完整

2.2 設計數據庫的步驟

2.2.1充分了解需求

2.2.2標識實體:具體存在的對象,名詞

對象如下

用戶

發帖

回帖

版塊

2.2.3標識屬性

2.2.4.標識關系

一對多:主鍵和非主鍵之間的關系,在多的一方創建一個字段作為外鍵指向一的一方的主鍵
多對多:創建一個第三種表,中間表至少需要2個字段分別作為外鍵指向多對多雙方的各自主鍵
一對一:
唯一外鍵對應:假設一對一的雙方是一對多的關系,在多的一方創建外鍵指向一的一方的主鍵,需要在外鍵
上添加一個unique約束
主鍵對應:將一對一的雙方的主鍵建立映射

 2.3數據庫規范化

表設計出來以后,並不是合理的結構,我們需要對表進行規范化(我們通過3范式來對表進行規范化)

2.3.1 第一范式(確保每列的原子性)

第一范式用來規范所有的字段,所有的字段都不可再分,兩列的屬性相近或相似或一樣,盡量合並屬性一樣的列,確保不產生冗余數據。
注意:比如地址這個字段,如果不分類匯總,不排序,僅僅是起一個字符串的作用,這時我們不拆分

上圖所示的用戶信息遵循第一范式的要求,這樣對用戶使用城市進行分類的時候就非常方便,也提高了數據庫的性能。

2.3.2第二范式非主鍵字段必須依賴與主鍵字段,每個表只描述一件事

第二范式需要確保數據庫表中每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。

也就是說在一個數據庫表中,一個表中只能保存一種數據,不可以把多種數據保存在同一張數據庫表中。

比如要設計一個訂單信息表,因為訂單中可能會有多種商品,所以要將訂單編號和商品編號作為數據庫表的聯合主鍵,如下圖。

這里產生一個問題:這個表中是以訂單編號和商品編號作為聯合主鍵,這樣在該表中商品名稱、單位、商品價格等信息不與該表的主鍵相關,

而僅僅是與商品的編號相關,所以在這里違反了第二范式的設計原則。

而如果把這個訂單信息表進行拆分,把商品信息分離到另一個表中,把訂單項目表也分離到另一個表中,就非常完美了,如下圖。

 這里這樣設計,在很大程度上減小了數據庫的冗余,如果要獲取訂單的商品信息,使用商品編號到商品信息表中查詢即可。

 2.3.3第三范式消除傳遞依賴

在非主鍵字段中,如果一個字段可以推導出另外一個字段

比如在設計一個訂單數據表的時候,可以將客戶編號作為一個外鍵和訂單表建立相應的關系,而不可以在訂單表中添加關於客戶其他信息(比如姓名、所屬公司)的字段,

如下面這兩個表所示的設計就是一個滿足第三范式的數據庫表。

這樣在查詢訂單信息的時候,就可以使用客戶編號來引用客戶信息表中的記錄,也不必再訂單信息表中多次輸入客戶信息的內容,減小了數據冗余。

2.3.4反三范式

沒有冗余的數據庫設計可以做到。但是,沒有冗余的數據庫未必是最好的數據庫,有時為了提高運行效率,就必須降低范式標准,

適當保留冗余數據。具體做法是:在概念數據模型設計時遵守第三范式,降低范式標准的工作放到物理數據模型設計時考慮。降低范式就是增加字段,允許冗余,

達到以空間換時間的目的

2.3.5規范化和性能

1.數據庫性能和規范化數據庫更重要

通過在給定的表中添加額外的字段,以減少需要從中搜索信息所需要的時間
通過在給定的表中插入計算列(查詢總分),以方便查詢

2進行規范化的同時,還需要綜合考慮數據庫性能

2.3.6范式化設計和反范式化設計的優缺點

1.范式化

優點

缺點

2.反范式化

優點

缺點

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM