【云圖說】第235期 DDS讀寫兩步走 帶您領略只讀節點的風采
1021
2022-05-29
一、數據庫涉及字符規范
采用26 個英文字母(區分大小寫)和0-9 這十個自然數,加上下劃線'_'組成,共37個字符.不能出現其他字符(注釋除外).
注意事項:
1) 以上命名都不得超過30 個字符的系統限制.變量名的長度限制為29(不 包括標識字符@).
2) 數據對象、變量的命名都采用英文字符,禁止使用中文命名.絕對不要在對 象名的字符之間留空格.
3) 小心保留詞,要保證你的字段名沒有和保留詞、數據庫系統或者常用訪問 方法沖突, 當表名或字段名乃至數據庫名和保留字沖突時,在sql語句里可以用 撇號(`)括起來。
4) 保持字段名和類型的一致性,在命名字段并為其指定數據類型的時候一 定要保證一致性.假如數據類型在一個表里是整數,那在另一個表里也要保證是 整型.
二、數據庫命名規范
數據庫名使用小寫英文以及下劃線組成(weixin+_jd_com).比如: weixin_jd_com
im_jd_com
備份數據庫名使用正式庫名加上備份時間組成,如: dbname_20150206
三、數據庫表命名規范
數據表名使用小寫英文以及下劃線組成(項目名+表信息)比如:
oa_user
oa_workflow_steps備份數據表名使用正式表名加上備份時間組成,如: oa_user_20150206
oa_workflow_step_20150206
四、字段命名規范
字段名稱使用單詞組合完成,首字母小寫,單詞之間用“_”分隔,最好是帶表名前綴.
如oa_user 表的字段:
user_id
user_name表與表之間的相關聯字段要用統一名稱
五、索引命名規范
索引名稱為idx_列名_表名縮寫,唯一索引名稱為uniq_列名_表名縮寫,其中表名 和關聯字段名如果過長,可以取表名、關聯字段名的前5 個字母,如果表名、關 聯字段為多個單詞組合,可以取前一個單詞,外加后續其它單詞的首字母作為字 段名
如普通索引:idx_user_name_oa唯一索引uqidx_ user_name_oa
六、字段類型規范
規則:用盡量少的存儲空間來存數一個字段的數據.比如能用int 的就不用char 或者varchar能用varchar(20)的就不用varchar(255)時間戳字段盡量用int 型
七、操作規范
如無備注,則表中的第一個id字段一定是主鍵且為自動增長; 如無備注,則數值類型的字段請使用UNSIGNED屬性; 如無備注,所有字段都設置NOT NULL,并設置默認值; 所有的數字類型字段,都必須設置一個默認值,并設為0; 針對varchar類型字段的程序處理,請驗證用戶輸入,不要超出其預設的長度; 建表時將數據字典中的字段中文名和屬性備注寫入數據表的備注中(“PK、自動 增長”不用寫);
如無說明,建表時一律采用innodb引擎;.盡量采用批量SQL語句,減少與數據庫交互次數 提交線上建表改表需求,必須詳細注明涉及到的所有SQL語句(包括INSERT、DELETE、UPDATE),便于DBA進行審核和優化。
八、其他設計技巧
1) 避免使用存儲過程、觸發器、視圖、自定義函數等,這些高級特性有性能問題,以及未知BUG較多。業務邏輯放到數據庫會造成數據庫的DDL、SCALE OUT、SHARDING等變得更加困難。
2) 分區表對分區鍵有嚴格要求;分區表在表變大后,執行DDL、SHARDING、單表恢 復等都變得更加困難。因此禁止使用分區表,并建議業務端手動SHARDING。
3) 使用常用英語(或者其他任何語言)而不要使用拼音首字母縮寫
4) 將大字段、訪問頻率低的字段拆分到單獨的表中存儲,分離冷熱數據, 有利于 有效利用緩存,防止讀入無用的冷數據,較少磁盤 IO,同時保證熱數據常駐內存 提高緩存
5)禁止有 super 權限的應用程序賬號存在, 安全第一。super 權限會導致 read only 失效,導致較多詭異問題而且很難追蹤。6)不要在Mysql數據庫中存放業務邏輯, 數據庫是有狀態的服務,變更復雜而且 速度慢,如果把業務邏輯放到數據庫中,將會限制業務的快速發展。建議把業務邏 輯提前,放到前端或中間邏輯層,而把數據庫作為存儲層,實現邏輯與存儲的分離。
附:建表示例
CREATE TABLE `weixin_test` (
`id` int(20) unsigned NOT NULL AUTO_INCREMENT,
`staff_id` int(11) NOT NULL COMMENT '操作人員 id',
`staff_name` varchar(50) NOT NULL COMMENT '人員名稱',
`url` varchar(200) NOT NULL COMMENT '操作路徑',
`method` varchar(10) NOT NULL COMMENT '操作方式',
`params` varchar(10) NOT NULL COMMENT '操作參數',
`ip` varchar(20) NOT NULL COMMENT 'ip',
`time` int(11) NOT NULL COMMENT '操作時間',
PRIMARY KEY (`id`),
KEY?`idx_staff_id_ct`?(`staff_id?`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
【建議】MySQL 三萬字精華總結 —索引
【建議】MySQL 三萬字精華總結 —分區、分表、分庫和主從復制
MySQL 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。