1. 程式人生 > >20條資料庫設計最佳實踐

20條資料庫設計最佳實踐

通常情況下,可以從兩個方面來判斷資料庫是否設計的比較規範。一是看看是否擁有大量的窄表,二是寬表的數量是否足夠的少。若符合這兩個條件,則可以說明這個資料庫的規範化水平還是比較高的。當然這是兩個泛泛而談的指標。為了達到資料庫設計規範化的要求最好滿足以下20條規則:
1、使用定義良好的和一致的名稱表和列(如School、StudentCourse CourseID…)。

2、使用單一的表名(即使用StudentCourse代替StudentCourses)。表代表實體的集合,不需要複數的名字。

3、不要使用空格來定義表名。否則你將不得不使用’{‘、”、’”’等字元定義表(例如accesing表學生課程你會寫”Student Course”。StudentCourse要好得多)。

4、不要使用不必要的字首或字尾表名(例如使用School而不是TblSchool、SchoolTable等等)。

5、保持加密密碼的安全。在應用程式需要時進行解密。(雜湊儲存、單向加密)

6、使用整數型別的id應用於所有表。如果暫時不需要id,它可能需要在未來(關聯表,索引……)。

7、選擇整數資料型別(或其變體)的列為索引。varchar型別的列索引將會導致效能問題。

8、使用bit型別應用於布林值。使用integer或varchar就會產生不必要的儲存消耗。當命名這些列的時候最好以”Is”開頭。

9、需要資料庫訪問許可權。不要給每個使用者admin角色。

10、避免”select *”查詢,直到它真的是必要的。使用”選擇[required_columns_list]”獲得更好的效能。

11、假如程式程式碼比較複雜,使用ORM(object relational mapping)框架。ORM框架的效能問題可以由詳細的引數配置。

12、把那些用得很少或者沒有使用的表分配到不同的物理儲存,這樣就可以得到更好的查詢效能。

13、對於那些大的、敏感的和以及最要的資料庫系統,利用災難恢復與安全的服務。例如故障轉移叢集、自動備份、複製等。

14、對資料的完整性使用約束(外來鍵,檢查,not null…)。不要把所有的控制邏輯交給應用程式程式碼。

15、缺乏資料庫文件是很不幸的。編寫資料庫設計文件使用ER圖並且說明。並且為你觸發器、儲存過程和其他指令碼寫註釋。

16、為大表並且常用的查詢增加索引。分析器工具可以用來確定哪裡需要使用索引。查詢一系列的行來作為條件,聯合索引通常是更好。對於單個欄位的條件查詢,為該字元作為索引通常是更好。

17、資料庫伺服器和web伺服器必須部署在不同的機器上。這將提供更多的安全(攻擊者不能直接訪問資料)並且伺服器CPU和記憶體效能會更好,因為減少請求數和處理。

18、圖形和blob資料列不能定義在頻繁查詢的表中,這是基於的效能考慮。把這些資料單獨放在單獨的表中。然後用引用指向這些資料,也就是關聯查詢。

19、必須使用資料庫設計第三正規化規範化要求,優化效能。不使用正規化將導致過度重複的資料在太多的表中,過度使用正規化將導致太多的表需要jion。他們都會使用系統的效能變得很差。

20、很有必要花時間對資料庫進行建模和設計。否則為了減少設計時間將導致花費 10倍/100倍甚至1000倍的時候用於維護和重新設計。
原文地址:20 Database Design Best Practices

相關推薦

20資料庫設計最佳實踐

通常情況下,可以從兩個方面來判斷資料庫是否設計的比較規範。一是看看是否擁有大量的窄表,二是寬表的數量是否足夠的少。若符合這兩個條件,則可以說明這個資料庫的規範化水平還是比較高的。當然這是兩個泛泛而談的指標。為了達到資料庫設計規範化的要求最好滿足以下20條規則:

響應式網站設計 - 最佳實踐

設備 http 優先 設置 訪問速度 when big mob med 一.移動優先   手機設計稿通常更為簡約,由手機設計稿開始制作簡單版本,隨著平板和桌面的引入,頁面慢慢復雜,這是一個遞增的過程,前期把精力放到核心模塊上,默認打開簡潔的手機樣式,而負責的樣式包裹在med

RESTful API 設計最佳實踐

並不是 要求 關於 bin 是我 最好 實用 link keep 數據模型已經穩定,接下來你可能需要為web(網站)應用創建一個公開的API(應用程序編程接口)。需要認識到這樣一個問題:一旦API發布後,就很難對它做很大的改動並且保持像先前一樣的正確性。現在,網絡上有很

11. RESTful API 設計最佳實踐

API 設計規範 API 設計規範 URI 的設計 過濾、排序和搜尋等資訊 響應和錯誤處理 版本控制(delete) 認證 快取 未完待續… 其他規範可參考

YSlow團隊的23“Web效能最佳實踐和規則”

1、儘可能減少HTTP請求次數 2、使用CDN 3、避免空src和href標籤 4、加入Expires或Cache-Control Header 5、使用Gzip壓縮 6、在html檔案頂部放置樣式表 7、在html檔案底部放置JavaScript指令碼 8、避免使用CS

50資料庫設計基本概念

資料庫設計步驟:需求分析-概念設計-邏輯結構設計-物理結構設計-資料庫建立和測試-資料庫執行和維護 E-R圖:實體-聯絡圖(Entity-Relationship Diagram)。提供了表示實體型別、屬 性和聯絡的方法,用來描述現實世界的概念模型。用矩形框表示實體,橢圓形框表 示屬性,菱形框表示實體之間的

MaxCompute表設計最佳實踐

MaxCompute表設計最佳實踐 產生大量小檔案的操作 MaxCompute表的小檔案會影響儲存和計算效能,因此我們先介紹下什麼樣的操作會產生大量小檔案,從 而在做表設計的時候考慮避開此類操作。 使用MaxCompute Tunnel SDK上傳資料,上傳過程中,每commit一次就會產生一個檔

讓天下沒有難用的資料庫 » RDS最佳實踐(五)

背景:RDS Mysql採用的binlog 格式預設為ROW,在Mysql 5.6的版本之前,Mysql每次列的修改(update)都需要記錄表中所有列的值。這樣就存在一個問題,如果表中包含很多的大欄位,表的單行長度就會非常長,這樣每次update就會導致大量的 binlog空間生成。針對這個問題,

讓天下沒有難用的資料庫 » RDS最佳實踐(四)

早上值班同事在旺旺群裡面貼了一條非常複雜的SQL,使用者從本地遷移到RDS Mysql出現嚴重效能下降,同樣的資料和表結構下,在本地的資料庫上只要不到1s的時間,但是在rds上好幾分鐘都沒響應。 碰到這類問題需要考慮以下一些因素: a.資料庫的版本不同(不同的版本優化器策略不一樣,或者異構資料庫間的

讓天下沒有難用的資料庫 » RDS最佳實踐(三)

上一篇文章中,我們介紹瞭如何快速的把本地自建的資料庫遷移入雲,那是不是把資料庫遷移到RDS後,使用者就什麼都不需要做了?比如RDS幫你的資料庫做到了高可用,在主庫出現down機後能夠快速切換到備庫,立刻恢復應用;每天會定時的備份資料和日誌,如果出現誤操作能夠幫你恢復到任意時間點;如果擔心黑客攻擊或者

讓天下沒有難用的資料庫 » RDS最佳實踐(二)

使用者在購買完RDS後,接下來就可以開始往RDS遷入資料了。在RDS剛剛對外提供服務的時候,使用者只能通過將自己的資料庫dump成為sql檔案,然後再將sql檔案source到RDS中去:資料遷移至RDS-MySQL之使用MySQLdump工具,資料遷移至RDS-SQLserver之利用SQL Server

讓天下沒有難用的資料庫 » RDS最佳實踐(一)

我該如何選擇RDS?我要購買多大規格的RDS?RDS的連線數,iops指的是什麼?上訴這些問題相信是每一個RDS使用者在開始使用的時候都會有這樣的疑問。首先我們要了解一下RDS的組成包括哪一些,從阿里雲官網的購買頁面中我們可以看到RDS包括了以下引數:資料庫型別,版本,儲存空間,規格:記憶體+連線數

阿里研究員谷樸:API 設計最佳實踐的思考

API是軟體系統的核心,而軟體系統的複雜度Complexity是大規模軟體系統能否成功最重要的因素。但複雜度Complexity並非某一個單獨的問題能完全敗壞的,而是在系統設計尤其是API設計層面很多很多小的設計考量一點點疊加起來的(也即John Ousterhout老爺子說的Complexity is in

[轉] 阿里研究員谷樸:API 設計最佳實踐的思考

API是軟體系統的核心,而軟體系統的複雜度Complexity是大規模軟體系統能否成功最重要的因素。但複雜度Complexity並非某一個單獨的問題能完全敗壞的,而是在系統設計尤其是API設計層面很多很多小的設計考量一點點疊加起來的(也即John Ousterhout老爺子說的Complexity is in

Dropbox可伸縮性設計最佳實踐分享

Run with extra load(通過額外載入發現系統故障) 在生產環境最常用的一個技巧就是,人為製造一些額外的資料進行載入。舉個例子,生產環境常常針對快取伺服器進行額外的資料讀取載入(Memcached Read),如果快取伺服器down機,運維工程師就可以馬

Cassandra資料模型設計最佳實踐(上)

本文是Cassandra資料模型設計第一篇(全兩篇),該系列文章包含了eBay使用Cassandra資料模型設計的一些實踐。其中一些最佳實踐我們是通過社群學到的,有些對我們來說也是新知識,還有一些仍然具有爭議性,可能在要通過進一步的實踐才能從中獲益。 本文中,我將會講解一些

Cassandra資料模型設計最佳實踐(上部)

本文是Cassandra資料模型設計第一篇(全兩篇),該系列文章包含了eBay使用Cassandra資料模型設計的一些實踐。其中一些最佳實踐我們是通過社群學到的,有些對我們來說也是新知識,還有一些仍然具有爭議性,可能在要通過進一步的實踐才能從中獲益。 本文中,我將會講解

web設計最佳實踐核對清單

http://terrymorris.net/bestpractices/ Web Design Best Practices ChecklistBackground Information     * URL:     * Target Audience:    

領域驅動設計最佳實踐--程式碼篇

做一個租戶系統下的許可權服務,接管使用者的認證和授權,我們取名該服務為oneday-auth-server 寫在前面 ​ DDD(領域驅動設計)中涉及到幾個概念,實體,值物件,聚合,限定上下文。本篇只涉及實踐,概念講解將放在下一篇,同時上一篇為什麼我們需要領域驅動設計作為科普帖,大家可以在看完程式碼之後再

資料庫設計最佳實踐

1、使用定義明確的表或列名,並保持一致(例如,School、StudentCourse、CourseID)。 2、使用單數形式的表名(即,用StudentCourse而非StudentCourses)。表代表了實體的合集,不需要複數形式。 3、不要在表名中使用空格。否則你將