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