首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

電商類系統資料庫設計實戰:從業務模型到規範建表

     編輯:MySQL 綜合教學

專案背景與目標

  • 模擬電商類網站核心業務
  • 掌握日常建表操作與設計規範
  • 完成業務模型到物理表的轉換

核心業務領域劃分

用戶域

  • 用戶帳戶(tb_account)

商品域

  • 商品分類(tb_goods_category)
  • 商品詳情(tb_goods)

交易域

  • 訂單主表(tb_order)
  • 訂單明細(tb_order_item)

非核心輔助域

  • 物流、供應商資訊(暫不建模)

表依賴關係與設計順序

  1. tb_account(無依賴,優先建立)
  2. tb_goods_category(自關聯,優先建立)
  3. tb_goods(依賴分類表)
  4. tb_order(依賴用戶表)
  5. tb_order_item(依賴訂單表、商品表)

命名與字段設計規範

權限設計原則

  • 最小權限:讀寫分離,普通帳號無 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 全表標配
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
規範項目標準
命名大小寫全小寫
業務前綴不同業務模組用不同前綴(如 tb_、log_、dim_)
語義性名稱須表達實際業務含義
多字分隔下劃線分隔(create_time)
字段類型選擇滿足業務前提下選最小類型(如 TINYINT 代替 INT)
優先整型能用整型不用字符型(效能、空間)
必加註釋每欄位必須有 COMMENT
大字段拆表TEXT/BLOB 高頻訪問獨立表
字符集新業務統一 utf8mb4(支援 Emoji)