电商管理系统的数据库设计思路和数据库代码

电商系统架构设计思路

为了构建一个高效、可扩展和安全的电商系统,以下是一些架构设计思路:

架构风格选择

采用分层架构,将系统划分为表示层、业务逻辑层和数据访问层。

  • 表示层:负责与用户进行交互,向用户展示界面,并接收并处理用户输入。
  • 业务逻辑层:处理核心业务逻辑,协调各个模块之间的交互。它将表示层的请求传递给合适的模块,并处理相关业务逻辑处理后的结果。
  • 数据访问层:负责与数据库或其他数据存储系统进行交互,执行数据库操作。

这种三层架构有助于实现高内聚和低耦合的组件,提高代码的可维护性和可重用性。

用户认证和权限管理

实现用户注册、登录和个人信息管理功能,并对不同用户类型(普通用户、商家、管理员)进行权限管理。

使用哈希算法对密码进行加密存储,并采用安全的身份验证方法,如JWT(JSON Web Token)来验证用户身份和保护敏感信息。

商品和分类管理

设计商品和分类管理模块,可通过管理员账号添加、编辑和删除商品信息。管理员还能够创建不同的商品分类,用于对商品进行分类和展示。

为商品表和分类表提供合适的索引和查询优化,以提高系统的数据库性能。

购物流程和订单管理

允许用户将商品添加到购物车,并在结算时选择收货地址。提供清晰明了的订单页面,使用户能够查看订单信息、支付状态和物流信息。

订单管理需保证订单数据的一致性和可靠性,确保用户购物过程的按序完成。设置订单状态及相关处理机制,比如待支付、已支付、已发货、已签收等状态,并与物流信息进行关联。

支付和物流集成

支持多种支付方式(如支付宝、微信支付)并与支付服务商进行集成。确保支付过程安全可靠,包括支付金额的准确计算和支付状态的实时更新。

与物流公司建立合作,集成物流接口,以便记录和跟踪用户订单的物流信息。用户可以方便地查看物流状态,提供更好的购物体验。

优惠券和积分功能

设计优惠券系统,包括优惠券的发放机制和使用规则。允许用户通过输入优惠码或享受折扣金额来获取购物优惠。

积分系统可鼓励客户参与活动并提升忠诚度。根据购买商品或参与活动的情况,给予用户相应积分。积分可以用于部分订单金额抵扣或兑换特定礼品。

用户评价和公告通知

用户可以对购买的商品进行评价,包括评分和评论内容,以帮助其他用户做出更好的购物决策。展示用户评价和提供排序和过滤功能,改善用户体验。

管理员可以发布公告向用户发送重要通知和促销信息,增强用户参与度和购物满意度。

以上是电商系统架构设计的一些思路,这些设计方案旨在构建一个功能丰富、高效和安全的电商平台,提供良好的用户体验并满足用户需求。

数据库解释

这个数据库包含了以下表及其详细结构:

address(地址)

  • id: int,自增主键
  • user_id: int,用户ID
  • receiver_name: varchar(255),收件人姓名
  • receiver_phone: varchar(255),收件人电话
  • province: varchar(255),省份
  • city: varchar(255),城市
  • district: varchar(255),地区
  • detail: varchar(255),详细地址
  • postal_code: varchar(10),邮编
  • is_default: tinyint(1),是否为默认地址

announcement(公告)

  • id: int,自增主键
  • title: varchar(255),公告标题
  • content: text,公告内容
  • create_time: datetime,创建时间
  • userid: int,用户ID(外键,关联到user表的id字段)

category(商品分类)

  • id: int,自增主键
  • name: varchar(255),分类名称

coupon(优惠券)

  • id: int,自增主键
  • user_id: int,用户ID
  • code: varchar(255),优惠券代码
  • discount: decimal(10, 2),折扣金额
  • valid_from: date,有效期起始日期
  • valid_to: date,有效期截止日期

favorites(收藏)

  • id: int,自增主键
  • user_id: int,用户ID
  • product_ids: varchar(255),商品ID列表

logistics_company(物流公司)

  • id: int,自增主键
  • name: varchar(255),物流公司名称
  • contact_number: varchar(255),联系电话
  • website: varchar(255),公司网站

logistics_info(物流信息)

  • id: int,自增主键
  • order_id: int,订单ID
  • logistics_company_id: int,物流公司ID
  • tracking_number: varchar(255),物流追踪号
  • status: varchar(255),物流状态
  • update_time: datetime,更新时间

loyalty_points(积分)

  • id: int,自增主键
  • user_id: int,用户ID
  • points: int,积分数量
  • validity_period: date,有效期限

orders(订单)

  • id: int,自增主键
  • user_id: int,用户ID
  • total_amount: decimal(10, 2),订单总金额
  • create_time: datetime,创建时间
  • status: varchar(255),订单状态

payment_record(支付记录)

  • id: int,自增主键
  • order_id: int,订单ID
  • payment_method: varchar(255),支付方式
  • amount: decimal(10, 2),支付金额
  • status: varchar(255),支付状态
  • create_time: datetime,创建时间

product(商品)

  • id: int,自增主键
  • name: varchar(255),商品名称
  • description: text,商品描述
  • price: decimal(10, 2),商品价格
  • stock: int,库存数量
  • type: varchar(255),商品类型
  • image_url: varchar(255),商品图片链接

product_image(商品图片)

  • id: int,自增主键
  • product_id: int,商品ID
  • image_url: varchar(255),图片链接

review(评论)

  • id: int,自增主键
  • user_id: int,用户ID
  • product_id: int,商品ID
  • rating: int,评分
  • comment: text,评论内容
  • create_time: datetime,创建时间

shopping_cart(购物车)

  • id: int,自增主键
  • user_id: int,用户ID
  • product_id: int,商品ID
  • quantity: int,商品数量

user(用户)

  • id: int,自增主键
  • username: varchar(255),用户名
  • password: varchar(255),密码
  • email: varchar(255),电子邮件
  • phone_number: varchar(255),电话号码
  • gender: varchar(255),性别
  • avatar: varchar(255),头像链接
  • date_of_birth: date,出生日期
  • create_time: datetime,创建时间
  • balance: decimal(10, 2),余额
  • user_type: enum(‘customer’,‘merchant’,‘admin’),用户类型
  • salt: varchar(255),密码加密盐值

user_coupon(用户优惠券)

  • id: int,自增主键
  • user_id: int,用户ID
  • coupon_id: int,优惠券ID
  • coupon_name: varchar(255),优惠券名称
  • quantity: int,优惠券数量

数据库代码

/* Navicat MySQL Data Transfer Source Server : localhost_3306 Source Server Type: MySQL Source Server Version : 80028 Source Host : localhost:3306 Source Schema : e-exam Target Server Type: MySQL Target Server Version : 80028 File Encoding : 65001 Date: 26/06/2023 11:01:33*/SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for address-- ----------------------------DROP TABLE IF EXISTS `address`;CREATE TABLE `address`(`id` int NOT NULL AUTO_INCREMENT,`user_id` int NULL DEFAULT NULL,`receiver_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`receiver_phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`province` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`city` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`district` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`postal_code` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`is_default` tinyint(1) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for announcement-- ----------------------------DROP TABLE IF EXISTS `announcement`;CREATE TABLE `announcement`(`id` int NOT NULL AUTO_INCREMENT,`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL,`create_time` datetime NULL DEFAULT NULL,`userid` int NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,INDEX `FK_Announcement_User`(`userid`) USING BTREE,CONSTRAINT `FK_Announcement_User` FOREIGN KEY (`userid`) REFERENCES `user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for category-- ----------------------------DROP TABLE IF EXISTS `category`;CREATE TABLE `category`(`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for coupon-- ----------------------------DROP TABLE IF EXISTS `coupon`;CREATE TABLE `coupon`(`id` int NOT NULL AUTO_INCREMENT,`user_id` int NULL DEFAULT NULL,`code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`discount` decimal(10, 2) NULL DEFAULT NULL,`valid_from` date NULL DEFAULT NULL,`valid_to` date NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for favorites-- ----------------------------DROP TABLE IF EXISTS `favorites`;CREATE TABLE `favorites`(`id` int NOT NULL AUTO_INCREMENT,`user_id` int NOT NULL,`product_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,PRIMARY KEY (`id`) USING BTREE,INDEX `FK_Favorites_User`(`user_id`) USING BTREE,CONSTRAINT `FK_Favorites_User` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for logistics_company-- ----------------------------DROP TABLE IF EXISTS `logistics_company`;CREATE TABLE `logistics_company`(`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`contact_number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`website` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for logistics_info-- ----------------------------DROP TABLE IF EXISTS `logistics_info`;CREATE TABLE `logistics_info`(`id` int NOT NULL AUTO_INCREMENT,`order_id` int NULL DEFAULT NULL,`logistics_company_id` int NULL DEFAULT NULL,`tracking_number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`update_time` datetime NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for loyalty_points-- ----------------------------DROP TABLE IF EXISTS `loyalty_points`;CREATE TABLE `loyalty_points`(`id` int NOT NULL AUTO_INCREMENT,`user_id` int NULL DEFAULT NULL,`points` int NULL DEFAULT NULL,`validity_period` date NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for orders-- ----------------------------DROP TABLE IF EXISTS `orders`;CREATE TABLE `orders`(`id` int NOT NULL AUTO_INCREMENT,`user_id` int NULL DEFAULT NULL,`total_amount` decimal(10, 2) NULL DEFAULT NULL,`create_time` datetime NULL DEFAULT NULL,`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for payment_record-- ----------------------------DROP TABLE IF EXISTS `payment_record`;CREATE TABLE `payment_record`(`id` int NOT NULL AUTO_INCREMENT,`order_id` int NULL DEFAULT NULL,`payment_method` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`amount` decimal(10, 2) NULL DEFAULT NULL,`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`create_time` datetime NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for product-- ----------------------------DROP TABLE IF EXISTS `product`;CREATE TABLE `product`(`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL,`price` decimal(10, 2) NULL DEFAULT NULL,`stock` int NULL DEFAULT NULL,`type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`image_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for product_image-- ----------------------------DROP TABLE IF EXISTS `product_image`;CREATE TABLE `product_image`(`id` int NOT NULL AUTO_INCREMENT,`product_id` int NULL DEFAULT NULL,`image_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for review-- ----------------------------DROP TABLE IF EXISTS `review`;CREATE TABLE `review`(`id` int NOT NULL AUTO_INCREMENT,`user_id` int NULL DEFAULT NULL,`product_id` int NULL DEFAULT NULL,`rating` int NULL DEFAULT NULL,`comment` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL,`create_time` datetime NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for shopping_cart-- ----------------------------DROP TABLE IF EXISTS `shopping_cart`;CREATE TABLE `shopping_cart`(`id` int NOT NULL AUTO_INCREMENT,`user_id` int NULL DEFAULT NULL,`product_id` int NULL DEFAULT NULL,`quantity` int NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user`(`id` int NOT NULL AUTO_INCREMENT,`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`phone_number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`gender` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,`date_of_birth` date NULL DEFAULT NULL,`create_time` datetime NULL DEFAULT NULL,`balance` decimal(10, 2) NULL DEFAULT 0.00,`user_type` enum('customer','merchant','admin') CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT 'customer',`salt` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC;INSERT INTO `user` VALUES (1, 'john123', 'ffdb4708de56ccea017dceac9ca26fad', 'john@example.com', '1234567890', 'Male', 'https://tse3-mm.cn.bing.net/th/id/OIP-C.9SyfqXgT17w0WVMmFhsqWgHaEc?w=245&h=180&c=7&r=0&o=5&dpr=1.8&pid=1.7', '1990-01-01', '2023-06-25 16:08:35', 100.00, 'customer', '405538f942a08c0338caf988e0ca4cbc');-- ------------------------------ Table structure for user_coupon-- ----------------------------DROP TABLE IF EXISTS `user_coupon`;CREATE TABLE `user_coupon`(`id` int NOT NULL AUTO_INCREMENT,`user_id` int NOT NULL,`coupon_id` int NOT NULL,`coupon_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,`quantity` int NOT NULL DEFAULT 0,PRIMARY KEY (`id`) USING BTREE,INDEX `fk_user_coupon_coupon`(`coupon_id`) USING BTREE,INDEX `fk_user_coupon_user`(`user_id`) USING BTREE,CONSTRAINT `fk_user_coupon_coupon` FOREIGN KEY (`coupon_id`) REFERENCES `coupon` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `fk_user_coupon_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

如果大家觉得有用的话,可以关注我下面的微信公众号,极客李华,我会在里面更新更多行业资讯,企业面试内容,编程资源,如何写出可以让大厂面试官眼前一亮的简历等内容,让大家更好学习编程,我的抖音,B站也叫极客李华。大家喜欢也可以关注一下