1. 程式人生 > >MySQL資料庫設計規範

MySQL資料庫設計規範

MySQL 資料庫設計規範

目錄

  1. 基礎規範
  2. 索引規範
  3. SQL設計

1. 基礎規範 ^

1.1. 使用Innodb儲存引擎

1.2. 表字符集統一使用UTF8

  • 如果遇到 EMOJ 等表情符號的儲存需求,可使用 utf8mb4 字符集。

1.3. 控制單表字段數量

  • 單表字段數上限30左右,再多的話考慮垂直分表,一是冷熱資料分離,二是大欄位分離,三是常在一起做條件和返回列的不分離。

1.4. 所有表都要添加註釋!所有表都要添加註釋!所有表都要添加註釋!

重要的事情說三遍,例如status型需指明主要值的含義,註釋“0-刪除,1-正常”。

1.5. 不強制使用外來鍵參考

  • 即使2個表的欄位有明確的外來鍵參考關係,也不使用 FOREIGN KEY ,因為新紀錄會去主鍵表做校驗,影響效能。

1.6. 資料庫中不允許儲存明文密碼

2. 命名設計與規範 ^

2.1. 庫表設計與規範

  • 庫名、表名、欄位名必須使用小寫字母,並採用“_”下劃線分割。

  • 庫名以 d_ 開頭,表名以 t_+相關業務 開頭。

  • 臨時庫、表名須以 tmp 加日期為字尾,按日期時間分表須符合 _YYYYMMDD 格式。

2.2. 欄位設計與規範

  • 表必須定義主鍵,預設為表名+_id,整型自增,修改和新增時不允許修改主鍵。

  • 命名簡潔明確,需見名知意(長度不能超過32

    個字元)。

  • 多表中的相同列,儘可能命名一致,型別、長度必須一致

  • 用好數值型別,例如:能使用 int 就不要使用 varchar、char ,能用 varchar(16) 就不要使用 varchar(256) 。

  • 字元轉化為數字(能轉化的最好轉化,同樣節約空間、提高查詢效能)。

  • 避免使用 NULL 欄位,並設定 default( NULL 欄位很難查詢優化、 NULL 欄位的索引需要額外空間、 NULL 欄位的複合索引無效)。

  • 在允許的情況下,表必須包含記錄建立時間和修改時間的欄位

  • IP地址最好使用 int 型別。

  • 固定長度的型別最好使用 char ,例如:郵編。

  • 能使用 tinyint 就不要使用 smallint 、 int 。

  • 禁止使用 float 、 double 型別,建議使用 decimal 或者 int 替代。

  • 日期型別欄位(時間戳可直接使用int(10))根據需要定義成對應格式,儘量不要使用 varchar 格式。

型別 大小 格式 用途
DATE 3 YYYY-MM-DD 日期值
TIME 3 HH:MM:SS 時間值或持續時間
YEAR 1 YYYY 年份值
DATETIME 8 YYYY-MM-DD HH:MM:SS 混合日期和時間值
TIMESTAMP 4 YYYYMMDD HHMMSS 混合日期和時間值,時間戳

3. 索引規範 ^

3.1. 任何複雜的SELECT, UPDATE, DELETE,都要先EXPLAIN,看索引使用情況

  • 儘量避免 extra 列出現: Using File Sort , Using Temporary , rows 超過1000的要謹慎上線。

  • 可根據需要調整索引。

3.2. 索引個數限制

  • 單張表的索引數量控制在5個以內,或不超過表字段個數的20%。

3.2. 索引儘量建在選擇性高的列上

3.3. 儘量不要在頻繁更新的列上建立索引

3.4. 避免冗餘索引

例如: index1 的定義為 test(filed1,filed2) ,
index2 的定義為 test(filed1,filed2,filed3) ,
則認為index1是多餘的。

3.5. 避免在WHERE條件中,在索引列上進行計算或使用函式,因為這將導致索引不被使用

SELECT empno, ename, sal, sal*12 FROM emp1 WHERE sal*12 > 20000;
應該修改為:
SELECT empno, ename, sal, sal*12 FROM emp1 WHERE sal > 20000/12;

3.6. 索引命名

  • 非唯一索引必須按照 index_欄位名稱_欄位名稱[_欄位名] 進行命名。

  • 唯一索引必須按照 uniq_欄位名稱_欄位名稱[_欄位名] 進行命名。

4. SQL設計 ^

4.1. 儘量不要直接 SELECT * 讀取全部欄位,即使需要所有列

4.2. 禁止使用非同型別的列進行等值查詢

  • 用不同型別列進行等值查詢,容易導致錯誤以及隱式型別轉換,可以先在程式碼中轉換後再變成SQL查詢。

4.3. 資料更新建議使用二級索引先查詢出主鍵,再根據主鍵進行資料更新

4.4. 使用join時,where條件儘量使用充分利用同一表上的索引

例如:
SELECT t1.a, t2.b FROM t1, t2 WHERE t1.a=t2.a AND t1.b=123 AND t2.c=4;
如果 t1.c 與 t2.c 欄位相同,且 t1上 存在索引 index_b_c(b,c) ,
那麼此時的 SQL 就只用到索引 b 了。
此時如果把 WHERE 條件中的 t2.c=4 改成 t1.c=4 ,那麼可以用到完整的索引。

4.5. OR改寫為IN

  • or 的效率是 n 級別, in 的效率是 log(n) 級別,當 n 很大時, or 會慢很多。

4.6. 避免使用is null, is not null這樣的比較

4.7. 杜絕危險SQL

  • 去掉 WHERE 1=1 這樣無意義或恆真的條件,如果遇到 UPDATE/DELETE 或遭到 sql 注入就恐怖了。

4.8. 減少與資料庫互動的次數,儘量採用批量SQL語句

例如:
新增資料,可以處理好全部後批量插入(使用事務邊處理邊插入資料,會導致長時間鎖表)。

4.9. MySQL中關鍵字使用大寫

例如: 
SELECT、FROM 之類,與查詢欄位和表名之類的小寫區分開,這樣語句清晰方便維護。

相關推薦

收集整理mysql資料庫設計規範與原則

1、 資料庫命名規範  採用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上下劃線'_'組成;命名簡潔明確(長度不能超過30個字元);例如:user, stat, log, 也可以wifi_user, wifi_stat, wifi_log給資料庫加個字首;除非是備份資料庫可以加0-9的自然數:

MySQL 資料庫設計規範 詳解

1> 資料庫涉及字元規範採用 26 個英文字母(區分大小寫) 和 0-9 這十個自然數,加上下劃線'_'組成,共 63 個字元,不能出現其他字元(註釋除外)注 : 1> 以上命名都不得超過 30 個字元的系統限制,變數名的長度限制為 29(不包括標識字元@)   

MYSQL資料庫設計規範與原則

MYSQL資料庫設計規範 1、資料庫命名規範 採用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上下劃線'_'組成; 命名簡潔明確(長度不能超過30個字元); 例如:user, stat, log,

MySQL資料庫設計規範

MySQL 資料庫設計規範 目錄 基礎規範 索引規範 SQL設計 1. 基礎規範 ^ 1.1. 使用Innodb儲存引擎 1.2. 表字符集統一使用UTF8 如果遇到 EMOJ 等表情符號的儲存需求,可使用 utf

MySQL資料庫設計規範說明

目的 為了規範資料庫設計,減少設計失誤,提高資料安全及效能,特制訂本規範。 適用範圍 所有mysql資料庫。原則上,資料庫設計應遵循本規範說明,特殊情況可例外,但需跟DBA說明原因。 規範 命名 庫名、表名、欄位名必須使用小寫字母,並採用下劃線分割 a)

Mysql資料庫設計規範設計原則

一、MYSQL資料庫設計規範       1、資料庫命名規範         採用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上下劃線'_'組成;         命名簡潔明確(長度不能超過30個字元);         例如:user, stat, log,

阿里巴巴MYSQL資料庫設計,查詢規範

MySQL資料庫 (一)建表規約 1.【強制】表達是與否概念的欄位,必須使用is_xxx的方式命名,資料型別是unsignedtinyint(1表示是,0表示否) 。說明:任何欄位如果為非負數,必須是unsigned。正例:表達邏輯刪除的欄位名is_d

MySQL學習筆記_資料庫設計規範

資料庫設計的規範:一.資料庫命名規範二.資料庫基本設計規範三.資料庫索引設計規範四.資料庫欄位設計規範五.資料庫SQl開發規範六.資料庫操作行為規範一.資料庫命名規範1.所有的資料庫名稱和表名稱必須使用小寫字母並使用下劃線分割  這是因為MySQL資料檔案就是Linux下的一

Mysql資料庫設計規範

1. 三大正規化 首先要明白”正規化(NF)”是什麼意思。按照教材中的定義,正規化是“符合某一種級別的關係模式的集合,表示一個關係內部各屬性之間的聯絡的合理化程度”。資料庫正規化也分為1NF,2NF,3NF,BCNF,4NF,5NF。一般在我們設計關係型資料庫

資料庫設計規範MYSQL、WEB)

一、命名規範 1. 資料庫、表、欄位、別名規範 識別符 最大長度(位元組) 允許的字元 資料庫 64 [a-z_] (所有字元均小寫, 字之間用 _ 分割) 表 64 [a-z_] (所有字元均小寫, 字之間用 _ 分割) 列 64 [a-z_] (所有字元均小寫, 字之間用 _ 分

MySQL資料庫優化——資料庫設計規範

資料庫命名規範   採用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上下劃線'_'組成; 命名簡潔明確(長度不能超過30個字元); 例如:user, stat, log, 也可以wifi_user, wifi_stat, wifi_log給資料庫

#資料庫設計規範

資料庫設計規範, 一二三正規化,E-R模型 1.資料庫表的設計正規化(三正規化和反正規化) E-R圖的基本成分包括實體型別、屬性和聯絡 1. 實體:用矩形表示,框內註明實體名稱。 2. 屬性;用橢圓表示,框內標註屬性名稱,並用無向邊

mysql資料庫設計中的14個技巧

mysql資料庫設計中的14個技巧     1. 原始單據與實體之間的關係  可以是一對一、一對多、多對多的關係。在一般情況下,它們是一對一的關係:即一張原始單據對應且只對應一個實體。在特殊情況下,它們可能是一對多或多對一的關係,即一張原始單證對應多個實

mysql - 資料庫設計

資料庫設計可以採用面向物件的思想去設計沒一張表,每一個檢視,併為資料庫中一些關鍵表新增關聯關係的觸發器(create trigger),如級聯刪除、級聯更新、級聯新增。 或者是追求處理效能的儲存過程和儲存函式。 那麼 在設計的過程中,有的人可能會考慮自己我這樣設計的表結構合不合理?存

MySql 開發設計規範

1.杜絕直接 SELECT * 讀取全部欄位    即使需要所有欄位,減少網路頻寬消耗,能有效利用覆蓋索引,表結構變更對程式基本無影響 2.能確定返回結果只有一條時,使用 limit 1    在

資料庫設計規範(適用併發量大、資料量大的網際網路業務)

一、基礎規範 (1)必須使用InnoDB儲存引擎 解讀:支援事務、行級鎖、併發效能更好、CPU及記憶體快取頁優化使得資源利用率更高 (2)必須使用UTF8字符集 解讀:萬國碼,無需轉碼,無亂碼風險,節省空間 (3)資料表、資料欄位必須加入中文註釋 解讀:N年後誰tm知道這個r1,r2,r

MySQL資料庫設計總結

規則1:一般情況可以選擇MyISAM儲存引擎,如果需要事務支援必須使用InnoDB儲存引擎。 注意:MyISAM儲存引擎 B-tree索引有一個很大的限制:參與一個索引的所有欄位的長度之和不能超過1000位元組。另外MyISAM資料和索引是分開,而InnoDB的資料儲存

MySQL 資料庫設計

資料庫需求分析: 1.由使用者發表作品  其他已註冊使用者 在瀏覽個使用者發表的作品時可以進行 點贊 評論 (同時可以撤銷點贊) 2.同時對評論的內容也可以進行相應的點贊 (同時可以撤銷點贊) 3.以及後期規劃 對評論的使用者可以進行相應的回覆 設計流程: 1.

MySQL資料庫開發規範50條

所有的資料庫物件名稱必須使用小寫字母並用下劃線分割(MySQL大小敏感,見名知意,最好不超過32字元) 所有的資料庫物件名稱禁止使用MySQL保留關鍵字(如 desc、range、match、delayed 等,請參考 MySQL 官方保留字http://dev.mysql.com/doc/refm

【乾貨】MySQL資料庫開發規範

所有的資料庫物件名稱必須使用小寫字母並用下劃線分割(MySQL大小寫敏感,名稱要見名知意,最好不超過32字元) 所有的資料庫物件名稱禁止使用MySQL保留關鍵字(如 desc、range、match、delayed 等,請參考 MySQL官方保留字 ) 臨時庫表必須以t