一. 使用者實體
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)