資料庫設計規範

2021-07-23 19:17:57 字數 3056 閱讀 5775

csm簡寫會方便很多

就不要用member_id,一致性方便大家理解

system.currenttimemillis()進行儲存text查詢是會產生臨時磁碟檔案,效能差進行擷取儲存型別

占用位元組

範圍tinyint

1-128~127

smallint

2-32768~32767

mediumint

3-8388608~8388607)

int4

-2147483648~2147483647

bigint

8+-9.22*10的18次方

不浪費空間, 能用小的資料型別幹嘛占用那麼多空間

能用int,不影響業務理解,不用char

方便以後擴容,支援以後擴容需求

注意int(1), int(10),沒有儲存空間上的差別,只是在補0查詢是,佔位達到的位數,

所以占用空間的大小還是根據型別的選擇

例如:

direction表示收支方向, 就收,支,平,三個值,直到滄海桑田,海枯石爛也是三個值,

所以一定用tinyint(1),省空間,效率高

m和d的關係(儲存規則m>=d(m必須大於等於d)

整數字最大長度m-n位,小數字長度n位

占用位元組數最大為m+2個位元組數(保護-號和.的情況)

整數14位,最大可以表示十萬億級別的資料,decimal(14,2)不建議,千億級別不夠玩

我多年的經驗,一般展示會展示4位利率,這個業務層處理下就好

1.  一般擴充套件性有限的常量型別,建議用整形,效能高,佔空間少,比如狀態字段,

初始設定值的時候,建議1,3,5,7這樣,方便擴充套件

2. 一般不確定擴充套件性的型別,建議用字元型,若訂單子型別,字元型的好處,

可以新增業務規則,乙個字段可以同時表示出爺爺,兒子孫子的含義,比如

subtype=0000 0000 0000 前四個字段代表大類購買型別,中間代表子類購買,

最後代表**購買型別,這樣通過乙個字段可以做很多事情

3. 序列號,id等字段,建議varchar(32)或者bigint

4. 如果未了方便查問題,且表的資料量不大,可以用有含義的英文單詞表示常量,

比如收入in, 支出out, 資料庫查下排查問題很方

5. 不要有null值,不要有null值,不要有null值

,建表是要default 乙個預設值,

盡量建表是not null語句  

`create_time` datetime not null comment '表建立時間',

`modify_time` datetime default null comment '表修改時間',

`remark` varchar(64) default null comment '備註',

operator 操作人 operate_time 操作時間 等

version 版本號 seq序列號

100******-廣東省,  200******-黑龍江

遍歷需求的對於自增id的表來說很容易實現

1.自增id, bigint

2.15位時間戳+業務標誌+rand   32 (tss可以生成全域性唯一主鍵),生成業務含義全域性唯一主鍵,可以模仿訂單服務id生成器

3.分布式全域性唯一, uuid或額外系統主鍵生成系統支援

根據業務需求設計索引

索引不要過多,影響插入更新效能

乙個欄位的值範圍很小,不要設定索引,索引不生效同事浪費插入效能

如果有冪等性需求,設定資料庫唯一索引

null值對索引是一大傷害,所以不要讓索引的列有null值存在

盡量加索引的字段的資料型別小,也就是能用整數不用varchar能用短的varchar不用長的varchar,

不要在text上設定索引

例子

如賬戶,userid設定為唯一索引,乙個人只能有乙個銅板賬戶

收支流水表的userid設定普通索,查詢效率高

create_time 預設加索引。。。。

a,b,c   組合索引,,  a**,abx  xxb  xxc,  a+b+c, 按位加索引

敏感字段,如姓名,身份證號,銀行卡號,郵箱等

根據實際業務進行選擇,可以md5,可以rsa,可以aes,具體選擇後續,老夫出個介紹演算法的

字段長度要根據業務長度加密後長度進行設定,如果過長要選擇換加密演算法等

每個欄位要有注釋

每個表名要有注釋

欄位的取值含義或者範圍,列舉值要有注釋

總之:看建表語句,看的爽,就對了

從前到後,按照欄位的重要性和使用頻率排列。

按字段的分類歸集排列:如 金額相關的在一塊,文案相關的在一塊,時間相關的在一塊等

create_time,modify_time,remark三個欄位在最後

innodb,沒的商量,就是這個,原因就一條,我們做的是金融行業,安全、安全、安全

理由:innodb支援事務,資料庫崩潰恢復穩定

全表掃瞄會造成資料庫掛掉,oom,慢查詢等可怕事情

索引的值範圍很少,索引即使設計了也不會生鏽,也會全表掃瞄

刪資料時,where後必須有條件,條件走索引,同時加limit限制,防止sql錯誤,多刪資料

daoimpl層面限制不走索引的查詢sql

daoimpl層面限制索引值少的查詢sql

3.  mybatis.xml層面對刪除進行限制delete from tb_position where id=142343 limit 1;

資料庫設計規範

使用明確 統一的標明和列名,例如 school,schoolcourse,courceid。資料表名使用單數而不是複數,例如 studentcourse,而不是studentcourses。資料表名不要使用空格。資料表名不要使用不必要的字首或者字尾,例如使用school,而不是tblschool,或...

資料庫設計規範

1 基本需求 某學校設計學生教學管理系統。學生實體包括學號 姓名 性別 生日 民族 籍貫 簡歷 登記照,每名學生選擇乙個主修專業,專業包括專業編號和名稱,乙個專業可以屬於 乙個學院,乙個學院可以有若干個專業。學院資訊要儲存學院號 學院名 院長。教學管理還要管理課程表和學生成績。課程表包括課程號 課程...

資料庫設計規範

1.小寫字母 下劃線 2.禁止使用保留關鍵字 3.見名識義 4.臨時表 tmp date 5.備份表 bak date 6.所有儲存相同資料的列名和列型別必須相同 一般這種列為關聯列,若型別不同在查詢時會隱式轉換,效率差 7.庫表字符集統一 8.所有表和字段都要注釋 在建表時用comment從句 9...