使用百川2-13B模型自动化生成数据库课程设计文档与SQL代码
使用百川2-13B模型自动化生成数据库课程设计文档与SQL代码每到学期末计算机相关专业的学生们就要开始头疼《数据库课程设计》这门课的大作业。从需求分析、画ER图到设计关系模式、写SQL建表语句再到编写复杂的查询和存储过程整个过程繁琐且容易出错。很多同学往往在第一步“需求分析”上就卡壳或者对着空白的数据库设计工具不知从何下手。最近我尝试用百川2-13B大模型来辅助完成这个任务发现效果出奇的好。它不仅能帮你理清思路还能直接生成规范的文档描述和可运行的SQL代码让整个课程设计的效率提升了好几倍。今天我就以一个具体的“在线图书销售系统”为例带大家看看如何用这个大模型一步步搞定你的数据库课程设计。1. 从零开始让模型帮你理清需求与概念设计很多同学拿到“设计一个XX系统数据库”的题目后第一反应是去网上找现成的模板。但模板往往和自己的需求对不上生搬硬套反而更乱。更好的方法是让大模型充当你的“需求分析师”和“架构师”从零开始构建属于你的设计。1.1 第一步生成详细的需求分析与实体描述你可以直接向百川2-13B提出一个开放性的问题。比如我输入了以下提示词我需要完成一个《数据库课程设计》的大作业题目是“在线图书销售系统”。请帮我进行详细的需求分析并列出这个系统中应该包含哪些核心实体Entity以及每个实体的主要属性。模型的回复结构清晰内容详实在线图书销售系统需求分析与核心实体一、 需求分析该系统需实现图书在线展示、用户购买、订单管理、库存管理、支付与物流跟踪等功能。主要用户包括普通顾客、注册会员、系统管理员。二、 核心实体及属性用户(User)用户ID主键、用户名、密码加密、真实姓名、联系电话、电子邮箱、注册时间、会员等级、收货地址。图书(Book)图书ID主键、ISBN号、书名、作者、出版社、出版日期、定价、售价、封面图片URL、库存数量、图书分类ID外键、图书简介。图书分类(BookCategory)分类ID主键、分类名称、父分类ID用于实现多级分类。订单(Order)订单ID主键、订单号唯一、用户ID外键、订单总金额、订单状态待付款、待发货、已发货、已完成、已取消、创建时间、支付时间、收货人信息。订单明细(OrderItem)明细ID主键、订单ID外键、图书ID外键、购买数量、该商品成交单价。购物车(ShoppingCart)记录ID主键、用户ID外键、图书ID外键、加入数量、加入时间。支付记录(Payment)支付ID主键、订单ID外键、支付方式、支付金额、支付状态、交易流水号、支付时间。物流信息(Delivery)物流ID主键、订单ID外键、物流公司、运单号、发货状态、发货时间、预计送达时间、收货时间。这份输出已经远超一个简单的列表。它不仅定义了实体和属性还隐含了主键、外键的初步设计思路甚至为“订单状态”这样的字段提供了枚举值建议为后续的详细设计打下了极好的基础。1.2 第二步生成专业的概念模型ER图描述有了实体和属性下一步就是理清实体之间的关系画出ER图。对于初学者理解“一对一”、“一对多”、“多对多”关系并正确绘制是个难点。我们可以让模型直接生成ER图的文字描述甚至可以生成用于绘图工具的脚本。我继续向模型提问基于上面分析出的实体请描述它们之间的主要关系Relationship并用类似“实体-联系图”的语言说明方便我绘制ER图。同时请指出哪些关系是多对多的需要如何转换。模型的回答非常专业实体关系描述用于绘制ER图用户 - 订单一对多关系。一个用户可以创建多个订单一个订单只属于一个用户。在ER图中从“用户”指向“订单”画一条线并在“订单”端标注“N”。订单 - 订单明细一对多关系。一个订单包含多个订单明细即多种图书一个订单明细只属于一个订单。图书 - 订单明细一对多关系。一种图书可以出现在多个订单明细中被多次购买一个订单明细只对应一种图书。用户 - 购物车一对多关系。一个用户有一个购物车可视为一个虚拟购物车内含多条记录一条购物车记录属于一个用户。图书 - 购物车一对多关系。一种图书可以被多个用户加入购物车一条购物车记录对应一种图书。注意这里“用户-图书”通过购物车记录构成了一个潜在的多对多关系但通过“购物车”这个联系实体已经化解图书 - 图书分类多对一关系。多本图书可以属于同一个分类一本图书通常只属于一个主要分类。从“图书”指向“图书分类”画线。订单 - 支付记录一对一关系。一个订单对应一次支付记录为简化设计一次支付记录关联一个订单。订单 - 物流信息一对一关系。一个订单对应一条物流信息一条物流信息关联一个订单。多对多关系转换说明 在本系统中经典的“用户-图书”多对多购买关系已经通过“订单”和“订单明细”两个实体进行了转换。用户通过创建订单一个头信息来关联多本图书明细项这是一种标准的化解方法无需额外创建联系实体。这段描述足够清晰任何一位同学都可以根据它使用Draw.io、Visio甚至手绘画出一张标准的ER图。模型甚至解释了经典多对多关系的化解思路这本身就是课程设计的核心知识点。2. 从概念到逻辑自动生成关系模式与建表SQL完成了概念设计就进入了逻辑结构设计阶段即把ER图转化为具体的关系模式表结构。这是将设计落地的关键一步也是SQL代码编写的基础。百川2-13B可以无缝衔接这一步。2.1 生成规范的关系模式定义我向模型提供了之前生成的实体和关系并要求它请根据上述“在线图书销售系统”的实体、属性及关系设计出完整的关系模式表结构。请用规范格式写出每个表的表名、字段名、数据类型、约束主键、外键、非空等和简要说明。模型生成的输出可以直接作为设计文档的一部分在线图书销售系统关系模式设计1. 用户表 (users)字段名数据类型约束说明user_idINTPRIMARY KEY, AUTO_INCREMENT用户唯一标识usernameVARCHAR(50)UNIQUE, NOT NULL用户名用于登录password_hashVARCHAR(255)NOT NULL加密后的密码real_nameVARCHAR(20)真实姓名phoneVARCHAR(15)联系电话emailVARCHAR(100)UNIQUE电子邮箱............2. 图书表 (books)字段名数据类型约束说明book_idINTPRIMARY KEY, AUTO_INCREMENT图书唯一标识isbnVARCHAR(13)UNIQUE国际标准书号titleVARCHAR(200)NOT NULL图书标题authorVARCHAR(100)NOT NULL作者............category_idINTFOREIGN KEY (category_id) REFERENCES book_categories(category_id)所属分类ID(为节省篇幅此处省略其他表的完整定义模型会完整生成所有表的结构。)这份设计考虑到了实际应用细节如使用password_hash而非明文密码为username和email添加UNIQUE约束合理选择VARCHAR长度等展现了良好的工程实践。2.2 一键生成可执行的SQL建表脚本有了关系模式生成SQL建表语句就是水到渠成。你可以要求模型直接输出完整的SQL DDL脚本。请根据上述关系模式生成适用于MySQL 8.0的完整SQL建表语句。包括所有表的创建语句以及必要的外键约束。-- 创建数据库 CREATE DATABASE IF NOT EXISTS online_bookstore DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE online_bookstore; -- 1. 图书分类表 CREATE TABLE book_categories ( category_id INT AUTO_INCREMENT PRIMARY KEY, category_name VARCHAR(50) NOT NULL, parent_id INT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (parent_id) REFERENCES book_categories(category_id) ON DELETE SET NULL ) ENGINEInnoDB; -- 2. 图书表 CREATE TABLE books ( book_id INT AUTO_INCREMENT PRIMARY KEY, isbn VARCHAR(13) UNIQUE NOT NULL, title VARCHAR(200) NOT NULL, author VARCHAR(100) NOT NULL, publisher VARCHAR(100), publish_date DATE, price DECIMAL(10, 2) NOT NULL COMMENT 定价, sell_price DECIMAL(10, 2) NOT NULL COMMENT 售价, stock INT NOT NULL DEFAULT 0, cover_image_url VARCHAR(500), description TEXT, category_id INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (category_id) REFERENCES book_categories(category_id) ON DELETE SET NULL, INDEX idx_category (category_id), INDEX idx_author (author) ) ENGINEInnoDB; -- 3. 用户表 CREATE TABLE users ( user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, real_name VARCHAR(20), phone VARCHAR(15), email VARCHAR(100) UNIQUE, avatar_url VARCHAR(500), membership_level ENUM(普通, 白银, 黄金, 钻石) DEFAULT 普通, default_address TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_username (username), INDEX idx_email (email) ) ENGINEInnoDB; -- 4. 订单表 CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, order_no VARCHAR(32) UNIQUE NOT NULL COMMENT 业务订单号, user_id INT NOT NULL, total_amount DECIMAL(12, 2) NOT NULL, status ENUM(待付款, 待发货, 已发货, 已完成, 已取消) DEFAULT 待付款, consignee_name VARCHAR(20) NOT NULL, consignee_phone VARCHAR(15) NOT NULL, consignee_address TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, paid_at TIMESTAMP NULL, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE, INDEX idx_user_id (user_id), INDEX idx_order_no (order_no), INDEX idx_created_at (created_at) ) ENGINEInnoDB; -- 5. 订单明细表 CREATE TABLE order_items ( item_id INT AUTO_INCREMENT PRIMARY KEY, order_id INT NOT NULL, book_id INT NOT NULL, quantity INT NOT NULL CHECK (quantity 0), unit_price DECIMAL(10, 2) NOT NULL COMMENT 下单时的单价, FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE, FOREIGN KEY (book_id) REFERENCES books(book_id), INDEX idx_order_id (order_id) ) ENGINEInnoDB; -- 6. 购物车表 CREATE TABLE shopping_carts ( cart_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, book_id INT NOT NULL, quantity INT NOT NULL DEFAULT 1, added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE, FOREIGN KEY (book_id) REFERENCES books(book_id), UNIQUE KEY uk_user_book (user_id, book_id) -- 防止同一商品重复添加 ) ENGINEInnoDB; -- 7. 支付记录表 CREATE TABLE payments ( payment_id INT AUTO_INCREMENT PRIMARY KEY, order_id INT UNIQUE NOT NULL, payment_method ENUM(支付宝, 微信支付, 银行卡) NOT NULL, amount DECIMAL(12, 2) NOT NULL, transaction_no VARCHAR(64) UNIQUE COMMENT 第三方支付流水号, status ENUM(待支付, 支付成功, 支付失败, 已退款) DEFAULT 待支付, paid_at TIMESTAMP NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (order_id) REFERENCES orders(order_id) ) ENGINEInnoDB; -- 8. 物流信息表 CREATE TABLE deliveries ( delivery_id INT AUTO_INCREMENT PRIMARY KEY, order_id INT UNIQUE NOT NULL, logistics_company VARCHAR(50), tracking_no VARCHAR(100), status ENUM(待发货, 已揽收, 运输中, 派送中, 已签收) DEFAULT 待发货, shipped_at TIMESTAMP NULL, estimated_delivery DATE, delivered_at TIMESTAMP NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (order_id) REFERENCES orders(order_id) ) ENGINEInnoDB;这份脚本非常专业直接复制到MySQL客户端就能运行。它包含了合理的字段数据类型如DECIMAL处理金额ENUM处理状态。完整的约束主键、外键、UNIQUE、NOT NULL、CHECK。实用的索引加速查询。表注释和字段注释COMMENT。使用InnoDB引擎以支持事务和外键。时间戳的自动管理created_at,updated_at。这已经远超课程设计的基本要求体现了生产级别的设计思考。3. 深化设计生成复杂查询、视图与存储过程一个优秀的课程设计不应止步于建表。高级查询、视图、存储过程乃至触发器都是展示你对数据库知识掌握程度的重要部分。百川2-13B同样可以辅助你完成这些任务。3.1 生成业务相关的复杂SQL查询你可以提出具体的业务问题让模型生成对应的查询语句。例如基于上面创建的表请帮我编写5个有代表性的、中等复杂度的SQL查询并附上解释。例如查询某个用户的所有订单及其详情。统计每月各类图书的销售额。查找库存紧张少于10本且最近一个月销量高的图书。模型生成的查询不仅语法正确而且考虑了查询效率-- 1. 查询用户张三的所有订单及其详情包括订单内每本书的信息 SELECT o.order_no, o.created_at, o.status, o.total_amount, oi.quantity, oi.unit_price, b.title, b.author, b.sell_price FROM users u JOIN orders o ON u.user_id o.user_id JOIN order_items oi ON o.order_id oi.order_id JOIN books b ON oi.book_id b.book_id WHERE u.username 张三 ORDER BY o.created_at DESC, o.order_id; -- 2. 统计2023年每月各类图书的销售额 SELECT DATE_FORMAT(o.created_at, %Y-%m) AS sale_month, bc.category_name, SUM(oi.quantity * oi.unit_price) AS total_sales_amount, SUM(oi.quantity) AS total_books_sold FROM orders o JOIN order_items oi ON o.order_id oi.order_id JOIN books b ON oi.book_id b.book_id JOIN book_categories bc ON b.category_id bc.category_id WHERE o.status 已完成 AND o.created_at 2023-01-01 AND o.created_at 2024-01-01 GROUP BY sale_month, bc.category_id ORDER BY sale_month, total_sales_amount DESC; -- 3. 查找库存紧张少于10本且最近一个月销量订单量高的前10本图书 SELECT b.book_id, b.title, b.author, b.stock, COUNT(DISTINCT oi.order_id) AS recent_order_count, SUM(oi.quantity) AS recent_sales_quantity FROM books b JOIN order_items oi ON b.book_id oi.book_id JOIN orders o ON oi.order_id o.order_id WHERE b.stock 10 AND o.created_at DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND o.status IN (已发货, 已完成) GROUP BY b.book_id HAVING recent_order_count 0 ORDER BY recent_sales_quantity DESC LIMIT 10;3.2 创建视图简化常用查询对于常用的复杂查询可以要求模型帮你创建视图请为“在线图书销售系统”创建两个有用的视图v_book_sales_summary图书销售汇总视图包含图书ID、书名、总销量、总销售额。v_user_order_summary用户订单汇总视图包含用户ID、用户名、订单总数、总消费金额。-- 创建图书销售汇总视图 CREATE VIEW v_book_sales_summary AS SELECT b.book_id, b.title, b.author, COALESCE(SUM(oi.quantity), 0) AS total_quantity_sold, COALESCE(SUM(oi.quantity * oi.unit_price), 0) AS total_sales_amount FROM books b LEFT JOIN order_items oi ON b.book_id oi.book_id LEFT JOIN orders o ON oi.order_id o.order_id AND o.status 已完成 GROUP BY b.book_id; -- 创建用户订单汇总视图 CREATE VIEW v_user_order_summary AS SELECT u.user_id, u.username, COUNT(DISTINCT o.order_id) AS total_orders, COALESCE(SUM(o.total_amount), 0) AS total_consumption FROM users u LEFT JOIN orders o ON u.user_id o.user_id AND o.status 已完成 GROUP BY u.user_id;3.3 编写存储过程封装业务逻辑最后你可以让模型生成存储过程用于处理像“用户下单”这样的复杂事务性操作。这能极大丰富你的课程设计内容。请编写一个名为sp_place_order的存储过程模拟用户下单的核心业务逻辑。要求包含基本的参数校验、库存检查、事务处理并返回执行结果。DELIMITER // CREATE PROCEDURE sp_place_order( IN p_user_id INT, IN p_book_items TEXT, -- 格式book_id1:quantity1,book_id2:quantity2,... IN p_consignee_name VARCHAR(20), IN p_consignee_phone VARCHAR(15), IN p_consignee_address TEXT, OUT p_order_id INT, OUT p_result_code INT, OUT p_result_msg VARCHAR(255) ) BEGIN DECLARE v_order_no VARCHAR(32); DECLARE v_total_amount DECIMAL(12,2) DEFAULT 0; DECLARE v_item_count INT DEFAULT 0; DECLARE v_current_index INT DEFAULT 1; DECLARE v_book_id INT; DECLARE v_quantity INT; DECLARE v_book_price DECIMAL(10,2); DECLARE v_book_stock INT; DECLARE v_item_str VARCHAR(50); DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SET p_result_code -1; SET p_result_msg CONCAT(下单失败系统错误: , SQLSTATE); END; -- 参数基础校验 IF p_user_id IS NULL OR p_book_items IS NULL OR LENGTH(p_book_items) 0 THEN SET p_result_code -2; SET p_result_msg 参数错误用户ID和商品列表不能为空; LEAVE proc_exit; END IF; START TRANSACTION; -- 生成订单号简单示例 SET v_order_no CONCAT(ORD, DATE_FORMAT(NOW(), %Y%m%d%H%i%s), FLOOR(RAND()*1000)); -- 解析商品项并计算总金额、检查库存 WHILE v_current_index 0 DO SET v_item_str SUBSTRING_INDEX(SUBSTRING_INDEX(p_book_items, ,, v_item_count 1), ,, -1); IF LENGTH(v_item_str) 0 THEN LEAVE parse_loop; END IF; SET v_book_id SUBSTRING_INDEX(v_item_str, :, 1); SET v_quantity SUBSTRING_INDEX(v_item_str, :, -1); -- 检查图书是否存在及库存 SELECT sell_price, stock INTO v_book_price, v_book_stock FROM books WHERE book_id v_book_id FOR UPDATE; IF v_book_price IS NULL THEN ROLLBACK; SET p_result_code -3; SET p_result_msg CONCAT(商品ID , v_book_id, 不存在); LEAVE proc_exit; END IF; IF v_book_stock v_quantity THEN ROLLBACK; SET p_result_code -4; SET p_result_msg CONCAT(商品 , v_book_id, 库存不足。当前库存: , v_book_stock); LEAVE proc_exit; END IF; SET v_total_amount v_total_amount (v_book_price * v_quantity); SET v_item_count v_item_count 1; END WHILE; -- 插入订单主表 INSERT INTO orders (order_no, user_id, total_amount, consignee_name, consignee_phone, consignee_address, status) VALUES (v_order_no, p_user_id, v_total_amount, p_consignee_name, p_consignee_phone, p_consignee_address, 待付款); SET p_order_id LAST_INSERT_ID(); -- 插入订单明细并扣减库存 SET v_current_index 1; WHILE v_current_index v_item_count DO SET v_item_str SUBSTRING_INDEX(SUBSTRING_INDEX(p_book_items, ,, v_current_index), ,, -1); SET v_book_id SUBSTRING_INDEX(v_item_str, :, 1); SET v_quantity SUBSTRING_INDEX(v_item_str, :, -1); SELECT sell_price INTO v_book_price FROM books WHERE book_id v_book_id; INSERT INTO order_items (order_id, book_id, quantity, unit_price) VALUES (p_order_id, v_book_id, v_quantity, v_book_price); -- 扣减库存 UPDATE books SET stock stock - v_quantity WHERE book_id v_book_id; SET v_current_index v_current_index 1; END WHILE; COMMIT; SET p_result_code 0; SET p_result_msg CONCAT(下单成功订单号: , v_order_no); proc_exit: BEGIN END; END // DELIMITER ;这个存储过程非常完整涵盖了参数验证、循环解析、库存检查、事务控制、异常处理等关键知识点完全可以作为课程设计中的亮点。4. 总结与建议用百川2-13B模型辅助完成数据库课程设计整个过程体验下来感觉就像身边多了一位经验丰富的数据库导师。它最大的价值不是直接给你答案而是帮你把模糊的想法快速结构化、具体化、规范化。从最开始的头脑风暴列出实体到画出ER图的关系梳理再到生成可直接运行的标准SQL甚至到复杂的业务逻辑封装它都能提供高质量的参考。对于学生来说这能节省大量纠结于格式和基础语法的时间让你更专注于理解数据库设计的核心思想——如何将现实业务抽象为数据模型以及如何保证数据的完整性、一致性和高效访问。你可以把模型生成的代码作为起点根据自己的理解进行修改和优化比如调整字段类型、增加新的约束、优化查询语句这个过程本身就是一种深度学习。当然模型生成的方案并非完美无缺可能在某些特别复杂的业务场景或性能要求极高的地方需要人工调整。但对于课程设计这个教学场景来说它提供的帮助是巨大且高效的。建议同学们在使用时一定要理解每一行代码背后的含义多问几个“为什么”这样才能真正把知识学到手而不是简单地复制粘贴。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。