1. 程式人生 > >資料庫使用規範

資料庫使用規範

命名規範

命名總規則

  1. 所有名稱的字元範圍為:A-Z, a-z, 0-9 和_(下劃線)。不允許使用其他字元作為名稱。
  2. 採用英文單詞或英文短語(包括縮寫)作為名稱,不能使用無意義的字元或漢語拼音。
  3. 名稱應該清晰明瞭,能夠準確表達事物的含義,最好可讀,遵循“見名知意”的原則。

表命名規範

  1. 表名以代表表內的內容的一個和多個名片語成,以下劃線分隔,單詞預設採用小寫。
  2. 表名需要增加字首,例如:entity表示主表,link表示關係表,auth表示許可權表,xs表示xunsearch的索引表。
  3. 表的字首以後,是表的具體內容的描述。
  4. 一些作為多對多連線的表,可以使用兩個表的字首作為表名
  5. 當系統中有一些少量的,重複出現的值時,使用字典表來節約儲存空間和優化查詢。如地區、系統中使用者型別的代號等。這類值不會在程式的執行期變化,但是需要儲存在資料庫中。字典表統一以dic_作為字首。

欄位命名規範

  1. 欄位不使用任何字首(表名代表了一個名稱空間,欄位前面再加字首顯得羅嗦)
  2. 字典名也避免採用過於普遍過於簡單的名稱:例如,使用者表中,使用者名稱的欄位為UserName比Name更好。
  3. 布林型的欄位,以一些助動詞開頭,更加直接生動:如,使用者是否有留言HasMessage,使用者是否通過檢查IsChecked等。
  4. 欄位名為英文短語、形容詞+名詞或助動詞+動詞時態的形式表示,大小寫混合,遵循“見名知意”的原則。

SQL語句規範

  1. 不允許寫SELECT * FROM ……,必須指明需要讀取的具體欄位。
  2. 不允許使用CREATE TABLE …… SELECT …..
  3. 儘量避免使用子查詢。、
  4. 儘量避免在資料庫中做運算。
  5. 所有的SQL關鍵字大寫
  6. 在使用索引時需要注意欄位格式,當欄位為字元型別而where條件中匹配的是數字時,雖然不會報錯,但是無法使用索引。
  7. 儘量避免使用觸發器和檢視
  8. 不要在where後的篩選欄位上做運算
  9. 9.

資料庫表設計規範

  1. 字符集使用utf8mb4
  2. 儲存引擎使用innodb
  3. 主鍵應是名為id ,且型別為bigint 的自增欄位。
  4. 對錶和欄位都新增備註說明。
  5. 儘量避免使用NULL,建立列時應指定為NOT NULL,可以使用0、一個特殊的值或者一個空串代替空值。
  6. 選用能滿足需求的最小型別,對於固定長度的字串應使用char型別,對於varchar型別應根據實際使用,不要分配過大的長度。varchar(50)表示最大儲存50個字元而不是50位元組。
  7. 儲存時間資料應儘量採用datetime格式,對於自動記錄更新時間的欄位可以採用timestamp型別。
  8. 應儘量避免將地段設為text和blob型別,如果不能避免,應儘可能在設計表時將text和blob型別的欄位從大表中分隔開。
  9. 避免使用外來鍵,以提高效能

索引新增原則

  1. 最左字首匹配原則,這是索引中最重要的一個原則。簡單的講就是,當你建立一個(a,b,c,d)的索引時,這個索引中已經包含了索引(a,b,c)、(a,b)、(a),而不需要再單獨建立這些索引了。
  2. 儘量少的建立索引,當你建立了一個索引時,雖然提高了查詢速度,但是卻在修改資料時額外增加了修改索引的開銷。
  3. 索引列不應成為表示式的一部分或者函式的引數。
  4. 如果複合索引中的某一列需要頻繁使用範圍查詢,應將該欄位放到複合索引的最後,因為當複合索引中某一欄位進行了範圍查詢後,那麼他之後的索引將不能被使用。
  5. 當使用LIKE關鍵字做範圍查詢時,只有形如LIKE ‘abc%’這樣的匹配可以使用到索引,而LIKE ‘%abc’和LIKE ‘%abc%’則無法使用索引。
  6. 超過20個長度的字串列,應做字首索引,例如:alter table city_demo add key (city(6));利用city的前6個字元做索引。
  7. 在排序中也可以利用索引,但是要求排序順序和索引順序相同。

線上資料庫修改規範

  1. 線上資料修改應由各部門負責人審批通過後交由DBA進行修改。
  2. 對於多項修改之間有先後順序的,申請修改時應註明修改順序。
  3. 對於線上資料修改,DBA應根據修改的內容評估變更的規模,以及制定恢復方案,如:在修改前備份修改的內容。
  4. 對於線上表結構變更,DBA應確認該表沒有大規模/長時間事務執行的情況下使用online DDL或者pt-online-schema-change修改。

DB伺服器登陸許可權規範

  1. DB伺服器應由DBA(或經由DBA授權後)登入進行操作;
  2. DB伺服器禁止長時間執行與資料庫無關的命令或程式;
  3. DB伺服器禁止執行可能會消耗大量系統資源(包括IO,記憶體,CPU等),且與資料庫無關的命令或程式;
  4. 應儘量避免直接使用命令列操作資料庫,建議使用圖形客戶端或者指令碼操作資料庫,以避免誤操作;
  5. 使用互動式連線時(包括各類資料庫客戶端),如短時間內不進行操作,應及時斷開連線,以避免誤操作

DB服務許可權規範

  1. 應用程式帳號許可權需要做嚴格限制,對不同應用需求使用不同許可權和操作範圍帳號, 要有部門負責人確認;
  2. 所有帳號名稱、訪問許可權、應用程式名稱必須記錄在案;
  3. 在防火牆上嚴格限制資料庫埠訪問的IP地址,只有正常對外服務的應用伺服器IP 可以訪問相關資料庫;
  4. 資料庫超級使用者許可權使用嚴格限制;

DB伺服器及服務安全引數和密碼設定

  1. 帳號密碼需要有複雜性要求(字母、數字、特殊符號);
  2. 線上使用的賬戶只允許內網訪問
  3. 超級使用者賬戶每3個月更新一次密碼
  4. root使用者只允許本地登入