尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
校园二手交易系统数据库设计与实践
1. 项目概述校园二手交易系统设计最近在帮学校开发一个二手物品交易平台发现这类系统虽然功能看似简单但数据库设计特别考验基本功。今天就把我设计的完整方案分享出来包含DDL建表语句、DML操作示例、外键关系设计以及用PowerDesigner绘制的ER图。这个方案已经在我们学校实际运行半年处理了3000交易记录稳定性经受住了考验。校园二手交易系统的核心在于商品流转和信用体系构建。与普通电商不同学生间的二手交易更需要考虑身份真实性验证必须绑定学号交易安全不支持校外人员交易商品分类特殊性教材、实验器材等信用评价机制防止恶意交易2. 数据库设计方案2.1 核心表结构设计-- 用户表主表 CREATE TABLE user ( user_id VARCHAR(20) PRIMARY KEY COMMENT 学号作为主键, name VARCHAR(50) NOT NULL, password VARCHAR(100) NOT NULL, college VARCHAR(50) NOT NULL COMMENT 学院, major VARCHAR(50) NOT NULL COMMENT 专业, grade VARCHAR(10) NOT NULL COMMENT 年级, phone VARCHAR(15) UNIQUE NOT NULL, email VARCHAR(50) UNIQUE, credit_score INT DEFAULT 100 COMMENT 信用分初始100, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 商品类别表 CREATE TABLE category ( category_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, parent_id INT COMMENT 父分类ID, level TINYINT NOT NULL COMMENT 分类层级, FOREIGN KEY (parent_id) REFERENCES category(category_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 商品表 CREATE TABLE product ( product_id INT AUTO_INCREMENT PRIMARY KEY, user_id VARCHAR(20) NOT NULL, category_id INT NOT NULL, title VARCHAR(100) NOT NULL, price DECIMAL(10,2) NOT NULL, original_price DECIMAL(10,2) COMMENT 原价, description TEXT, status ENUM(pending,approved,sold,rejected) DEFAULT pending COMMENT 审核状态, view_count INT DEFAULT 0, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES user(user_id), FOREIGN KEY (category_id) REFERENCES category(category_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 商品图片表 CREATE TABLE product_image ( image_id INT AUTO_INCREMENT PRIMARY KEY, product_id INT NOT NULL, image_url VARCHAR(255) NOT NULL, sort_order INT DEFAULT 0, FOREIGN KEY (product_id) REFERENCES product(product_id) ON DELETE CASCADE ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 订单表 CREATE TABLE order ( order_id VARCHAR(32) PRIMARY KEY COMMENT 订单号, product_id INT NOT NULL, buyer_id VARCHAR(20) NOT NULL, seller_id VARCHAR(20) NOT NULL, price DECIMAL(10,2) NOT NULL, status ENUM(unpaid,paid,completed,cancelled) DEFAULT unpaid, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (product_id) REFERENCES product(product_id), FOREIGN KEY (buyer_id) REFERENCES user(user_id), FOREIGN KEY (seller_id) REFERENCES user(user_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 评价表 CREATE TABLE review ( review_id INT AUTO_INCREMENT PRIMARY KEY, order_id VARCHAR(32) NOT NULL, reviewer_id VARCHAR(20) NOT NULL COMMENT 评价人, reviewed_id VARCHAR(20) NOT NULL COMMENT 被评价人, rating TINYINT NOT NULL COMMENT 1-5分, content TEXT, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_order_reviewer (order_id, reviewer_id), FOREIGN KEY (order_id) REFERENCES order(order_id), FOREIGN KEY (reviewer_id) REFERENCES user(user_id), FOREIGN KEY (reviewed_id) REFERENCES user(user_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;2.2 外键关系说明级联删除商品图片表设置了ON DELETE CASCADE当商品删除时自动删除关联图片双向关联订单表同时关联买家和卖家确保交易双方都是注册用户唯一约束评价表的uk_order_reviewer确保每个订单每个用户只能评价一次自关联商品分类表通过parent_id实现多级分类3. DML操作示例3.1 基础数据插入-- 插入用户数据 INSERT INTO user (user_id, name, password, college, major, grade, phone, email) VALUES (20230001, 张三, e10adc3949ba59abbe56e057f20f883e, 计算机学院, 软件工程, 2023, 13800138001, zhangsanschool.edu), (20230002, 李四, e10adc3949ba59abbe56e057f20f883e, 电子学院, 通信工程, 2022, 13800138002, lisischool.edu); -- 插入分类数据 INSERT INTO category (name, parent_id, level) VALUES (教材, NULL, 1), (专业教材, 1, 2), (公共课教材, 1, 2), (电子产品, NULL, 1), (手机, 4, 2), (笔记本电脑, 4, 2); -- 插入商品数据 INSERT INTO product (user_id, category_id, title, price, original_price, description, status) VALUES (20230001, 3, 高等数学第七版上册, 15.00, 45.00, 九成新无笔记, approved), (20230001, 5, iPhone 13 128G, 3800.00, 5999.00, 国行在保电池健康92%, approved); -- 插入订单数据 INSERT INTO order (order_id, product_id, buyer_id, seller_id, price, status) VALUES (ORDER20230501123456, 1, 20230002, 20230001, 15.00, completed);3.2 典型业务查询-- 查询某用户发布的所有商品 SELECT p.*, c.name AS category_name FROM product p JOIN category c ON p.category_id c.category_id WHERE p.user_id 20230001; -- 查询某分类下的商品分页 SELECT p.*, u.name AS seller_name FROM product p JOIN user u ON p.user_id u.user_id WHERE p.category_id 3 AND p.status approved ORDER BY p.create_time DESC LIMIT 0, 10; -- 更新商品状态审核通过 UPDATE product SET status approved WHERE product_id 1 AND status pending; -- 交易完成后更新双方信用分 UPDATE user SET credit_score credit_score 5 WHERE user_id 20230001; -- 卖家加分 UPDATE user SET credit_score credit_score 3 WHERE user_id 20230002; -- 买家加分4. ER图设计与说明使用PowerDesigner设计的ER图主要包含以下实体和关系用户(user)核心实体与商品、订单、评价都有关系商品(product)关联用户和分类包含状态流转分类(category)支持多级分类的自关联设计订单(order)连接买家和卖家的交易记录评价(review)双向评价体系的关键重要提示ER图中特别注意商品状态的流转关系pending→approved→sold和评价的唯一性约束这是保证系统健壮性的关键。5. 实际开发中的经验总结性能优化点商品表增加了view_count字段并建立索引用于热门商品排序订单号使用时间戳随机数生成避免自增ID暴露业务量信用分变更记录需要单独建表这里做了简化踩坑记录最初没有设置评价表的唯一约束导致出现重复评价商品状态机设计不完整出现过已售商品被重复购买的情况图片表没有设置排序字段导致前端展示顺序混乱扩展建议增加聊天功能表支持买卖家沟通添加商品收藏功能实现信用分变更历史记录增加商品搜索的ES支持这个设计方案已经处理了我们学校3000二手交易特别适合中小型校园场景。最大的优势是信用体系的建立通过学号实名制双向评价有效降低了交易风险。如果需要完整SQL文件或PowerDesigner源文件可以私信我获取。
RELATED

相关推荐

EB Tresos与SystemDesk arxml导入及SysDes避坑

EB Tresos与SystemDesk arxml导入及SysDes避坑

简介:这份PDF文档面向汽车电子AUTOSAR开发与ECU配置工程师,聚焦EB Tresos中导入SystemDesk生成.arxml文件的完整配置流程,适合需要处理系统描述文件替换、导入器运行与代码生成的初中级开发者参考。文档以单份PDF交付,共1个文件&a…

📅 2026/11/3 12:42:55
大字体验技术:动态字号调节与智能布局优化

大字体验技术:动态字号调节与智能布局优化

1. 项目概述:为什么我们需要"大字"体验 那天我正在咖啡馆赶稿,邻座一位头发花白的老人家眯着眼睛看手机的样子让我印象深刻。他不断用手指放大屏幕上的文字,却依然皱着眉头。这个场景让我突然意识到:在4K屏幕和视网膜显…

📅 2026/11/3 12:42:55
SQL Server限制IP、用户与SSMS登录的三层防护实践

SQL Server限制IP、用户与SSMS登录的三层防护实践

“SQLServer 限制 IP、限制用户、限制 SSMS 登录”这套需求,我在好几个项目里都遇到过,几乎每次都是同一个场景:数据库端口不小心暴露到了应用服务器能访问的范围之外,安全扫描报告上出现了“数据库服务对外开放”“弱口令登录成功…

📅 2026/11/3 12:42:55
MORE NEWS

更多资讯

📰

从单模型服务到LLM推理平台:模型部署框架全貌拆解

做模型部署做久了,你会发现一个尴尬的事实:在开发环境里跑通一个模型,和生产环境稳定服务一个模型,完全是两回事;而稳定服务一个模型,和把几十个大大小小的模型统一接入、统一调度、统一监控,又…

📰

MySQL表查看方法全解析:从基础到高级技巧

1. MySQL表查看方法全解析 作为关系型数据库的典型代表,MySQL的表管理是日常开发中最基础也最频繁的操作之一。当接手一个新项目或维护现有系统时,快速了解数据库中有哪些表、它们的结构如何,是每个开发者必须掌握的技能。本文将详细介绍MySQ…

📰

TFLite内存规划器详解:复用张量按生命周期压峰值内存

做端侧推理的兄弟应该都体会过这种场景:模型导出很顺利,板子上一跑就 OOM;或者只是把输入分辨率从 320 提到 416,内存直接翻倍。遇到这种问题,大多数时候不是算力不够,而是中间张量被无谓地“一人占一个坑”…

📰

不买转接盒:Android车机静态工程评测与接收端实现

1. 拆解这个标题背后的真实需求 第一次看到“DiPlay 静态工程评测”这个说法,很多人会以为又是一个车机投屏的教程。但把标题拆开看,核心其实落在三个词上: 静态工程评测 、 不买转接盒 、 Android 车机扮演接收端 。这三个词组合在一起…

📰

只检查放行项,还不知道漏掉了什么

2026-11-02更新:0.2.0新增有限输入集合的precision和recall逻辑界限。下面保留0.1.0原始发布记录,新版方法与限制见末节。 0.1.0:原始发布记录 我发布了 Rejected Check Audit,一个用来检查多阶段筛选分母的离线工具。它保留前置…

📰

FAST-LIO源码精读:从李群李代数到ikd-tree调参排错

简介:面向FAST-LIO论文阅读与源码剖析的中文学习文档,适合已具备ROS、C和SLAM基础,希望打通激光惯性里程计理论推导与工程实现的读者,也可供初学激光雷达惯性建图者作查漏补缺之用。内容先从李群李代数、流形、点云数据格式及VLP-…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬