mysql+mongo表結(jié)構(gòu)設(shè)計規(guī)范

1 mysql表結(jié)構(gòu)設(shè)計規(guī)范

1.1 適用場景

存儲主要業(yè)務(wù)信息,默認使用此數(shù)據(jù)庫。

1.2 設(shè)計要求

(1)表名

同一個業(yè)務(wù)的相關(guān)表建議表名前綴一致,如系統(tǒng)表相關(guān)表名:t_system_xxx_xxx

(2)表字段長度

表名、字段名,長度不得超過30

(3)主鍵

必須創(chuàng)建數(shù)據(jù)庫存儲主鍵id:字段類型需選用bigint(20),采用數(shù)據(jù)庫自增方式生成(也可根據(jù)數(shù)據(jù)量多少定義為int、tinyint)。主鍵不允許在程序中使用,僅作為數(shù)據(jù)存儲使用。

必須創(chuàng)建數(shù)據(jù)庫業(yè)務(wù)主鍵pid:字段類型需選用char(32),程序中主鍵查詢記錄,均通過此業(yè)務(wù)主鍵。業(yè)務(wù)主鍵,采用UUD(不帶中間-),java端可通過工具類生成。需為此字段創(chuàng)建索引(唯一索引)。

如下:

  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '數(shù)據(jù)主鍵',
  `pid` char(32) NOT NULL COMMENT '業(yè)務(wù)主鍵',
(4)時間字段

時間類型,均使用無符號 int(10) 。

(5)浮點字段

浮點型字段(如各種金額),根據(jù)小數(shù)點精度要求,和對應(yīng)的數(shù)據(jù)場景,有如下兩種類型設(shè)置(為數(shù)據(jù)統(tǒng)一,無特殊情況,均設(shè)置為如下幾種類型)。

業(yè)務(wù)類型金額:

decimal(11,2)decimal(13,4)

統(tǒng)計類型金額:

decimal(21,2)、decimal(21,4)

且無特殊要求,需為無符號。

(6)狀態(tài)字段

狀態(tài)相關(guān)字段,建議使用tinyint。

使用tinyint需注意,除非研發(fā)人員清楚tinyint(1)映射的是mysql中的bool類型,否則,tinyint類型字段長度需大于等于2

(7)整型字段

如無特殊要求。int等數(shù)值字段無特殊要求,需為無符號。

(8)字符型字段

長度:

如字符型字段長度不會很長,varchar類型字段的長度,一般不超過255。

注:255及以內(nèi),使用一個字節(jié)存儲字段長度。超過255,使用兩個字節(jié)存儲字段長度。

約束:

對字符類型的字段(varchar,char,text)要求加約束:not null default '',即非null,默認為''。

需注意:如果某個varchar字段,必須要求為not null 。且字段內(nèi)容,必須從java程序中獲?。ǘ皇峭ㄟ^數(shù)據(jù)庫的default''生成),如果寫入數(shù)據(jù)庫時,java程序中這個字段為空,數(shù)據(jù)庫層面需要報錯。

這種情況建議:只加約束not null,不要使用not null default '',否則,程序中這個字段為空時,仍然會insert到表中(數(shù)據(jù)庫默認值為'')。not null的意義不存在了。

同時需注意:如果線上數(shù)據(jù),增加not null的字段時,如果表比較大,主從同步需要很長時間,一定要慎重,否則,會數(shù)據(jù)無法正常寫入到數(shù)據(jù)庫中。

索引:

varchar字段長度超過20,不可創(chuàng)建索引。如長度超過20,需要創(chuàng)建索引,只能創(chuàng)建長度為20的前置索引

如長度超過20,需要創(chuàng)建完整的索引,可以使用crc32等函數(shù),對內(nèi)容進行編碼,存到一個額外的字段中,通過此編碼后字段,進行=查詢,查詢出結(jié)果后,再通過原有字段進行判斷(避免hash沖突)。

(9)建表必須字段

創(chuàng)建表必須加的字段:

創(chuàng)建時間:create_date(無符號,int 10)

更新時間:update_date(無符號,int 10)

如需添加“創(chuàng)建人ID”、“創(chuàng)建人名稱”、“更新人ID”、“更新人名稱”。字段名稱需固定:

`create_user_name` varchar(50) NOT NULL DEFAULT '' COMMENT '創(chuàng)建人名稱',
`create_user_id` varchar(36) NOT NULL DEFAULT '' COMMENT '創(chuàng)建人ID',
`create_date` int(10) unsigned NOT NULL COMMENT '創(chuàng)建時間',
`update_user_name` varchar(50) NOT NULL DEFAULT '' COMMENT '更新人名稱',
`update_user_id` varchar(36) NOT NULL DEFAULT '' COMMENT '更新人ID',
`update_date` int(10) unsigned NOT NULL COMMENT '更新時間',

邏輯刪除字段:

如需要此字段,建議此字段定義如下:

`del_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否刪除,0正常,1刪除'
(10) 關(guān)聯(lián)查詢

無特殊情況,建議,關(guān)聯(lián)查詢表,不得超過3個。

大表的關(guān)聯(lián)查詢,研發(fā)需使用explain分析查詢

(11)字典相關(guān)

如基礎(chǔ)字典的名稱會發(fā)生變動,相關(guān)聯(lián)的業(yè)務(wù)表,值存儲字典的code。不存儲字典名稱字段,防止字典名稱變動后對業(yè)務(wù)數(shù)據(jù)的影響。

(12)關(guān)聯(lián)更新

無特殊情況,不建議關(guān)聯(lián)更新,即不建議update時,關(guān)聯(lián)多個表。
除非研發(fā),非常了解更新語句對數(shù)據(jù)的影響(避免出現(xiàn)只更新部分數(shù)據(jù)的情況)

2 mongo表結(jié)構(gòu)設(shè)計規(guī)范

2.1 適用場景

日志、臨時表等不關(guān)鍵的信息(弱化mongo的存儲)。

如使用此數(shù)據(jù)庫,需將使用場景及表結(jié)構(gòu),進行評估。

2.2 設(shè)計要求

(1)表名

同一個業(yè)務(wù)的相關(guān)表建議表名前綴一致,如系統(tǒng)表相關(guān)表名:t_system_xxx_xxx

(2)主鍵

mongo自動生成的主鍵_id,不得更改。

如需要自定義業(yè)務(wù)主鍵,可以創(chuàng)建字段:pid

(3)定義

所有的mongo表,均需創(chuàng)建映射實體類

可統(tǒng)一在映射實體類中創(chuàng)建相同的通用屬性,如不使用,可以不設(shè)置值。

/**
 * 刪除標志(false:正常;true:刪除)
 */
private Boolean delFlag;

/**
 * 創(chuàng)建人ID
 */
private String createUserId;

/**
 * 創(chuàng)建人姓名
 */
private String createUserName;

/**
 * 創(chuàng)建時間
 */
private Integer createDate;

/**
 * 更新人ID
 */
private String updateUserId;

/**
 * 更新人姓名
 */
private String updateUserName;

/**
 * 更新時間
 */
private Integer updateDate;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容