| 規範項目 | 標準 |
| 命名大小寫 | 全小寫 |
| 業務前綴 | 不同業務模組用不同前綴(如 tb_、log_、dim_) |
| 語義性 | 名稱須表達實際業務含義 |
| 多字分隔 | 下劃線分隔(create_time) |
| 字段類型選擇 | 滿足業務前提下選最小類型(如 TINYINT 代替 INT) |
| 優先整型 | 能用整型不用字符型(效能、空間) |
| 必加註釋 | 每欄位必須有 COMMENT |
| 大字段拆表 | TEXT/BLOB 高頻訪問獨立表 |
| 字符集 | 新業務統一 utf8mb4(支援 Emoji) |
權限設計原則
- 最小權限:讀寫分離,普通帳號無
GRANT OPTION
- 粒度控制:實例級 > 資料庫級 > 表級 > 欄位級
- 密碼複雜度:線上環境強制隨機強密碼
完整建表 DDL(生產就緒版)
-- 用戶表
CREATE TABLE `tb_account` (
`account_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID',
`nick_name` VARCHAR(20) DEFAULT NULL COMMENT '暱稱',
`true_name` VARCHAR(20) DEFAULT NULL COMMENT '真實姓名',
`sex` CHAR(1) DEFAULT NULL COMMENT '性別',
`mail_address` VARCHAR(50) DEFAULT NULL COMMENT '郵箱',
`phone1` VARCHAR(20) NOT NULL COMMENT '主手機號',
`phone2` VARCHAR(20) DEFAULT NULL COMMENT '備用手機',
`password` VARCHAR(30) NOT NULL COMMENT '加密密碼',
`create_time` DATETIME DEFAULT NULL COMMENT '註冊時間',
`account_state` TINYINT(4) DEFAULT NULL COMMENT '狀態:1正常 0凍結',
`last_login_time` DATETIME DEFAULT NULL COMMENT '最後登錄',
`last_login_ip` VARCHAR(20) DEFAULT NULL COMMENT '最後登錄IP',
PRIMARY KEY (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶帳戶表';
-- 商品分類表(支援多級分類)
CREATE TABLE `tb_goods_category` (
`category_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '分類ID',
`category_level` SMALLINT(6) NOT NULL COMMENT '層級',
`category_name` VARCHAR(500) DEFAULT NULL COMMENT '分類名稱',
`upper_category_id` INT(11) NOT NULL COMMENT '父分類ID',
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分類表';
-- 商品表
CREATE TABLE `tb_goods` (
`goods_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID',
`goods_name` VARCHAR(100) NOT NULL COMMENT '商品名稱',
`pic_url` VARCHAR(500) NOT NULL COMMENT '圖片URL',
`store_quantity` INT(11) NOT NULL COMMENT '庫存數量',
`goods_note` VARCHAR(800) DEFAULT NULL COMMENT '商品描述',
`producer` VARCHAR(500) DEFAULT NULL COMMENT '生產廠商',
`category_id` INT(11) NOT NULL COMMENT '分類ID',
PRIMARY KEY (`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品詳情表';
-- 訂單主表
CREATE TABLE `tb_order` (
`order_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '訂單ID',
`account_id` INT(11) NOT NULL COMMENT '用戶ID',
`create_time` DATETIME DEFAULT NULL COMMENT '下單時間',
`order_amount` DECIMAL(12,2) DEFAULT NULL COMMENT '訂單金額',
`order_state` TINYINT(4) DEFAULT NULL COMMENT '狀態:1待付款 2已付款 3發貨 4完成 5取消',
`update_time` DATETIME DEFAULT NULL COMMENT '最後更新',
`order_ip` VARCHAR(20) DEFAULT NULL COMMENT '下單IP',
`pay_method` VARCHAR(20) DEFAULT NULL COMMENT '支付方式',
`user_notes` VARCHAR(500) DEFAULT NULL COMMENT '用戶備註',
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='訂單主表';
-- 訂單明細表
CREATE TABLE `tb_order_item` (
`order_item_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '明細ID',
`order_id` BIGINT(20) NOT NULL COMMENT '訂單ID',
`goods_id` BIGINT(20) NOT NULL COMMENT '商品ID',
`goods_quantity` INT(11) NOT NULL COMMENT '購買數量',
`goods_amount` DECIMAL(12,2) DEFAULT NULL COMMENT '行金額',
PRIMARY KEY (`order_item_id`),
UNIQUE KEY `uk_order_goods` (`order_id`,`goods_id`) COMMENT '同一訂單不重複商品'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='訂單明細表';
設計亮點解析
- 主鍵策略:業務主鍵 + 自增代理鍵,訂單/明細用
BIGINT 應對高併發
- 唯一約束:
uk_order_goods 防止重複下單同一商品
- 冗余設計:訂單表保留
order_amount 避免關聯聚合
- 狀態機:
order_state 明確定義流轉邏輯
- 審計欄位:
create_time/update_time 全表標配
- 上一篇文章: Linux 平台 MySQL 啟動與關閉六大方式深度對比
- 下一篇文章: MySQL SQL 進階應用:排序、分組、連接、子查詢、DML 增強與內建函數實戰
Copyright ©
程式碼之家 All Rights Reserved