(2) 電商資料庫表設計

聽風。發表於2019-01-07

一. 使用者實體

1. 使用者登入表(customer_login)

CREATE TABLE `customer_login` (
  `customer_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '使用者ID',
  `login_name` varchar(20) NOT NULL COMMENT '使用者登陸名',
  `password` char(32) NOT NULL COMMENT 'md5加密的密碼',
  `user_stats` tinyint NOT NULL DEFAULT '1' COMMENT '使用者狀態',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`customer_id`)
) ENGINE=InnoDB  COMMENT='使用者登陸表';

2. 使用者資訊表(customer_inf)

CREATE TABLE `customer_inf` (
  `customer_inf_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵ID',
  `customer_id` int  unsigned NOT NULL COMMENT 'customer_login表的自增ID',
  `customer_name` varchar(20) NOT NULL COMMENT '使用者真實姓名',
  `identity_card_type` tinyint  NOT NULL DEFAULT '1' COMMENT '證件型別:1 身份證,2軍官證,3護照',
  `identity_card_no` varchar(20) DEFAULT NULL COMMENT '證件號碼',
  `mobile_phone` int  unsigned DEFAULT NULL COMMENT '手機號',
  `customer_email` varchar(50) DEFAULT NULL COMMENT '郵箱',
  `gender` char(1) DEFAULT NULL COMMENT '性別',
  `user_point` int  NOT NULL DEFAULT '0' COMMENT '使用者積分',
  `register_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '註冊時間',
  `birthday` datetime DEFAULT NULL COMMENT '會員生日',
  `customer_level` tinyint  NOT NULL DEFAULT '1' COMMENT '會員級別:1普通會員,2青銅會員,3白銀會員,4黃金會員,5鑽石會員',
  `user_money` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '使用者餘額',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`customer_inf_id`)
) ENGINE=InnoDB  COMMENT='使用者資訊表';

3. 使用者級別表(customer_level_inf)

CREATE TABLE `customer_level_inf` (
  `customer_level` tinyint  NOT NULL AUTO_INCREMENT COMMENT '會員級別ID',
  `level_name` varchar(10) NOT NULL COMMENT '會員級別名稱',
  `min_point` int unsigned NOT NULL DEFAULT 0 COMMENT '該級別最低積分',
  `max_point` int unsigned NOT NULL DEFAULT 0 COMMENT '該級別最高積分',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`customer_level`)
) ENGINE=InnoDB  COMMENT='使用者資訊表';

4. 使用者地址表(order_customer_addr)

CREATE TABLE `order_customer_addr` (
  `customer_addr_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵ID',
  `customer_id` int unsigned NOT NULL COMMENT 'customer_login表的自增ID',
  `zip` smallint NOT NULL COMMENT '郵編',
  `province` smallint NOT NULL COMMENT '地區表中省份的id',
  `city` smallint NOT NULL COMMENT '地區表中城市的id',
  `district` smallint NOT NULL COMMENT '地區表中的區id',
  `address` varchar(200) NOT NULL COMMENT '具體的地址門牌號',
  `is_default` tinyint NOT NULL COMMENT '是否預設',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`customer_addr_id`)
) ENGINE=InnoDB  COMMENT='使用者地址表';

5. 使用者積分日誌表(customer_point_log)

CREATE TABLE `customer_point_log` (
  `point_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '積分日誌ID',
  `customer_id` int  unsigned NOT NULL COMMENT '使用者ID',
  `source` tinyint  unsigned NOT NULL COMMENT '積分來源:0訂單,1登入,2活動',
  `refer_number` int  unsigned NOT NULL DEFAULT '0' COMMENT '積分來源相關編號',
  `change_point` smallint  NOT NULL DEFAULT '0' COMMENT '變更積分數',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '積分日誌生成時間',
  PRIMARY KEY (`point_id`)
) ENGINE=InnoDB  COMMENT='使用者積分日誌表';

6. 使用者餘額變動表(customer_balance_log)

CREATE TABLE `customer_balance_log` (
  `balance_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '餘額日誌id',
  `customer_id` int  unsigned NOT NULL COMMENT '使用者ID',
  `source` tinyint  unsigned NOT NULL DEFAULT '1' COMMENT '記錄來源:1訂單,2退貨單',
  `source_sn` int  unsigned NOT NULL COMMENT '相關單據ID',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '記錄生成時間',
  `amount` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '變動金額',
  PRIMARY KEY (`balance_id`)
) ENGINE=InnoDB  COMMENT='使用者餘額變動表';

7. 使用者登入日誌表(customer_login_log)

CREATE TABLE `customer_login_log` (
 `login_id` int  unsigned NOT NULL AUTO_INCREMENT COMMENT '登入日誌ID',
 `customer_id` int  unsigned NOT NULL COMMENT '登入使用者ID',
 `login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '使用者登入時間',
 `login_ip` int  unsigned NOT NULL COMMENT '登入IP',
 `login_type` tinyint  NOT NULL COMMENT '登入型別:0未成功 1成功',
 PRIMARY KEY (`login_id`)
) ENGINE=InnoDB  COMMENT='使用者登入日誌表';

二. 商品實體

1. 品牌資訊表(product_brand_info)

CREATE TABLE `product_brand_info` (
  `brand_id` smallint unsigned NOT NULL AUTO_INCREMENT COMMENT '品牌ID',
  `brand_name` varchar(50) NOT NULL COMMENT '品牌名稱',
  `telephone` varchar(50) NOT NULL COMMENT '聯絡電話',
  `brand_web` varchar(100) DEFAULT NULL COMMENT '品牌網站',
  `brand_logo` varchar(100) DEFAULT NULL COMMENT '品牌logo URL',
  `brand_desc` varchar(150) DEFAULT NULL COMMENT '品牌描述',
  `brand_status` tinyint NOT NULL DEFAULT '0' COMMENT '品牌狀態,0禁用,1啟用',
  `brand_order` tinyint NOT NULL DEFAULT '0' COMMENT '排序',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`brand_id`)
) ENGINE=InnoDB  COMMENT='品牌資訊表';

2. 商品分類表(product_category)

CREATE TABLE `product_category` (
  `category_id` smallint unsigned NOT NULL AUTO_INCREMENT COMMENT '分類ID',
  `category_name` varchar(10)  NOT NULL COMMENT '分類名稱',
  `category_code` varchar(10)  NOT NULL COMMENT '分類編碼',
  `parent_id` smallint  unsigned NOT NULL DEFAULT '0' COMMENT '父分類ID',
  `category_level` tinyint  NOT NULL DEFAULT '1' COMMENT '分類層級',
  `category_status` tinyint NOT NULL DEFAULT '1' COMMENT '分類狀態',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`category_id`)
) ENGINE=InnoDB  COMMENT='商品分類表';

3. 供應商資訊表(product_supplier_info)

CREATE TABLE `product_supplier_info` (
  `supplier_id` int  unsigned NOT NULL AUTO_INCREMENT COMMENT '供應商ID',
  `supplier_code` char(8) NOT NULL COMMENT '供應商編碼',
  `supplier_name` char(50) NOT NULL COMMENT '供應商名稱',
  `supplier_type` tinyint  NOT NULL COMMENT '供應商型別:1.自營,2.平臺',
  `link_man` varchar(10) NOT NULL COMMENT '供應商聯絡人',
  `phone_number` varchar(50) NOT NULL COMMENT '聯絡電話',
  `bank_name` varchar(50) NOT NULL COMMENT '供應商開戶銀行名稱',
  `bank_account` varchar(50) NOT NULL COMMENT '銀行賬號',
  `address` varchar(200) NOT NULL COMMENT '供應商地址',
  `supplier_status` tinyint NOT NULL DEFAULT '0' COMMENT '狀態:0禁用,1啟用',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`supplier_id`)
) ENGINE=InnoDB  COMMENT='供應商資訊表';

4. 商品資訊表(product_info)

CREATE TABLE `product_info` (
  `product_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '商品ID',
  `product_code` char(16) NOT NULL COMMENT '商品編碼',
  `product_name` varchar(50) NOT NULL COMMENT '商品名稱',
  `bar_code` varchar(50) NOT NULL COMMENT '國條碼',
  `brand_id` int  unsigned NOT NULL COMMENT '品牌表的ID',
  `one_category_id` smallint unsigned NOT NULL COMMENT '一級分類ID',
  `two_category_id` smallint  unsigned NOT NULL COMMENT '二級分類ID',
  `three_category_id` smallint  unsigned NOT NULL COMMENT '三級分類ID',
  `supplier_id` int  unsigned NOT NULL COMMENT '商品的供應商id',
  `price` decimal(8,2) NOT NULL COMMENT '商品銷售價格',
  `average_cost` decimal(18,2) NOT NULL COMMENT '商品加權平均成本',
  `publish_status` tinyint  NOT NULL DEFAULT '0' COMMENT '上下架狀態:0下架1上架',
  `audit_status` tinyint  NOT NULL DEFAULT '0' COMMENT '稽核狀態:0未稽核,1已稽核',
  `weight` float DEFAULT NULL COMMENT '商品重量',
  `length` float DEFAULT NULL COMMENT '商品長度',
  `heigh` float DEFAULT NULL COMMENT '商品高度',
  `width` float DEFAULT NULL COMMENT '商品寬度',
  `color_type` enum('紅','黃','藍','黒') DEFAULT NULL,
  `production_date` datetime NOT NULL COMMENT '生產日期',
  `shelf_life` int  NOT NULL COMMENT '商品有效期',
  `descript` text NOT NULL COMMENT '商品描述',
  `indate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '商品錄入時間',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB  COMMENT='商品資訊表';

5. 商品圖片資訊表(product_pic_info)

CREATE TABLE `product_pic_info` (
  `product_pic_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '商品圖片ID',
  `product_id` int  unsigned NOT NULL COMMENT '商品ID',
  `pic_desc` varchar(50) DEFAULT NULL COMMENT '圖片描述',
  `pic_url` varchar(200) NOT NULL COMMENT '圖片URL',
  `is_master` tinyint  NOT NULL DEFAULT '0' COMMENT '是否主圖:0.非主圖1.主圖',
  `pic_order` tinyint  NOT NULL DEFAULT '0' COMMENT '圖片排序',
  `pic_status` tinyint  NOT NULL DEFAULT '1' COMMENT '圖片是否有效:0無效 1有效',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`product_pic_id`)
) ENGINE=InnoDB   COMMENT='商品圖片資訊表';

6. 商品評論表(product_comment)

CREATE TABLE `product_comment` (
  `comment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '評論ID',
  `product_id` int unsigned NOT NULL COMMENT '商品ID',
  `order_id` bigint unsigned NOT NULL COMMENT '訂單ID',
  `customer_id` int unsigned NOT NULL COMMENT '使用者ID',
  `title` varchar(50) NOT NULL COMMENT '評論標題',
  `content` varchar(300) NOT NULL COMMENT '評論內容',
  `audit_status` tinyint NOT NULL COMMENT '稽核狀態:0未稽核1已稽核',
  `audit_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '評論時間',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB  COMMENT='商品評論表';

三. 訂單實體

1. 訂單主表(order_master)

CREATE TABLE `order_master` (
  `order_id` int  unsigned NOT NULL AUTO_INCREMENT COMMENT '訂單ID',
  `order_sn` bigint(20) unsigned NOT NULL COMMENT '訂單編號 yyyymmddnnnnnnnn',
  `customer_id` int  unsigned NOT NULL COMMENT '下單人ID',
  `shipping_user` varchar(10) NOT NULL COMMENT '收貨人姓名',
  `province` smallint NOT NULL COMMENT '收貨人所在省',
  `city` smallint  NOT NULL COMMENT '收貨人所在市',
  `district` smallint  NOT NULL COMMENT '收貨人所在區',
  `address` varchar(100) NOT NULL COMMENT '收貨人詳細地址',
  `payment_method` tinyint  NOT NULL COMMENT '支付方式:1現金,2餘額,3網銀,4支付寶,5微信',
  `order_money` decimal(8,2) NOT NULL COMMENT '訂單金額',
  `district_money` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '優惠金額',
  `shipping_money` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '運費金額',
  `payment_money` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '支付金額',
  `shipping_comp_name` varchar(10) DEFAULT NULL COMMENT '快遞公司名稱',
  `shipping_sn` varchar(50) DEFAULT NULL COMMENT '快遞單號',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下單時間',
  `shipping_time` datetime DEFAULT NULL COMMENT '發貨時間',
  `pay_time` datetime DEFAULT NULL COMMENT '支付時間',
  `receive_time` datetime DEFAULT NULL COMMENT '收貨時間',
  `order_status` tinyint  NOT NULL DEFAULT '0' COMMENT '訂單狀態',
  `order_point` int  unsigned NOT NULL DEFAULT '0' COMMENT '訂單積分',
  `invoice_title` varchar(100) DEFAULT NULL COMMENT '發票抬頭',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`order_id`),
  UNIQUE KEY `ux_ordersn` (`order_sn`)
) ENGINE=InnoDB   COMMENT='訂單主表';

2. 訂單詳情表(order_detail)

CREATE TABLE `order_detail` (
  `order_detail_id` int  unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵ID,訂單詳情表ID',
  `order_id` int  unsigned NOT NULL COMMENT '訂單表ID',
  `product_id` int  unsigned NOT NULL COMMENT '訂單商品ID',
  `product_name` varchar(50) NOT NULL COMMENT '商品名稱',
  `product_cnt` int  NOT NULL DEFAULT '1' COMMENT '購買商品數量',
  `product_price` decimal(8,2) NOT NULL COMMENT '購買商品單價',
  `average_cost` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '平均成本價格',
  `weight` float DEFAULT NULL COMMENT '商品重量',
  `fee_money` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '優惠分攤金額',
  `w_id` int  unsigned NOT NULL COMMENT '倉庫ID',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`order_detail_id`)
) ENGINE=InnoDB   COMMENT='訂單詳情表';

3. 購物車表(order_cart)

CREATE TABLE `order_cart` (
  `cart_id` int  unsigned NOT NULL AUTO_INCREMENT COMMENT '購物車ID',
  `customer_id` int  unsigned NOT NULL COMMENT '使用者ID',
  `product_id` int  unsigned NOT NULL COMMENT '商品ID',
  `product_amount` int  NOT NULL COMMENT '加入購物車商品數量',
  `price` decimal(8,2) NOT NULL COMMENT '商品價格',
  `add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '加入購物車時間',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`cart_id`)
) ENGINE=InnoDB   COMMENT='購物車表';

4. 倉庫資訊表(warehouse_info)

CREATE TABLE `warehouse_info` (
  `w_id` smallint  unsigned NOT NULL AUTO_INCREMENT COMMENT '倉庫ID',
  `warehouse_sn` char(5) NOT NULL COMMENT '倉庫編碼',
  `warehouse_name` varchar(10) NOT NULL COMMENT '倉庫名稱',
  `warehouse_phone` varchar(20) NOT NULL COMMENT '倉庫電話',
  `contact` varchar(10) NOT NULL COMMENT '倉庫聯絡人',
  `province` smallint  NOT NULL COMMENT '省',
  `city` smallint  NOT NULL COMMENT '市',
  `district` smallint  NOT NULL COMMENT '區',
  `address` varchar(100) NOT NULL COMMENT '倉庫地址',
  `warehouse_status` tinyint  NOT NULL DEFAULT '1' COMMENT '倉庫狀態:0禁用,1啟用',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`w_id`)
) ENGINE=InnoDB   COMMENT='倉庫資訊表';

5. 商品庫存表(warehouse_proudct)

CREATE TABLE `warehouse_proudct` (
  `wp_id` int  unsigned NOT NULL AUTO_INCREMENT COMMENT '商品庫存ID',
  `product_id` int  unsigned NOT NULL COMMENT '商品id',
  `w_id` smallint  unsigned NOT NULL COMMENT '倉庫ID',
  `currnet_cnt` int  unsigned NOT NULL DEFAULT '0' COMMENT '當前商品數量',
  `lock_cnt` int  unsigned NOT NULL DEFAULT '0' COMMENT '當前佔用資料',
  `in_transit_cnt` int  unsigned NOT NULL DEFAULT '0' COMMENT '在途資料',
  `average_cost` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '移動加權成本',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`wp_id`)
) ENGINE=InnoDB  COMMENT='商品庫存表';

6. 物流公司資訊表(shipping_info)

CREATE TABLE `shipping_info` (
  `ship_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
  `ship_name` varchar(20) NOT NULL COMMENT '物流公司名稱',
  `ship_contact` varchar(20) NOT NULL COMMENT '物流公司聯絡人',
  `telphone` varchar(20) NOT NULL COMMENT '物流公司聯絡電話',
  `price` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '配送價格',
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間',
  PRIMARY KEY (`ship_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='物流公司資訊表';

四. DB規劃

  • 為以後資料庫遷移提供方便
  • 避免跨庫操作,把經常一起關聯查詢的表放到一個DB中
  • 為了方便識別表所在DB,在表名前增加庫名字首

使用者資料庫(mc_userdb):使用者資訊表(customer_inf)、使用者登入表(customer_login)、 使用者級別表(customer_level_inf)、使用者積分日誌表(customer_point_log)、使用者餘額變動表(customer_balance_log)、 使用者登入日誌表(customer_login_log)
商品資料庫(mc_productdb):品牌資訊表(product_brand_info)、商品分類表(product_category)、供應商資訊表(product_supplier_info)、商品資訊表(product_info)、商品圖片資訊表(product_pic_info)、商品評論表(product_comment)
訂單資料庫(mc_orderdb):訂單主表(order_master)、訂單詳情表(order_detail)、使用者地址表(customer_addr)、倉庫資訊表(warehouse_info)、物流公司資訊表(shipping_info)、 購物車表(order_cart)

相關文章