发布时间:2026-11-01 06:13:01 浏览次数:0
MyShop商城致力于提供流畅的购物体验,旨在为用户打造一个便捷的在线购物平台,涵盖了商品浏览、购物车管理、结算付款等功能。同时提供了后台管理系统,方便商家管理商品信息和订单。该项目需要一个可靠高效的数据库系统来管理商品、用户和订单信息。这个数据库系统必须具备出色的性能和可靠性,通过设计和优化提高系统响应速度和数据一致性。我们的目标是设计实现MyShop商城的数据库系统,从而为用户提供卓越的购物体验。通过这个项目,我们不仅希望学习MySQL数据库开发技术,更致力于为用户创造一个简单实用的购物平台。
本项目旨在通过学习MySQL数据库应用,着重于购物网站系统的数据库设计。我们的目标是构建一个高效可靠的数据库系统,有效管理商品、用户和订单信息,从而提供顶尖的购物体验。通过理论与实践相结合,强调培养团队的协作沟通、数据库设计能力,并专注于最新技术的应用与掌握。同时,我们致力于建立"MyShop商城",为现代消费者打造一个便捷高效的在线购物平台,集成商品浏览、购物车管理、结算付款等功能,并借助后台管理系统提供用户友好的购物环境。我们的目标是通过学习MySQL数据库开发技术,构建安全、高效的系统,满足用户的购物需求。
为确保系统的稳定性、安全性和完整性,该项目设计要求包括功能模块设计、数据库结构设计、数据安全性、数据一致性与完整性以及前后端交互实现,要求如下:
MyShop 商城系统的数据需求包括用户数据、地址数据、商品数据、购物车数据、订单数据和订单项数据。用户数据包括账号、密码、邮箱等信息,地址数据包括收货地址和联系方式,商品数据包括商品类别和详细信息,购物车数据用于记录用户选择的商品,订单数据用于管理用户的订单信息,订单项数据用于记录订单中每个商品的详细信息。通过满足这些数据需求,MyShop 商城系统可以实现用户管理、地址管理、商品展示、购物车管理、订***理和订单项管理的功能。
MyShop 商城系统的功能和数据处理方式,主要包括用户管理、商品管理、购物车管理、订***理、地址管理等方面。用户管理涵盖注册、登录、账号管理和权限控制;商品管理包括商品信息的录入、更新和查询;购物车管理允许用户管理购物车中的商品;订***理涉及订单的生成、处理和管理;地址管理用于管理用户的收货地址;通过对这些处理需求进行分析,可以确保系统能够满足商城的核心功能需求,并提供良好的用户体验和商城运营效果。
这些约束条件确保了数据库中的数据一致性和完整性,限制了不正确的操作并保护了数据的准确性和可靠性。
数据结构名:user
说明:用于存储用户的账号信息和相关属性。
组成:u_id,u_name,u_password,u_email,u_sex,u_status,u_code,u_role
数据结构名: address
说明: 用于存储用户的收货地址信息。
组成:a_id,u_id,a_name,a_phone,a_detail,a_state
数据结构名:type
说明:用于存储商品的分类信息。
组成:t_id,t_name,t_info
数据结构名:product
说明:用于存储具体的商品信息。
组成:p_id,t_id,p_name,p_time,p_image,p_price,p_state,p_info
数据结构名:cart
说明:用于存储用户的购物车信息。
组成: c_id,u_id,p_id,c_count,c_num
数据结构名:orders
说明:用于存储用户的订单信息。
组成: o_id,u_id,a_id,o_count,o_time,o_state
数据结构名: item
说明:用于存储订单中每个商品的详细信息。
组成:i_id,o_id,p_id,i_count,i_num
-- 视图1:获取所有商品及其所属类别名称CREATE VIEW vw_Products ASSELECT p.p_id, p.p_name, p.p_time, p.p_image, p.p_price, p.p_state, p.p_info, t.t_nameFROM product pJOIN type t ON p.t_id = t.t_id;-- 查询所有商品及其所属类别名称SELECT * FROM vw_Products;
-- 视图2:获取所有订单以及用户信息和地址详情CREATE VIEW vw_Orders ASSELECT o.o_id, o.o_count, o.o_time, o.o_state, u.u_name, u.u_email, u.u_sex, a.a_name, a.a_phone, a.a_detailFROM orders oJOIN `user` u ON o.u_id = u.u_idJOIN address a ON o.a_id = a.a_id;-- 查询所有订单以及用户信息和地址详情SELECT * FROM vw_Orders;
-- 视图3:获取用户的购物车内容CREATE VIEW vw_Cart ASSELECT c.c_id, c.u_id, c.p_id, c.c_count, c.c_num, p.p_name, p.p_price, p.p_imageFROM cart cJOIN product p ON c.p_id = p.p_id;-- 查询指定用户的购物车内容SELECT * FROM vw_Cart WHERE u_id = 5;
-- 视图4:获取用户的收货地址列表CREATE VIEW vw_Addresses ASSELECT a.a_id, a.u_id, a.a_name, a.a_phone, a.a_detail, a.a_state, u.u_nameFROM address aJOIN `user` u ON a.u_id = u.u_id;-- 查询指定用户的收货地址列表SELECT * FROM vw_Addresses WHERE u_id = 4;
-- 视图5:获取用户的订单详情CREATE VIEW vw_UserOrders ASSELECT o.o_id, o.o_count, o.o_time, o.o_state, u.u_name, u.u_email, u.u_sex, a.a_name, a.a_phone, a.a_detailFROM orders oJOIN `user` u ON o.u_id = u.u_idJOIN address a ON o.a_id = a.a_id;-- 查询指定用户的订单详情SELECT * FROM vw_UserOrders WHERE u_name = 'user4'; -- 使用用户名来指定用户
-- 存储过程1:添加商品到购物车DELIMITER //CREATE PROCEDURE sp_AddToCart(IN user_id INT,IN product_id INT,IN quantity INT)BEGININSERT INTO cart (u_id, p_id, c_num, c_count)VALUES (user_id, product_id, quantity, (SELECT p_price FROM product WHERE p_id = product_id) * quantity);END//DELIMITER ;-- 调用存储过程 sp_AddToCart 将商品添加到购物车CALL sp_AddToCart(4, 3, 2); -- 查询结果SELECT * FROM cart;
-- 存储过程2:创建订单DELIMITER //CREATE PROCEDURE sp_CreateOrder(IN user_id INT,IN address_id INT)BEGINDECLARE order_id VARCHAR(64);SET order_id = UUID(); -- 使用 UUID() 函数生成唯一订单编号INSERT INTO orders (o_id, u_id, a_id, o_count, o_time, o_state)SELECT order_id, user_id, address_id, SUM(c.c_count), NOW(), 0FROM cart cWHERE c.u_id = user_id;DELETE FROM cart WHERE u_id = user_id; -- 清空购物车中该用户的商品END//DELIMITER ;-- 调用存储过程 sp_CreateOrder 创建订单CALL sp_CreateOrder(4, 4); -- 查询结果SELECT * FROM orders;
-- 存储过程3:更新订单状态DELIMITER //CREATE PROCEDURE sp_UpdateOrderStatus(IN order_id VARCHAR(64),IN new_state INT)BEGINUPDATE ordersSET o_state = new_stateWHERE o_id = order_id;END//DELIMITER ;-- 调用存储过程 sp_UpdateOrderStatus 更新订单状态CALL sp_UpdateOrderStatus('order2', 4); -- 查询结果SELECT * FROM orders; -- 触发器,在将商品添加到订单时,将相关商品从购物车中移除。-- 同时,我们将在这个过程中使用事务来确保操作的一致性。DELIMITER //CREATE TRIGGER trg_AddToOrderAFTER INSERT ON ordersFOR EACH ROWBEGINDECLARE cart_count INT;-- 获取购物车中相应商品的数量SELECT c_num INTO cart_count FROM cart WHERE p_id = NEW.p_id AND u_id = NEW.u_id;-- 如果购物车中有相关商品,则将其移除IF cart_count > 0 THENDELETE FROM cart WHERE p_id = NEW.p_id AND u_id = NEW.u_id;END IF;END;//DELIMITER ;-- 事务,将商品添加到购物车并创建订单START TRANSACTION; -- 开始事务CALL sp_AddToCart(3, 3, 2); -- 将商品添加到购物车CALL sp_CreateOrder(3, 4); -- 创建订单COMMIT; -- 提交事务,保存更改
-- 创建每日数据备份的事件DELIMITER //CREATE EVENT IF NOT EXISTS daily_data_backupON SCHEDULE EVERY 1 DAYSTARTS TIMESTAMP(NOW() + INTERVAL 1 DAY)ON COMPLETION PRESERVEDOBEGINSET @backup_file_name = CONCAT('backup_', DATE_FORMAT(NOW(), '%Y%m%d_%H%i%s'), '.sql');SET @backup_path = '/path/to/backup/directory/';SET @backup_command = CONCAT('mysqldump -u username -pPassword MyShop > ', @backup_path, @backup_file_name);PREPARE stmt FROM @backup_command;EXECUTE stmt;DEALLOCATE PREPARE stmt;INSERT INTO backup_logs (backup_name, backup_time) VALUES (@backup_file_name, NOW());END;//DELIMITER ; -- 定义用户表主键u_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,-- 定义地址表主键a_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,-- 定义商品类别表主键t_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,-- 定义商品表主键p_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,-- 定义购物车表主键c_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,-- 定义订单表主键o_id VARCHAR(64) NOT NULL PRIMARY KEY,-- 定义订单项表主键i_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
-- 删除 user 表的记录时同时删除 address 表中相关行的行为,可以使用 ON DELETE CASCADE 来定义外键约束。ALTER TABLE addressADD CONSTRAINT FK_u_a_fk -- 添加一个名为 FK_u_a_fk 的约束FOREIGN KEY (u_id) -- 该约束是针对 u_id 列的外键约束REFERENCES user (u_id) -- 指定引用的主键表和主键列,这里是 user 表的 u_id 列ON DELETE CASCADE -- 指定在删除关联行时自动删除相关行ON UPDATE CASCADE; -- 指定在更新关联行时自动更新相应行
ALTER TABLE productADD CONSTRAINT FK_t_p_fkFOREIGN KEY (t_id)REFERENCES type (t_id)ON DELETE CASCADEON UPDATE CASCADE;
-- 外键约束与用户表 user 的关联ALTER TABLE cartADD CONSTRAINT FK_u_c_fkFOREIGN KEY (u_id)REFERENCES `user`(u_id)ON DELETE CASCADEON UPDATE CASCADE;
-- 外键约束与商品表 product 的关联ALTER TABLE cartADD CONSTRAINT FK_cart_productFOREIGN KEY (p_id)REFERENCES product (p_id)ON DELETE CASCADEON UPDATE CASCADE;
-- 添加外键约束与 user 表的关联;可以保证在删除用户时,同时删除与该用户关联的订单数据。ALTER TABLE ordersADD CONSTRAINT FK_u_o_fkFOREIGN KEY (u_id)REFERENCES `user` (u_id)ON DELETE CASCADEON UPDATE CASCADE;
ALTER TABLE ordersADD CONSTRAINT FK_a_o_fkFOREIGN KEY (a_id)REFERENCES address (a_id)ON DELETE NO ACTIONON UPDATE NO ACTION;
ALTER TABLE itemADD CONSTRAINT FK_item_ordersFOREIGN KEY (o_id)REFERENCES orders (o_id)ON DELETE CASCADEON UPDATE CASCADE;
ALTER TABLE itemADD CONSTRAINT FK_p_i_fk FOREIGN KEY (p_id)REFERENCES product (p_id)ON DELETE NO ACTIONON UPDATE NO ACTION;
-- 向 user 表插入虚拟数据INSERT INTO user (u_name, u_password, u_email, u_sex, u_status, u_code, u_role)VALUES('user1', 'password1', 'user1@example.com', '男', 1, 'code1', 1),('user2', 'password2', 'user2@example.com', '女', 1, 'code2', 1),('user3', 'password3', 'user3@example.com', '男', 1, 'code3', 1),('user4', 'password4', 'user4@example.com', '女', 1, 'code4', 1),('user5', 'password5', 'user5@example.com', '男', 0, 'code5', 1),('user6', 'password6', 'user6@example.com', '女', 0, 'code6', 1),('user7', 'password7', 'user7@example.com', '男', 1, 'code7', 1),('user8', 'password8', 'user8@example.com', '女', 1, 'code8', 1),('user9', 'password9', 'user9@example.com', '男', 1, 'code9', 1),('user10', 'password10', 'user10@example.com', '女', 1, 'code10', 1);-- 向 address 表插入虚拟数据INSERT INTO address (u_id, a_name, a_phone, a_detail, a_state)VALUES(1, 'user1', '1234567890', 'City1', 1),(2, 'user2', '9876543210', 'City2', 0),(3, 'user3', '1111111111', 'City3', 1),(4, 'user4', '2222222222', 'City4', 0),(5, 'user5', '3333333333', 'City5', 1),(6, 'user6', '4444444444', 'City6', 0),(7, 'user7', '5555555555', 'City7', 1),(8, 'user8', '6666666666', 'City8', 0),(9, 'user9', '7777777777', 'City9', 1),(10, 'user10', '8888888888', 'City10', 0);-- 商品类别表插入虚拟数据INSERT INTO type (t_name, t_info)VALUES ('电子产品', '包括手机、电脑、平板等电子设备'),('服装', '包括男装、女装、童装等各种服装'),('家居用品', '包括家具、家饰、厨具等家居用品');-- 商品表插入虚拟数据INSERT INTO product (t_id, p_name, p_time, p_image, p_price, p_state, p_info)VALUES (1, 'iPhone 12', '2021-01-01', 'image1.jpg', 999.99, 10, '最新款iPhone手机'),(1, 'MacBook Pro', '2021-02-01', 'image2.jpg', 1999.99, 8, '高性能笔记本电脑'),(2, 'T-shirt', '2021-03-01', 'image3.jpg', 19.99, 5, '简约款T恤'),(2, 'Dress', '2021-04-01', 'image4.jpg', 49.99, 7, '时尚连衣裙'),(3, 'Sofa', '2021-05-01', 'image5.jpg', 599.99, 6, '舒适沙发'),(3, 'Table Lamp', '2021-06-01', 'image6.jpg', 29.99, 4, '台灯'),(1, 'AirPods', '2021-07-01', 'image7.jpg', 149.99, 9, '无线耳机'),(2, 'Jeans', '2021-08-01', 'image8.jpg', 39.99, 6, '经典牛仔裤'),(2, 'Shoes', '2021-09-01', 'image9.jpg', 79.99, 7, '时尚鞋子'),(3, 'Cookware Set', '2021-10-01', 'image10.jpg', 199.99, 8, '厨具套装'); -- 更新 address 表中的数据UPDATE address SET a_name = 'newname' WHERE a_id = 1;-- 根据类别ID更新类别名称和描述UPDATE type SET t_name = '数码产品', t_info = '包括手机、电脑、相机等数码设备' WHERE t_id = 1;-- 根据类别名称更新类别描述UPDATE type SET t_info = '包括男装、女装、童装等各种时尚服饰' WHERE t_name = '服装';-- 根据商品ID更新商品名称和描述UPDATE product SET p_name = 'iPhone 13', p_info = '最新款iPhone手机' WHERE p_id = 1;-- 根据商品名称更新商品价格UPDATE product SET p_price = 1099.99 WHERE p_name = 'MacBook Pro';-- 修改购物车中特定用户和商品的数量和小计UPDATE cart SET c_num = 3, c_count = 15.99 WHERE u_id = 2 AND p_id = 1;-- 更新订单状态为已付款UPDATE orders SET o_state = 1 WHERE o_id = 'order1';-- 修改订单项的数量和小计UPDATE item SET i_num = 3, i_count = 29.99 WHERE i_id = 1;
-- 删除 user 表中的数据DELETE FROM user WHERE u_id = 1;-- 删除 address 表中的数据DELETE FROM address WHERE a_id = 2;-- 根据类别名称删除类别DELETE FROM type WHERE t_name = '电子产品';-- 根据类别ID删除类别DELETE FROM type WHERE t_id = 1;-- 删除所有商品DELETE FROM product;-- 根据商品名称删除商品DELETE FROM product WHERE p_name = 'iPhone 12';-- 根据商品ID删除商品DELETE FROM product WHERE p_id = 1;-- 删除特定用户的购物车记录DELETE FROM cart WHERE u_id = 1;-- 删除特定商品的购物车记录DELETE FROM cart WHERE p_id = 2;-- 删除订单DELETE FROM orders WHERE o_id = 'order1';-- 删除用户ID为2的所有订单DELETE FROM orders WHERE u_id = 2;-- 删除指定的订单项DELETE FROM item WHERE i_id = 2;
在这里插入代码片
-- 创建组长账户CREATE USER '组长'@'localhost' IDENTIFIED BY 'password';-- 赋予管理员权限给组长GRANT ALL PRIVILEGES ON *.* TO '组长'@'localhost' WITH GRANT OPTION;
-- 由组长创建项目角色,并授予项目角色相关权限CREATE ROLE 项目角色;GRANT SELECT, INSERT, UPDATE, DELETE ON MyShop.orders TO 项目角色;
-- 由组长将组员与项目角色捆绑CREATE USER '组员'@'localhost' IDENTIFIED BY 'password';GRANT SELECT, INSERT, UPDATE, DELETE ON MyShop.orders TO '组员'@'localhost';
-- 给予组员登录本组项目数据库的权限GRANT USAGE ON *.* TO '组员'@'localhost';
要在 MySQL 中备份数据库,可以使用 mysqldump 命令行工具。
-- 备份整个数据库:mysqldump -u root -pAa2803345646 MyShop > backup.sql
mysql -u root -p MyShop前端界面设计
项目代码下载
下载:代码与实验报告(包括平时作业的)