首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料庫命名規範與設計規約完整版(含表結構範例)

     編輯:MySQL 資料庫相關知識

一、通用操作規範

  1. 主鍵預設:無特殊說明時,第一欄 `id` 為 `BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT`。
  2. 數值無符號:無特殊說明時,所有數值型欄位加 `UNSIGNED`。
  3. 排序預設降序:排序欄位 `order_id` 程式端預設 `DESC`。
  4. 拒絕 NULL:所有欄位 `NOT NULL` 並給預設值(數值 0、字串 ''、時間 `CURRENT_TIMESTAMP`、布林 0)。
  5. 布林欄位預設 0:`is_xxx`、`has_xxx`、`deleted` 等 `TINYINT(1) NOT NULL DEFAULT 0`。
  6. 數字欄位預設 0:`count`、`price`、`status` 等 `NOT NULL DEFAULT 0`。
  7. VARCHAR 長度驗證:應用層必須攔截超長輸入,避免資料庫報錯。
  8. 欄位註釋:建表時將中文名、業務含義寫入 `COMMENT`(PK/自增除外)。
  9. 引擎統一 InnoDB:無特殊說明一律 `ENGINE=InnoDB`。

二、表命名慣例

規則說明正例反例
前綴專案名縮寫小寫,如 `mall_` `cms_``mall_user``User` `t_user`
單詞分隔下劃線 `_``order_item``orderItem` `orderitem`
單數形式表名用單數,表達實體集合`category` `article``categories` `articles`
業務語義見名知意,避免縮寫`goods_gallery` `site_config``gg` `sc` `t1`

常用核心表名對照表

user             -- 用戶
category         -- 分類
goods            -- 商品/產品(通用名)
goods_gallery    -- 商品相冊
goods_cate       -- 商品分類關聯(分類縮寫 cate)
attr             -- 屬性/規格
article          -- 文章/新聞/幫助中心
cart             -- 購物車
feedback         -- 用戶反饋
order            -- 訂單
site_nav         -- 站點導航(頁頭/頁尾)
site_config      -- 系統配置
admin            -- 後台用戶(RBAC)
role             -- 角色(RBAC)
access           -- 權限/操作節點(RBAC)
role_admin       -- 用戶-角色關聯(RBAC)
access_role      -- 角色-權限關聯(RBAC)

三、欄位命名慣例

欄位模式語義型別建議範例
`{table}_id`外鍵關聯主表主鍵`BIGINT UNSIGNED``user_id` `goods_id`
`cid`層級編碼(主分類 11,子分類 1101)`VARCHAR(10)`支持無限級分類查詢
`add_time`建立/上架時間`DATETIME` / `TIMESTAMP`
`last_time`最後操作時間(登入/修改)`DATETIME`
`expire_time`過期/失效時間`DATETIME`
`name`實體名稱(商品/商家/用戶)`VARCHAR(50~100)`區別於 `title`
`title`文章標題、職稱等`VARCHAR(100~200)`
`price`價格(分為單位,避免浮點)`INT UNSIGNED`9999 = 99.99 元
`thumb`列表縮略圖 URL`VARCHAR(255)`統一命名,禁 `img_url` `thumb_url`
`image_src`相冊大圖 URL`VARCHAR(255)`
`head_thumb`用戶頭像`VARCHAR(255)`雖長但語義明確
`image_alt`圖片 alt 屬性`VARCHAR(100)`
`desc`簡介/描述(短文本)`VARCHAR(500)`禁 `txt` `content` 混用
`details`詳情/正文(長文本)`TEXT` / `LONGTEXT`
`order_id`排序權重`INT UNSIGNED`越大越靠前
`telephone`座機號碼`VARCHAR(20)`
`mobile`手機號碼`VARCHAR(20)`
`phone`不區分座機/手機時`VARCHAR(20)`
`address`詳細地址`VARCHAR(255)`組合場景用 `addr` 縮寫
`zipcode`郵政編碼`CHAR(6)`
`region`大區域(市級)`VARCHAR(50)`杭州市、溫州市
`area`小區域(區/縣級)`VARCHAR(50)`上城區、江干區
`avg_cost`人均消費(分)`INT UNSIGNED`

四、表結構設計範例:分類表

CREATE TABLE `category` (
  `id`          INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '流水號 PK',
  `cid`         VARCHAR(4)       NOT NULL DEFAULT ''     COMMENT '層級編碼:主分類11,子分類1101',
  `name`        VARCHAR(20)      NOT NULL DEFAULT ''     COMMENT '名稱,前端限制≤10字',
  `pid`         INT(10) UNSIGNED NOT NULL DEFAULT 0      COMMENT '父分類ID,0為頂級',
  `count`       INT(10) UNSIGNED NOT NULL DEFAULT 0      COMMENT '統計量:商品數/文章數',
  `is_hot`      TINYINT(1)       NOT NULL DEFAULT 0      COMMENT '是否熱門:首頁展示',
  `is_index`    TINYINT(1)       NOT NULL DEFAULT 0      COMMENT '是否首頁展示',
  `order_id`    INT(10) UNSIGNED NOT NULL DEFAULT 0      COMMENT '排序權重,越大越前',
  PRIMARY KEY (`id`),
  KEY `idx_pid` (`pid`),
  KEY `idx_cid` (`cid`),
  KEY `idx_hot_index` (`is_hot`, `is_index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分類表';

五、索引設計原則

  1. **主鍵必建**:單調遞增(自增/雪花 ID),避免 UUID 導致頁分裂。
  2. **外鍵欄位建索引**:`user_id`、`goods_id`、`pid` 等關聯查詢高頻欄位。
  3. **複合索引遵循最左前綴**:`WHERE a=1 AND b=2 ORDER BY c` → `INDEX(a,b,c)`。
  4. **區分度低欄位不建單列索引**:`sex`、`status`(0/1)、`is_deleted`,改用複合索引。
  5. **覆蓋索引優化**:`SELECT id, name FROM user WHERE status=1` → `INDEX(status, id, name)` 避免回表。
  6. **定期 `ANALYZE TABLE` 更新統計資訊**,防止優化器誤判。

六、避坑清單

  • [ ] 禁用 `TEXT`/`BLOB` 做索引前綴(`INDEX desc(100)`),改用 `VARCHAR` 或全文索引。
  • [ ] 禁用 `ENUM`/`SET`,擴充需 `ALTER TABLE` 鎖表,改用 `TINYINT` + 字典表。
  • [ ] 禁用外鍵約束(應用層維護關聯),高併發下鎖衝突嚴重,改用軟刪除 `deleted=1`。
  • [ ] 大表禁止 `COUNT(*)`,維護計數表或用 `EXPLAIN` 估算行數。
  • [ ] 分表分庫鍵選擇:業務隔離度高、查詢可路由、避免跨分片事務。

總結

統一命名規範是團隊協作效率的基石。本文提供的「操作規範、表名/欄位慣例、設計範例、索引原則、避坑清單」可直接作為專案《資料庫設計規約》附件。落地關鍵在於:**Code Review 強制檢查、CI/CD 集成 `sqlfluff`/`pt-table-check` 靜態掃描、新人入職必讀考核**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved