這個是公司技術基礎建設的一部分,在以后我會逐步推出更多的技術相關文章,感覺有用的請關注。
這個文章是為了規范公司的數據庫使用的,如果公司有原來使用的規范可以做下對比。這個規范適合中小型公司,數據量不是特別大的。設計的單表容量在千萬級。
數據庫使用 MySQL ,版本 5.7+
數據庫使用主要屬性類型,數字用 int ,字符用 char ,比較多的字符用 text 或者 verchar, 根據實際情況,能用char的,盡量不要使用 verchar 。需要數據庫控制時間的用 timestamp 給默認值即可。不需要數據庫控制時間的 使用 char ,用程序控制即可。
涉及到金錢的使用 decimal(40,20) 統一用這個,可以兼容區塊鏈相關錢幣。
以上 屬性類型基本可以滿足 90% 以上的業務場景,需要嚴格遵守。
主鍵自增ID自帶索引。
禁止使用 tinyint ,bigint 等數字類型。可能有人要給主鍵用bigint 但要考慮到,int類型就有上億條數據量了,是否能達到?自己寫個程序往數據庫里插入幾百萬條數據試試,看怎樣操作就明白了。
禁止使用其他時間格式,比如date 等。涉及到時間的可以直接使用char ,程序好處理。如果使用的是 Hibernate 請根據具體情況處理。
禁止設立外鍵,索引,聯合索引。這個可以等到業務發展到一定程度的時候執行。
禁止聯表查詢。如果做不好,兩個表幾萬的數據就可能會導致數據庫慢的不行。用程序處理幾十萬的數據都沒有問題。再大的數據量可以用臨時表方案解決。
數據庫中如果設計到type屬性的,直接用char寫入屬性名稱,禁止用數字代替。比如:1 代表上線,2代表審核,3代表審核通過,4代表待審核,5代表正常,6代表刪除等等。禁止這樣使用,直接用 char 是什么,就寫什么,char的效率在mysql5.6版本之后和int的效率差不多。不用考慮效率問題。
1. 數據庫相關的所有命名只能用小寫英文字母,必須是有含義的英文單詞,單詞之間用 _ 進行間隔
2. 數據庫名稱需要與業務相關,或者直接使用項目名稱。
3. 數據庫編碼需要使用utf8mb4 ,排序規則需要使用 utf8mb4_general_ci
4. 表引擎使用 InnoDB
5. 表命名方式,項目名_功能名 , 功能名單詞必須小寫,多單詞用英文 _ 進行間隔。
6. 表字段命名,默認需要有:
功能名_id int 類型主鍵自增不可為空。
其他字段名稱,必須小寫,單詞間用英文 _ 進行分割。
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
`tb_status` char(50) DEFAULT '正常' COMMENT '狀態:正常,正常;刪除,刪除;',