資料庫設計經驗之 表的設計

2021-08-25 03:57:32 字數 1218 閱讀 7027

1、定義一些字典表,在命名字段並為其指定資料型別的時候要保證一致性,可以在字典表裡定義常用字段的名稱、型別、列舉值及其對應的意思。列舉值可以用整型(有大小關係,例如:許可權級別)或短字元**(便於擴充,例如:渠道標識),這樣在實際表記錄中字段值可以較小,對於大表可以省空間,同時提高表掃瞄的效率。

2、盡量不要使用auto_increment型別字段作為主鍵,這樣會使分布、備份、還原有一定的問題。

3、如果表中的資料會經常變動,一定要加上「最近更新日期/時間」字段,對於頻繁變動的記錄,還可另外再加乙個變更日誌表。變更日誌表一般在查錯或事後審核時用,所以在實時系統裡該錶可以不加任何主鍵及索引,提高插入效率,然後把資料放到非實時庫中建索引進行查詢。

4、外來鍵用來保證資料一致性,但在實時系統裡,通過應用程式邏輯的嚴密性保證資料的一致性,從而不在表上定義外來鍵關係,可以起到提高資料庫效能的作用,特別是對於大型表而言。

5、一般的表設計都會遵行第三正規化,對於複雜的實時系統,會產生許多關聯表,對於更新及刪除操作,不會產生什麼效能問題,但是對於查詢,也許會造成負面的影響。如果實時系統裡存在大量不可少的關聯查詢,比如要超過3個以上表進行關聯時,考慮到效能因素,可以在表中加入少量的冗餘字段,以減少表的關聯操作,但這種行為必須謹慎考慮,防止對更新及刪除產生過多影響。

6、字段型別的選擇可考慮一定的擴充套件性,但是盡量選擇儲存小的型別和長度,例如:能用小整型的地方不要用大整型;如果欄位是固定長度或長度變化範圍不太的,選用固定長度型別;如果字元型別與整數型別都可用,盡量選整數型別。

7、對巨大資料量表的設計,可以考慮表分割槽實現。表分割槽是將乙個大表分成多個分割槽表,以提高大表的訪問效能。如果某個大表滿足以下兩個條件,可以適當的考慮分割槽:

(1)存在適合分割槽的表字段,並且只訪問某一特定條件的資料。如存在日期字段,則可考慮按季度或按月份進行分割槽。

(2)由於資料量大,導致對錶的訪問開銷巨大,不能達到預期的處理響應。分割槽可以將表和索引分的更小,更容易管理,從而提高響應速度。

8、流水表,可以分為當前表和歷史表。例如:考慮業務的需要,可以把最近三個月的資料放在當前表中,三個月以前到一年以內的資料放在歷史表中,配置固定任務,每天晚上或在業務不頻繁的時候把過期資料從當前表移到歷史表中。當前錶小,可以少建索引,歷史表適量建多些索引,一年以前的資料定時移到非實時資料庫中存檔。如果歷史錶太大,做備份歸檔,並刪除資料庫舊記錄。

9、上面是資料的水平分割方式,還可以考慮資料的垂直分割方式,將原始表分成多個包含較少列的表。例如下面的情況:應用程式經常只需要訪問部分資料列,很少時候需要訪問其它部分資料列。

資料庫設計經驗之 索引的設計

1 索引應該有足夠的區分度,對區分度不大的列 例如列舉型別字段 不應該做索引 這時候應該考慮加上諸如時間範圍這樣的限制條件對記錄進行篩選 對乙個表中最影響效能的列,可以考慮做聚簇索引。2 小表少建索引或不建索引,可以載入到記憶體中訪問。3 索引字段一般為差異性較大 長度較小的型別,在這些欄位上經常做...

Blog資料庫設計之Tags表設計

blog中一篇文章可以有多個tag,乙個tag也可能包含很多文章,關於什麼是tag,您可以先看看 這篇文章 tag在使用過程中會有以下的幾種操作 1 新增 2 刪除 就這個問題我諮詢過不少同行,大部分的回答是在文章表中建立乙個存貯tag id的字串型別字段,每個tagid之間使用特殊字元分割,但我覺...

資料庫 庫表設計 分享一些庫表設計經驗

本文的核心內容 記錄積累一些庫表設計方案與技巧 資料庫表的選單 分類 設計 如省市關聯 圖書的 一 二級分類。資料庫表設計之購物車,利用session暫時儲存購物車資訊。booktype 一級分類 少兒 外語 計算機 bookclass 二級分類 少兒 0 2歲 3 6歲 7 10歲 11 14歲 ...