天天看點

mysql建表規定年齡範圍_MYSQL建表規約

【強制】表達是與否概念的字段,必須使用 is_xxx 的方式命名,資料類型是 unsigned tinyint( 1 表示是,0 表示否),此規則同樣适用于 odps 建表。

說明:任何字段如果為非負數,必須是 unsigned。

舉例:`is_star` tinyint unsigned DEFAULT NULL COMMENT '項目狀态(1 表示是,0 表示否)',

【強制】表名、字段名必須使用小寫字母或數字;禁止出現數字開頭,禁止兩個下劃線中間隻出現數字。資料庫字段名的修改代價很大,因為無法進行預釋出,是以字段名稱需要慎重考慮。

正例:getter_admin,task_config,level3_name

反例:GetterAdmin,taskConfig,level_3_name

【強制】表名不使用複數名詞。

說明:表名應該僅僅表示表裡面的實體内容,不應該表示實體數量,對應于 DO 類名也是單數形式,符合表達習慣。

【強制】禁用保留字,如 desc、range、match、delayed 等,參考官方保留字。

【強制】唯一索引名為 uk_字段名;普通索引名則為 idx_字段名。

說明:uk_ 即 unique key;idx_ 即 index 的簡稱。

【強制】小數類型為 decimal,禁止使用 float 和 double。

說明:float 和 double 在存儲的時候,存在精度損失的問題,很可能在值的比較時,得到不正确的結果。如果存儲的資料範圍超過 decimal 的範圍,建議将資料拆成整數和小數分開存儲。

【強制】如果存儲的字元串長度幾乎相等,使用 CHAR 定長字元串類型。

【強制】varchar 是可變長字元串,不預先配置設定存儲空間,長度不要超過 5000,如果存儲長度大于此值,定義字段類型為 TEXT,獨立出來一張表,用主鍵來對應,避免影響其它字段索引效率。

【強制】表必備三字段:id, gmt_create, gmt_modified。

說明:其中 id 必為主鍵,類型為 unsigned bigint、單表時自增、步長為 1; 分表時改為從TDDL Sequence 取值,確定分表之間的全局唯一。gmt_create, gmt_modified 的類型均為date_time 類型。

【推薦】表的命名最好是加上“業務名稱_表的作用”,避免上雲梯後,再與其它業務表關聯時有混淆。

正例:tiger_task / tiger_reader / mpp_config

【推薦】庫名與應用名稱盡量一緻。

【推薦】如果修改字段含義或對字段表示的狀态追加時,需要及時更新字段注釋。

【推薦】字段允許适當備援,以提高性能,但是必須考慮資料同步的情況。備援字段應遵循:

1)不是頻繁修改的字段。

2)不是 varchar 超長字段,更不能是 text 字段。

正例:各業務線經常備援存儲商品名稱,避免查詢時需要調用 IC 服務擷取。

【推薦】單表行數超過 500 萬行或者單表容量超過 2GB,才推薦進行分庫分表。

說明:如果預計三年後的資料量根本達不到這個級别,請不要在建立表時就分庫分表。

反例:某業務三年總資料量才 2 萬行,卻分成 1024 張表,問:你為什麼這麼設計?答:分 1024張表,不是标配嗎?

【參考】合适的字元存儲長度,不但節約資料庫表空間、節約索引存儲,更重要的是提升檢索速度。

正例:人的年齡用 unsigned tinyint(表示範圍 0-255,人的壽命不會超過 255 歲);海龜就必須是 smallint,但如果是太陽的年齡,就必須是 int;如果是所有恒星的年齡都加起來,那麼就必須使用 bigint。