diff --git a/sql_script/create.sql b/sql_script/create.sql new file mode 100644 index 0000000..c4b28ab --- /dev/null +++ b/sql_script/create.sql @@ -0,0 +1,139 @@ +1.创建仓库表、完整性约束及索引: +CREATE TABLE `warehouse` ( + `warehouse_id` int NOT NULL, + `warehouse_name` varchar(50) NOT NULL, + `location` varchar(100) NOT NULL, + `capacity` int NOT NULL, + PRIMARY KEY (`warehouse_id`), + KEY `idx_warehouse_name` (`warehouse_name`), + KEY `idx_warehouse_location` (`location`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; + +2.创建职工表、完整性约束及索引: +CREATE TABLE `employee` ( + `employee_id` int NOT NULL, + `employee_name` varchar(50) NOT NULL, + `department` varchar(50) NOT NULL, + `contact_info` varchar(50) NOT NULL, + `managed_warehouse_id` int DEFAULT NULL, + PRIMARY KEY (`employee_id`), + KEY `managed_warehouse_id` (`managed_warehouse_id`), + KEY `idx_employee_name` (`employee_name`), + KEY `idx_employee_department` (`department`), + CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`managed_warehouse_id`) REFERENCES `warehouse` (`warehouse_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; + +3.创建货物表、完整性约束及索引: +CREATE TABLE `goods` ( + `goods_id` int NOT NULL, + `goods_name` varchar(50) NOT NULL, + `specification` varchar(100) NOT NULL, + `production_date` date NOT NULL, + `belonging_warehouse_id` int DEFAULT NULL, + `supplier_id` int DEFAULT NULL, + PRIMARY KEY (`goods_id`), + KEY `belonging_warehouse_id` (`belonging_warehouse_id`), + KEY `idx_goods_name` (`goods_name`), + KEY `idx_goods_supplier_id` (`supplier_id`), + CONSTRAINT `goods_ibfk_1` FOREIGN KEY (`belonging_warehouse_id`) REFERENCES `warehouse` (`warehouse_id`), + CONSTRAINT `goods_ibfk_2` FOREIGN KEY (`supplier_id`) REFERENCES `supplier` (`supplier_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; + + +4.创建供应商表、完整性约束及索引: +CREATE TABLE `supplier` ( + `supplier_id` int NOT NULL, + `supplier_name` varchar(50) NOT NULL, + `contact_method` varchar(50) NOT NULL, + `rating` int NOT NULL, + PRIMARY KEY (`supplier_id`), + KEY `idx_supplier_name` (`supplier_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +5.创建客户表、完整性约束及索引: +CREATE TABLE `customer` ( + `customer_id` int NOT NULL, + `customer_name` varchar(50) NOT NULL, + `customer_contact` varchar(50) NOT NULL, + `order_history` text, + PRIMARY KEY (`customer_id`), + KEY `idx_customer_name` (`customer_name`), + KEY `idx_customer_contact` (`customer_contact`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; + +6.创建入库记录表、完整性约束及索引: +CREATE TABLE `inboundrecord` ( + `inbound_id` int NOT NULL, + `goods_id` int DEFAULT NULL, + `warehouse_id` int DEFAULT NULL, + `quantity_in` int NOT NULL, + `inbound_date` date NOT NULL, + PRIMARY KEY (`inbound_id`), + KEY `idx_inboundrecord_goods_id` (`goods_id`), + KEY `idx_inboundrecord_warehouse_id` (`warehouse_id`), + CONSTRAINT `inboundrecord_ibfk_1` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`goods_id`), + CONSTRAINT `inboundrecord_ibfk_2` FOREIGN KEY (`warehouse_id`) REFERENCES `warehouse` (`warehouse_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; + + +7.创建出库记录表、完整性约束及索引: +CREATE TABLE `outboundrecord` ( + `outbound_id` int NOT NULL, + `goods_id` int DEFAULT NULL, + `warehouse_id` int DEFAULT NULL, + `quantity_out` int NOT NULL, + `outbound_date` date NOT NULL, + PRIMARY KEY (`outbound_id`), + KEY `idx_outboundrecord_goods_id` (`goods_id`), + KEY `idx_outboundrecord_warehouse_id` (`warehouse_id`), + CONSTRAINT `outboundrecord_ibfk_1` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`goods_id`), + CONSTRAINT `outboundrecord_ibfk_2` FOREIGN KEY (`warehouse_id`) REFERENCES `warehouse` (`warehouse_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; + +8.创建仓库设备表、完整性约束及索引: +CREATE TABLE `warehouseequipment` ( + `equipment_id` int NOT NULL, + `equipment_name` varchar(50) NOT NULL, + `description` text, + `warehouse_id` int DEFAULT NULL, + PRIMARY KEY (`equipment_id`), + KEY `idx_warehouseequipment_name` (`equipment_name`), + KEY `idx_warehouseequipment_warehouse_id` (`warehouse_id`), + CONSTRAINT `warehouseequipment_ibfk_1` FOREIGN KEY (`warehouse_id`) REFERENCES `warehouse` (`warehouse_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +9.创建运输工具表、完整性约束及索引: +CREATE TABLE `transportation` ( + `transportation_id` int NOT NULL, + `transportation_type` varchar(50) NOT NULL, + `carrying_capacity` int NOT NULL, + `status` varchar(50) NOT NULL, + PRIMARY KEY (`transportation_id`), + KEY `idx_transportation_type` (`transportation_type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; + +10.创建订单表、完整性约束及索引: +CREATE TABLE `order` ( + `order_id` int NOT NULL, + `customer_id` int DEFAULT NULL, + `goods_id` int DEFAULT NULL, + `order_quantity` int NOT NULL, + `order_date` date NOT NULL, + PRIMARY KEY (`order_id`), + KEY `idx_order_customer_id` (`customer_id`), + KEY `idx_order_goods_id` (`goods_id`), + CONSTRAINT `order_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`), + CONSTRAINT `order_ibfk_2` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`goods_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; + + + +11.创建配送关系表、完整性约束及索引: +CREATE TABLE `deliver` ( + `deliver_id` int NOT NULL, + `order_id` int DEFAULT NULL, + `transportation_id` int DEFAULT NULL, + PRIMARY KEY (`deliver_id`), + KEY `idx_deliver_order_id` (`order_id`), + KEY `idx_deliver_transportation_id` (`transportation_id`), + CONSTRAINT `deliver_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `order` (`order_id`), + CONSTRAINT `deliver_ibfk_2` FOREIGN KEY (`transportation_id`) REFERENCES `transportation` (`transportation_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; diff --git a/sql_script/create_data.sql b/sql_script/create_data.sql new file mode 100644 index 0000000..840386a --- /dev/null +++ b/sql_script/create_data.sql @@ -0,0 +1,197 @@ +仓库表: +INSERT INTO Warehouse (warehouse_id, warehouse_name, location, capacity) +VALUES + (1, '中心仓库', '上海市浦东新区 XX 路 1 号', 2000), + (2, '东区仓库', '上海市闵行区 XX 街 2 号', 1500), + (3, '南区仓库', '上海市徐汇区 XX 巷 3 号', 1800), + (4, '西区仓库', '上海市普陀区 XX 大道 4 号', 1600), + (5, '北区仓库', '上海市宝山区 XX 弄 5 号', 1400), + (6, '小件仓库', '上海市松江区 XX 号 6 号', 1000), + (7, '大件仓库', '上海市嘉定区 XX 路 7 号', 1200), + (8, '生鲜仓库', '上海市青浦区 XX 街 8 号', 800), + (9, '电子仓库', '上海市奉贤区 XX 巷 9 号', 1300), + (10, '贵重仓库', '上海市金山区 XX 大道 10 号', 500); + + +职工表: +INSERT INTO Employee (employee_id, employee_name, department, contact_info, managed_warehouse_id) +VALUES + (1, '赵强', '仓储管理部', '13812345678', 1), + (2, '孙悦', '仓储管理部', '13623456789', 2), + (3, '周峰', '仓储管理部', '13934567890', 3), + (4, '吴丽', '仓储管理部', '13345678901', 4), + (5, '郑浩', '仓储管理部', '13156789012', 5), + (6, '王敏', '仓储管理部', '13067890123', 6), + (7, '冯鑫', '仓储管理部', '13278901234', 7), + (8, '陈晨', '仓储管理部', '13489012345', 8), + (9, '钱宇', '仓储管理部', '13590123456', 9), + (10, '刘畅', '仓储管理部', '13701234567', 10), + (11, '赵裕国', '安保部', '202211070130', 1), + (12, '张健', '安保部', '202211070127', 2); + + + +货物表: +INSERT INTO Goods (goods_id, goods_name, specification, production_date, belonging_warehouse_id, supplier_id) +VALUES + (1, '联想笔记本电脑', 'i7-1260P/16G/512G SSD', '2024-05-10', 9, 1), + (2, '戴尔台式电脑', 'i5-13400/8G/256G HDD + 1T SSD', '2024-04-15', 9, 2), + (3, '惠普打印机', 'LaserJet Pro MFP M227fdw', '2024-03-20', 3, 3), + (4, '佳能相机', 'EOS R6 Mark II', '2024-02-25', 10, 4), + (5, '苹果手机', 'iPhone 15 Pro Max', '2024-09-15', 10, 5), + (6, '华为平板电脑', 'MatePad Pro 12.6', '2024-08-10', 6, 6), + (7, '小米手环', '8 Pro', '2024-07-05', 6, 7), + (8, '三星显示器', '32 寸 4K 超高清曲面屏', '2024-06-30', 9, 8), + (9, '美的空调', '壁挂式 1.5 匹变频冷暖', '2024-01-15', 7, 9), + (10, '海尔冰箱', '双开门 535L 大容量', '2024-02-05', 7, 10), + (11, '格力电扇', '落地扇 FS-3015Bh7', '2024-03-08', 7, 1), + (12, '苏泊尔电饭煲', '5L 智能 IH 电磁加热', '2024-04-02', 6, 2), + (13, '九阳豆浆机', 'DJ13B-D08EC', '2024-05-06', 6, 3), + (14, '公牛插座', '6 位总控 5 米延长线', '2024-06-12', 6, 4), + (15, '晨光文具套装', '中性笔 + 笔记本 + 便签纸等', '2024-07-18', 6, 5); + +供应商表: +INSERT INTO Supplier (supplier_id, supplier_name, contact_method, rating) +VALUES + (1, '联想科技有限公司', '010 - 88888888', 90), + (2, '戴尔计算机公司', '021 - 66666666', 85), + (3, '惠普中国有限公司', '020 - 55555555', 88), + (4, '佳能中国有限公司', '010 - 77777777', 92), + (5, '苹果公司', '021 - 99999999', 95), + (6, '华为技术有限公司', '0755 - 33333333', 93), + (7, '小米科技有限责任公司', '010 - 66666666', 89), + (8, '三星电子有限公司', '020 - 88888888', 87), + (9, '美的集团股份有限公司', '0755 - 55555555', 91), + (10, '海尔集团公司', '0532 - 77777777', 90); + + + + + +客户表: +INSERT INTO Customer (customer_id, customer_name, customer_contact, order_history) +VALUES + (1, '京东商城', '400-606-5500', '大量采购各类电子产品'), + (2, '苏宁易购', '400-836-5365', '多次购买家电产品'), + (3, '国美电器', '400-811-3333', '长期订购电脑设备'), + (4, '华为专卖店', '400-830-8300', '主要采购华为产品'), + (5, '苹果零售店', '400-666-8800', '专注苹果系列商品'), + (6, '顺电连锁', '400-678-8888', '广泛采购数码产品'), + (7, '宏图三胞', '400-999-6666', '频繁购入电脑及配件'), + (8, '迪信通手机连锁', '400-700-8899', '大量进购手机产品'), + (9, '百脑汇电脑城', '400-888-9999', '综合采购各类 IT 产品'), + (10, '永乐家电', '400-839-9333', '主要采购家电类商品'); + + + + + +入库记录表: +INSERT INTO InboundRecord (inbound_id, goods_id, warehouse_id, quantity_in, inbound_date) +VALUES + (1, 1, 9, 100, '2024-11-01'), + (2, 2, 9, 80, '2024-11-02'), + (3, 3, 3, 50, '2024-11-03'), + (4, 4, 10, 30, '2024-11-04'), + (5, 5, 10, 40, '2024-11-05'), + (6, 6, 6, 60, '2024-11-06'), + (7, 7, 6, 70, '2024-11-07'), + (8, 8, 9, 40, '2024-11-08'), + (9, 9, 7, 30, '2024-11-09'), + (10, 10, 7, 25, '2024-11-10'), + (11, 11, 7, 40, '2024-11-11'), + (12, 12, 6, 50, '2024-11-12'), + (13, 13, 6, 35, '2024-11-13'), + (14, 14, 6, 65, '2024-11-14'), + (15, 15, 6, 75, '2024-11-15'); + +出库记录表: +INSERT INTO OutboundRecord (outbound_id, goods_id, warehouse_id, quantity_out, outbound_date) +VALUES + (1, 1, 9, 20, '2024-11-16'), + (2, 2, 9, 15, '2024-11-17'), + (3, 3, 3, 10, '2024-11-18'), + (4, 4, 10, 8, '2024-11-19'), + (5, 5, 10, 12, '2024-11-20'), + (6, 6, 6, 18, '2024-11-21'), + (7, 7, 6, 22, '2024-11-22'), + (8, 8, 9, 10, '2024-11-23'), + (9, 9, 7, 8, '2024-11-24'), + (10, 10, 7, 6, '2024-11-25'), + (11, 11, 7, 10, '2024-11-26'), + (12, 12, 6, 15, '2024-11-27'), + (13, 13, 6, 10, '2024-11-28'), + (14, 14, 6, 20, '2024-11-29'), + (15, 15, 6, 25, '2024-11-30'); + +仓库设备表: +INSERT INTO WarehouseEquipment (equipment_id, equipment_name, description, warehouse_id) +VALUES + (1, '叉车A', '载重3吨电动叉车,用于搬运重物',1), + (2, '货架B', '5 层重型货架,可存放大型货物', 2), + (3, '货架C', '6 层中型货架,适合存放一般货物',3), + (4, '输送带D', '长度20米,速度0.5米/秒,用于货物传输',4), + (5, '堆垛机E', '最大堆垛高度6米,操作精准',5), + (6, '托盘F', '塑料材质,尺寸1.2x1米,承载货物',6), + (7, '叉车G', '载重2吨燃油叉车,备用设备', 7), + (8, '通风系统H', '功率5千瓦,保持仓库空气流通',8), + (9, '监控设备I', '高清摄像头16个,覆盖仓库全域',9), + (10, '消防设备J', '包含灭火器、消防栓等,保障安全',10), + (11, '照明系统K', '亮度800流明,节能环保',1), + (12, '扫码枪L', '无线蓝牙连接,快速扫描货物信息',2); + + +运输工具表: +INSERT INTO Transportation (transportation_id, transportation_type, carrying_capacity, status) +VALUES + (1, '厢式货车',10, '可用'), + (2, '平板货车',8, '可用'), + (3, '冷藏车',5, '维修中'), + (4, '面包车',1, '可用'), + (5, '三轮车',0.5, '可用'), + (6, '半挂车',15, '调度中'), + (7, '小型货车',3, '可用'), + (8, '叉车(运输型)', 2, '可用'), + (9, '电动搬运车',1, '可用'), + (10, '重型卡车',20, '可用'), + (11, '轻型卡车',4, '可用'), + (12, '皮卡车',0.8, '可用'); + + + +订单表: +INSERT INTO `Order` (order_id, customer_id, goods_id, order_quantity, order_date) +VALUES + (1, 1, 1, 30, '2024-12-01'), + (2, 2, 9, 20, '2024-12-02'), + (3, 3, 2, 15, '2024-12-03'), + (4, 4, 6, 10, '2024-12-04'), + (5, 5, 5, 25, '2024-12-05'), + (6, 6, 8, 18, '2024-12-06'), + (7, 7, 1, 12, '2024-12-07'), + (8, 8, 5, 8, '2024-12-08'), + (9, 9, 3, 10, '2024-12-09'), + (10, 10, 10, 15, '2024-12-10'), + (11, 1, 7, 20, '2024-12-11'), + (12, 2, 11, 15, '2024-12-12'), + (13, 3, 4, 10, '2024-12-13'), + (14, 4, 13, 8, '2024-12-14'), + (15, 5, 15, 12, '2024-12-15'); + +配送关系表: +INSERT INTO deliver (deliver_id, order_id, transportation_id) +VALUES + (1, 1, 1), + (2, 2, 2), + (3, 3, 4), + (4, 4, 6), + (5, 5, 7), + (6, 6, 8), + (7, 7, 1), + (8, 8, 4), + (9, 9, 5), + (10, 10, 2), + (11, 11, 7), + (12, 12, 10), + (13, 13, 11), + (14, 14, 9), diff --git a/sql_script/create_idx.sql b/sql_script/create_idx.sql new file mode 100644 index 0000000..56c206e --- /dev/null +++ b/sql_script/create_idx.sql @@ -0,0 +1,49 @@ +1. 在 warehouse 表添加按容量范围查询的索引 +如果业务中经常需要根据仓库容量范围来查找合适的仓库,可添加如下索引: +CREATE INDEX idx_warehouse_capacity_range ON `warehouse` (`capacity`); + + +2. 在 employee 表添加按部门和管理仓库联合查询的索引 +假设经常要查找某个部门下管理特定仓库的职工,添加此索引能提升查询效率: +CREATE INDEX idx_employee_department_warehouse ON `employee` (`department`, `managed_warehouse_id`); + + +3. 在 goods 表添加按生产日期范围查询的索引 +当需要统计某时间段内生产的货物相关信息时,这个索引会很有用: +CREATE INDEX idx_goods_production_date_range ON `goods` (`production_date`); + + +4. 在 supplier 表添加按评级范围查询的索引 +例如查询评级在某个区间内的供应商时,该索引可加速查询: +CREATE INDEX idx_supplier_rating_range ON `supplier` (`rating`); + + +5. 在 customer 表添加按客户名称和联系电话联合查询的索引 +若业务中有根据客户名称模糊匹配且核对联系电话来查找客户的场景,可创建此索引: +CREATE INDEX idx_customer_name_contact ON `customer` (`customer_name`, `customer_contact`); + + +6. 在 inboundrecord 表添加按入库日期和入库数量联合查询的索引 +方便统计不同时间段内入库数量相关情况,比如查看某时间段内入库量的变化趋势等: +CREATE INDEX idx_inboundrecord_date_quantity ON `inboundrecord` (`inbound_date`, `quantity_in`); + + +7. 在 outboundrecord 表添加按出库日期和货物 ID 联合查询的索引 +可以快速查询某货物在不同时间的出库情况,用于分析货物销售出库规律等: +CREATE INDEX idx_outboundrecord_date_goods ON `outboundrecord` (`outbound_date`, `goods_id`); + + +8. 在 warehouseequipment 表添加按设备名称和所属仓库联合查询的索引 +当需要查找某个仓库内特定设备时,该索引有助于提高查询速度: +CREATE INDEX idx_warehouseequipment_name_warehouse ON `warehouseequipment` (`equipment_name`, `warehouse_id`); + + +9. 在 transportation 表添加按运输工具类型和运载能力联合查询的索引 +例如要查找满足一定运载能力的特定类型运输工具时,能优化查询: +CREATE INDEX idx_transportation_type_capacity ON `transportation` (`transportation_type`, `carrying_capacity`); + + +10. 在 order 表添加按客户 ID 和订单日期联合查询的索引 +方便查看某个客户在不同时间段内的订单情况,利于做客户订单分析: +CREATE INDEX idx_order_customer_date ON `order` (`customer_id`, `order_date`); + diff --git a/sql_script/create_procedure.sql b/sql_script/create_procedure.sql new file mode 100644 index 0000000..18ca103 --- /dev/null +++ b/sql_script/create_procedure.sql @@ -0,0 +1,86 @@ +3.5.6存储过程创建脚本 +存储过程一:查询指定仓库的库存总量 +这个存储过程用于获取指定仓库中所有货物的库存总量,通过关联 goods 表和 warehouse 表以及考虑入库和出库记录来计算。 +DELIMITER // +CREATE PROCEDURE GetWarehouseInventory(IN warehouseId INT, OUT totalInventory INT) +BEGIN + SELECT SUM(i.quantity_in - o.quantity_out) + INTO totalInventory + FROM goods g + LEFT JOIN inboundrecord i ON g.goods_id = i.goods_id + LEFT JOIN outboundrecord o ON g.goods_id = o.goods_id + WHERE g.belonging_warehouse_id = warehouseId + GROUP BY g.belonging_warehouse_id; +END // +DELIMITER ; + +存储过程二:查询指定供应商供应的货物列表 +该存储过程能够返回由特定供应商提供的所有货物信息,通过关联 goods 表和 supplier 表实现。 +DELIMITER // +CREATE PROCEDURE GetGoodsBySupplier(IN supplierId INT) +BEGIN + SELECT g.* + FROM goods g + WHERE g.supplier_id = supplierId; +END // +DELIMITER ; + +存储过程三:查询指定客户的历史订单详情 +用于获取指定客户的所有历史订单详细信息,涉及关联 order 表、customer 表以及其他相关表(比如关联 goods 表获取货物详情等,可按需扩展)。 +DELIMITER // +CREATE PROCEDURE GetCustomerOrderHistory(IN customerId INT) +BEGIN + SELECT o.order_id, o.order_date, o.order_quantity, g.goods_name + FROM `order` o + JOIN customer c ON o.customer_id = c.customer_id + JOIN goods g ON o.goods_id = g.goods_id + WHERE c.customer_id = customerId; +END // +DELIMITER ; + +存储过程四:更新货物所属仓库 +当需要将某些货物转移到新的仓库时,可以使用这个存储过程来更新 goods 表中货物的 belonging_warehouse_id 字段。 +DELIMITER // +CREATE PROCEDURE UpdateGoodsWarehouse(IN goodsId INT, IN newWarehouseId INT) +BEGIN + UPDATE goods + SET belonging_warehouse_id = newWarehouseId + WHERE goods_id = goodsId; +END // +DELIMITER ; + +存储过程五:查询指定日期范围内的入库记录汇总 +此存储过程可以统计在给定日期范围内的入库记录汇总信息,比如按仓库或者按货物等维度汇总入库数量等(以下示例简单按仓库汇总,可按需扩展)。 +DELIMITER // +CREATE PROCEDURE GetInboundRecordsByDateRange(IN startDate DATE, IN endDate DATE) +BEGIN + SELECT g.belonging_warehouse_id, SUM(i.quantity_in) AS total_inbound_quantity + FROM inboundrecord i + JOIN goods g ON i.goods_id = g.goods_id + WHERE i.inbound_date BETWEEN startDate AND endDate + GROUP BY g.belonging_warehouse_id; +END // +DELIMITER ; + +存储过程六:查询可用运输工具列表 +用于获取当前处于可用状态的所有运输工具信息,直接从 transportation 表中筛选出状态为 “可用” 的记录。 +DELIMITER // +CREATE PROCEDURE GetAvailableTransportation() +BEGIN + SELECT * + FROM transportation + WHERE status = '可用'; +END // +DELIMITER ; + +存储过程七:查询某仓库内特定设备详情 +若要查看某个仓库中配备的特定设备详细信息,可通过这个存储过程实现,关联 warehouseequipment 表和 warehouse 表来查询。 +DELIMITER // +CREATE PROCEDURE GetWarehouseEquipmentDetails(IN warehouseId INT, IN equipmentName VARCHAR(50)) +BEGIN + SELECT we.* + FROM warehouseequipment we + JOIN warehouse w ON we.warehouse_id = w.warehouse_id + WHERE w.warehouse_id = warehouseId AND we.equipment_name = equipmentName; +END // +DELIMITER ; diff --git a/sql_script/delete.sql b/sql_script/delete.sql new file mode 100644 index 0000000..3a1af35 --- /dev/null +++ b/sql_script/delete.sql @@ -0,0 +1,91 @@ +1. 删除指定仓库 +需求:删除 “小件仓库”(warehouse_id = 6)以及与之相关的所有关联数据(例如该仓库对应的货物、入库记录、出库记录等)。由于存在外键约束,需要先删除关联表中的相关数据或者解除外键约束后再删除仓库记录,这里假设先删除关联数据。以下是删除入库记录、出库记录、货物表中对应记录以及仓库记录的脚本示例。 +删除入库记录脚本: +DELETE FROM inboundrecord +WHERE warehouse_id = 6; + +删除出库记录脚本: +DELETE FROM outboundrecord +WHERE warehouse_id = 6; + +删除货物表中对应记录脚本: +DELETE FROM goods +WHERE belonging_warehouse_id = 6; + +删除仓库记录脚本: +DELETE FROM warehouse +WHERE warehouse_id = 6; + +2. 删除指定职工 +需求:删除职工 “张健”(employee_id = 12)的信息。 +更新脚本: +DELETE FROM employee +WHERE employee_id = 12; + +3. 删除指定供应商 +需求:删除 “小米科技有限责任公司”(supplier_id = 7)以及该供应商相关的货物信息(先删除货物表中对应记录,再删除供应商记录,以下是分步骤脚本示例)。 +删除货物表中对应记录脚本: +DELETE FROM goods +WHERE supplier_id = 7; + +删除供应商记录脚本: +DELETE FROM supplier +WHERE supplier_id = 7; +4. 删除指定货物 +需求:删除 “苏泊尔电饭煲”(goods_id = 12)以及与之相关的入库、出库记录(同样先删除关联记录,再删除货物记录)。 +删除入库记录脚本: +DELETE FROM inboundrecord +WHERE goods_id = 12; + +删除出库记录脚本: +DELETE FROM outboundrecord +WHERE goods_id = 12; + +删除货物记录脚本: +DELETE FROM goods +WHERE goods_id = 12; + + +5. 删除指定客户 +需求:删除 “宏图三胞”(customer_id = 7)以及该客户相关的订单记录(先删除订单,再删除客户记录)。 +删除订单记录脚本: +DELETE FROM `order` +WHERE customer_id = 7; + +删除客户记录脚本: +DELETE FROM customer +WHERE customer_id = 7; + + +6. 删除指定入库记录 +需求:删除入库编号为 12(inbound_id = 12)的入库记录。 +更新脚本: +DELETE FROM inboundrecord +WHERE inbound_id = 12; + +7. 删除指定出库记录 +需求:删除出库编号为 13(outbound_id = 13)的出库记录。 +更新脚本: +DELETE FROM outboundrecord +WHERE outbound_id = 13; + +8. 删除 +指定仓库设备 +需求:删除 “扫码枪 L”(equipment_id = 12)的仓库设备记录。 +更新脚本: +DELETE FROM warehouseequipment +WHERE equipment_id = 12; + + +9. 删除指定运输工具 +需求:删除 “三轮车”(transportation_id = 5)的运输工具记录。 +更新脚本: +DELETE FROM transportation +WHERE transportation_id = 5; + + +10. 删除指定配送关系 +需求:删除配送编号为 9(deliver_id = 9)的配送关系记录。 +更新脚本: +DELETE FROM deliver +WHERE deliver_id = 9; diff --git a/sql_script/query.sql b/sql_script/query.sql new file mode 100644 index 0000000..cfbf4fc --- /dev/null +++ b/sql_script/query.sql @@ -0,0 +1,182 @@ +(一)比较条件查询 +1. 查询所有容量大于 1000 的仓库信息 +查询需求:从仓库表(Warehouse)中找出容量超过 1000 的仓库的详细信息,包括仓库编号、仓库名称、位置和容量。 +查询语句: +SELECT warehouse_id, warehouse_name, location, capacity +FROM Warehouse +WHERE capacity > 1000; +2. 查询员工编号大于 5 的员工信息 +查询需求:从员工表(Employee)里获取员工编号大于 5 的员工的相关记录,如员工姓名、所在部门、联系方式以及管理的仓库编号。 +查询语句: +SELECT employee_name, department, contact_info, managed_warehouse_id +FROM Employee + WHERE employee_id > 5; + +(二)集合比较查询 +1. 查询供应商编号在集合(1, 3, 5)中的供应商信息 +查询需求:从供应商表(Supplier)筛选出供应商编号为 1、3、5 的供应商的详细情况,包含供应商编号、名称、联系方式以及评级。 +查询语句: +SELECT supplier_id, supplier_name, contact_method, rating +FROM Supplier +WHERE supplier_id IN (1, 3, 5); + + +2. 查询属于仓库编号集合(3, 6, 9)中的货物信息 +查询需求:从货物表(Goods)中查找出存放在仓库编号为 3、6、9 中的货物记录,显示货物编号、货物名称、规格以及所属供应商编号。 +查询语句: +SELECT goods_id, goods_name, specification, supplier_id +FROM Goods +WHERE belonging_warehouse_id IN (3, 6, 9); + + +(三)范围比较查询 +1. 查询入库日期在 2024-11-01 至 2024-11-10 之间的入库记录信息 +查询需求:从入库记录表(InboundRecord)里获取入库日期处于 2024 年 11 月 1 日到 2024 年 11 月 10 日这个时间段内的所有入库记录,包含入库记录编号、货物编号、入库仓库编号、入库数量以及入库日期。 +查询语句: +SELECT inbound_id, goods_id, warehouse_id, quantity_in, inbound_date +FROM InboundRecord +WHERE inbound_date BETWEEN '2024-11-01' AND '2024-11-10'; + + +2. 查询订单数量在 10 到 20 之间的订单信息 +查询需求:从订单表(Order)中查询出订单数量介于 10 到 20 之间的订单详情,涵盖订单编号、客户编号、货物编号、订单数量以及下单日期。 +查询语句: +SELECT order_id, customer_id, goods_id, order_quantity, order_date +FROM `Order` +WHERE order_quantity BETWEEN 10 AND 20; +(四)字符串相似比较查询 +1. 查询客户名称中包含 “电” 字的客户信息 +查询需求:在客户表(Customer)里查找客户名称含有 “电” 字的客户记录,展示客户编号、客户名称、客户联系方式以及订单历史。 +查询语句: +SELECT customer_id, customer_name, customer_contact, order_history +FROM Customer +WHERE customer_name LIKE '%电%'; + + +2. 查询货物名称以 “华为” 开头的货物信息 +查询需求:从货物表(Goods)中检索出货物名称是以 “华为” 开头的货物详细情况,包括货物编号、货物名称、规格、生产日期、所属仓库编号以及供应商编号。 +查询语句: +SELECT goods_id, goods_name, specification, production_date, belonging_warehouse_id, supplier_id +FROM Goods +WHERE goods_name LIKE '华为%'; + + +(五)多表连接查询 +1. 查询每个仓库及其对应的员工信息 +查询需求:将仓库表(Warehouse)和员工表(Employee)进行连接,查询出每个仓库对应的负责员工信息,显示仓库名称、员工姓名以及员工所在部门。 +查询语句: +SELECT w.warehouse_name, e.employee_name, e.department +FROM Warehouse w +JOIN Employee e ON w.warehouse_id = e.managed_warehouse_id; +2. 查询每个订单对应的客户名称和货物名称 +查询需求:通过订单表(Order)、客户表(Customer)以及货物表(Goods)进行多表连接,获取每个订单对应的客户名称以及所订购的货物名称,展示订单编号、客户名称、货物名称。 +查询语句: +SELECT o.order_id, c.customer_name, g.goods_name +FROM `Order` o +JOIN Customer c ON o.customer_id = c.customer_id +JOIN Goods g ON o.goods_id = g.goods_id; + + + + +3.查询每个仓库中货物的入库数量以及对应的负责员工姓名 +查询需求:结合仓库表(Warehouse)、入库记录表(InboundRecord)以及员工表(Employee),统计每个仓库中货物的入库数量,并显示对应的仓库名称以及负责该仓库的员工姓名,以此了解各仓库的入库情况以及负责人信息。 +查询语句: +SELECT w.warehouse_name, e.employee_name, SUM(ir.quantity_in) AS total_quantity_in +FROM Warehouse w +JOIN Employee e ON w.warehouse_id = e.managed_warehouse_id +JOIN InboundRecord ir ON w.warehouse_id = ir.warehouse_id +GROUP BY w.warehouse_name, e.employee_name; + + + + + + +(六)嵌套查询 +1. 查询供应了订单数量大于 15 的货物的供应商信息 +查询需求:先在订单表(Order)中找出订单数量大于 15 的货物编号,然后依据这些货物编号在货物表(Goods)中获取对应的供应商编号,最后从供应商表(Supplier)里查询出这些供应商的详细信息,包含供应商编号、供应商名称、联系方式以及评级。 +查询语句: +SELECT supplier_id, supplier_name, contact_method, ratingFROM SupplierWHERE supplier_id IN ( + SELECT supplier_id + FROM Goods + WHERE goods_id IN ( + SELECT goods_id + FROM `Order` + WHERE order_quantity > 15 +) +); + +2. 查询管理了有货物入库的仓库的员工信息 +查询需求:先从入库记录表(InboundRecord)获取有货物入库的仓库编号,再根据这些仓库编号在员工表(Employee)中查找管理这些仓库的员工信息,显示员工编号、员工姓名以及所在部门。 +查询语句: +SELECT employee_id, employee_name, departmentFROM EmployeeWHERE managed_warehouse_id IN ( + SELECT DISTINCT warehouse_id +FROM InboundRecord +); + +3.查询订单总量排名前 3 的客户信息 +查询需求:先统计每个客户的订单总量,然后按照订单总量降序排序,获取订单总量排名前 3 的客户的详细信息,包括客户编号、客户名称、客户联系方式以及订单历史。 +查询语句: +SELECT c.customer_id, c.customer_name, c.customer_contact, c.order_history +FROM Customer c +JOIN ( + SELECT customer_id, COUNT(order_id) AS total_orders + FROM `Order` + GROUP BY customer_id + ORDER BY total_orders DESC + LIMIT 3 +) AS top_customers ON c.customer_id = top_customers.customer_id; + + +(七)EXISTS 查询 +1. 查询有员工管理的仓库信息 +查询需求:使用 EXISTS 子句判断是否存在管理各个仓库的员工,如果存在,则查询出这些仓库的详细信息,包括仓库编号、仓库名称、位置以及容量。 +查询语句: +SELECT warehouse_id, warehouse_name, location, capacityFROM Warehouse wWHERE EXISTS ( + SELECT 1 + FROM Employee e +WHERE e.managed_warehouse_id = w.warehouse_id +); + + +2. 查询有货物出库的仓库信息 +查询需求:通过 EXISTS 子句检查是否有货物从各个仓库出库,如果存在这样的仓库,则获取其仓库编号、仓库名称、位置以及容量信息。 +查询语句: +SELECT warehouse_id, warehouse_name, location, capacityFROM Warehouse wWHERE EXISTS ( + SELECT 1 + FROM OutboundRecord o +WHERE o.warehouse_id = w.warehouse_id +); + + +(八)其他类型查询示例 +1.查询每个仓库的货物入库总量(使用分组和聚合函数) +查询需求:按照仓库编号对入库记录表(InboundRecord)进行分组,统计每个仓库的货物入库总数量,并显示仓库编号以及对应的入库总量。 +查询语句: +SELECT warehouse_id, SUM(quantity_in) AS total_quantity_in +FROM InboundRecord +GROUP BY warehouse_id; + +2. 查询每种货物的出库次数(使用分组和聚合函数) +查询需求:依据货物编号对出库记录表(OutboundRecord)进行分组,统计每种货物的出库次数,展示货物编号以及对应的出库次数。 +查询语句: +SELECT goods_id, COUNT(outbound_id) AS outbound_times +FROM OutboundRecord +GROUP BY goods_id; +3. 查询使用了 “厢式货车” 进行配送的订单信息(多表连接与条件筛选结合) +查询需求:通过订单表(Order)、配送关系表(deliver)以及运输工具表(Transportation)进行多表连接,筛选出使用 “厢式货车” 进行配送的订单详情,包含订单编号、客户编号、货物编号以及下单日期。 +查询语句: +SELECT o.order_id, o.customer_id, o.goods_id, o.order_date +FROM `Order` o +JOIN deliver d ON o.order_id = d.order_id +JOIN Transportation t ON d.transportation_id = t.transportation_id +WHERE t.transportation_type = '厢式货车'; + +4. 查询客户订购过的所有不同货物名称(去重查询) +查询需求:从订单表(Order)、客户表(Customer)以及货物表(Goods)进行多表连接,获取所有客户订购过的不同货物名称,去除重复的货物名称记录。 +查询语句: +SELECT DISTINCT g.goods_name +FROM `Order` o +JOIN Customer c ON o.customer_id = c.customer_id +JOIN Goods g ON o.goods_id = g.goods_id; diff --git a/sql_script/root.sql b/sql_script/root.sql new file mode 100644 index 0000000..2ae8a42 --- /dev/null +++ b/sql_script/root.sql @@ -0,0 +1,33 @@ +-- 创建管理员用户 +CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin_password'; +-- 授予管理员所有权限(针对test数据库) +GRANT ALL PRIVILEGES ON test.* TO 'admin'@'localhost' WITH GRANT OPTION; +FLUSH PRIVILEGES; + +-- 创建仓库操作员用户 +CREATE USER 'warehouse_operator'@'localhost' IDENTIFIED BY 'operator_password'; +-- 授予仓库操作员相关表权限 +GRANT SELECT, UPDATE ON test.warehouse TO 'warehouse_operator'@'localhost'; +GRANT SELECT, UPDATE ON test.employee TO 'warehouse_operator'@'localhost'; +GRANT SELECT, INSERT, UPDATE, DELETE ON test.goods TO 'warehouse_operator'@'localhost'; +GRANT INSERT, UPDATE, DELETE, SELECT ON test.inboundrecord TO 'warehouse_operator'@'localhost'; +GRANT INSERT, UPDATE, DELETE, SELECT ON test.outboundrecord TO 'warehouse_operator'@'localhost'; +GRANT INSERT, UPDATE, DELETE, SELECT ON test.warehouseequipment TO 'warehouse_operator'@'localhost'; +FLUSH PRIVILEGES; + +-- 创建普通查询用户 +CREATE USER 'query_user'@'localhost' IDENTIFIED BY 'query_password'; +-- 授予普通查询用户查询权限 +GRANT SELECT ON test.warehouse TO 'query_user'@'localhost'; +GRANT SELECT ON test.employee TO 'query_user'@'localhost'; +GRANT SELECT ON test.goods TO 'query_user'@'localhost'; +GRANT SELECT ON test.supplier TO 'query_user'@'localhost'; +GRANT SELECT ON test.customer TO 'query_user'@'localhost'; +GRANT SELECT ON test.inboundrecord TO 'query_user'@'localhost'; +GRANT SELECT ON test.outboundrecord TO 'query_user'@'localhost'; +GRANT SELECT ON test.warehouseequipment TO 'query_user'@'localhost'; +GRANT SELECT ON test.transportation TO 'query_user'@'localhost'; +GRANT SELECT ON test.order TO 'query_user'@'localhost'; +GRANT SELECT ON test.deliver TO 'query_user'@'localhost'; +FLUSH PRIVILEGES; + diff --git a/sql_script/trigger.sql b/sql_script/trigger.sql new file mode 100644 index 0000000..2b5ef9d --- /dev/null +++ b/sql_script/trigger.sql @@ -0,0 +1,138 @@ +3.5.7触发器创建脚本 +1. 防止货物入库数量为负数的触发器(插入前检查) +DELIMITER // +CREATE TRIGGER check_inbound_quantity_before_insert +BEFORE INSERT ON inboundrecord +FOR EACH ROW +BEGIN + IF NEW.quantity_in < 0 THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '入库数量不能为负数'; + END IF; +END // +DELIMITER ; + +2. 防止货物入库数量为负数的触发器(更新前检查) +DELIMITER // +CREATE TRIGGER check_inbound_quantity_before_update +BEFORE UPDATE ON inboundrecord +FOR EACH ROW +BEGIN + DECLARE old_quantity_in INT; + SELECT quantity_in INTO old_quantity_in FROM inboundrecord WHERE inbound_id = OLD.inbound_id; + IF NEW.quantity_in < 0 THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '入库数量不能为负数'; + END IF; +END // +DELIMITER ; + + +3. 防止货物出库数量大于库存数量的触发器(插入前检查) +DELIMITER // +CREATE TRIGGER check_outbound_quantity_before_insert +BEFORE INSERT ON outboundrecord +FOR EACH ROW +BEGIN + DECLARE current_stock INT; + SELECT SUM(i.quantity_in - o.quantity_out) + INTO current_stock + FROM goods g + LEFT JOIN inboundrecord i ON g.goods_id = i.goods_id + LEFT JOIN outboundrecord o ON g.goods_id = o.goods_id + WHERE g.goods_id = NEW.goods_id + GROUP BY g.goods_id; + + IF NEW.quantity_out > current_stock OR current_stock IS NULL THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '出库数量不能大于库存数量'; + END IF; +END // +DELIMITER ; + +4. 防止货物出库数量大于库存数量的触发器(更新前检查) +DELIMITER // +CREATE TRIGGER check_outbound_quantity_before_update +BEFORE UPDATE ON outboundrecord +FOR EACH ROW +BEGIN + DECLARE current_stock INT; + SELECT SUM(i.quantity_in - o.quantity_out) + INTO current_stock + FROM goods g + LEFT JOIN inboundrecord i ON g.goods_id = i.goods_id + LEFT JOIN outboundrecord o ON g.goods_id = o.goods_id + WHERE g.goods_id = NEW.goods_id + GROUP BY g.goods_id; + + IF NEW.quantity_out > current_stock OR current_stock IS NULL THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '出库数量不能大于库存数量'; + END IF; +END // +DELIMITER ; + +5. 在更新货物所属仓库时同步更新相关库存记录的触发器 +DELIMITER // +CREATE TRIGGER update_warehouse_in_stock_records +AFTER UPDATE ON goods +FOR EACH ROW +BEGIN + IF NEW.belonging_warehouse_id <> OLD.belonging_warehouse_id THEN + UPDATE inboundrecord + SET warehouse_id = NEW.belonging_warehouse_id + WHERE goods_id = NEW.goods_id; + + UPDATE outboundrecord + SET warehouse_id = NEW.belonging_warehouse_id + WHERE goods_id = NEW.goods_id; + END IF; +END // +DELIMITER ; + +6. 当删除供应商时,同时删除其对应货物记录的触发器 +DELIMITER // +CREATE TRIGGER delete_goods_when_supplier_deleted +AFTER DELETE ON supplier +FOR EACH ROW +BEGIN + DELETE FROM goods + WHERE supplier_id = OLD.supplier_id; +END // +DELIMITER ; + +7. 在订单表插入新订单时,自动更新对应货物库存的触发器 +DELIMITER // +CREATE TRIGGER update_stock_on_order_insert +AFTER INSERT ON `order` +FOR EACH ROW +BEGIN + DECLARE current_stock INT; + SELECT SUM(i.quantity_in - o.quantity_out) + INTO current_stock + FROM goods g + LEFT JOIN inboundrecord i ON g.goods_id = i.goods_id + LEFT JOIN outboundrecord o ON g.goods_id = o.goods_id + WHERE g.goods_id = NEW.goods_id + GROUP BY g.goods_id; + + SET current_stock = current_stock - NEW.order_quantity; + IF current_stock < 0 THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库存不足,无法生成订单'; + ELSE + UPDATE goods + SET inventory_quantity = current_stock + WHERE goods_id = NEW.goods_id; + END IF; +END // +DELIMITER ; + +8. 当运输工具状态变更为 “维修中” 时,记录变更时间的触发器 +假设你已经创建了一个名为 transportation_status_change_history 的表,用于记录运输工具状态变更历史,表结构包含 transportation_id(运输工具编号)、change_time(变更时间)等字段,以下是对应的触发器: +DELIMITER // +CREATE TRIGGER record_transportation_status_change +AFTER UPDATE ON transportation +FOR EACH ROW +BEGIN + IF NEW.status = '维修中' AND OLD.status <> '维修中' THEN + INSERT INTO transportation_status_change_history (transportation_id, change_time) + VALUES (NEW.transportation_id, NOW()); + END IF; +END // +DELIMITER ; diff --git a/sql_script/update.sql b/sql_script/update.sql new file mode 100644 index 0000000..ea389e1 --- /dev/null +++ b/sql_script/update.sql @@ -0,0 +1,70 @@ +(一)UPDATE 操作需求及脚本 +1. 更新仓库容量 +需求:将 “中心仓库”(warehouse_id = 1)的容量增加 500。 +更新脚本: +UPDATE warehouse +SET capacity = capacity + 500 +WHERE warehouse_id = 1; + +2. 更新职工所在部门 +需求:将职工 “赵裕国”(employee_id = 11)的部门从 “安保部” 更改为 “后勤部”。 +更新脚本: +UPDATE employee +SET department = '后勤部' +WHERE employee_id = 11; + +3. 更新供应商评级 +需求:将 “联想科技有限公司”(supplier_id = 1)的评级调整为 92。 +更新脚本: +UPDATE supplier +SET rating = 92 +WHERE supplier_id = 1; + +4. 更新货物所属仓库 +需求:将 “格力电扇”(goods_id = 11)的所属仓库改为 “北区仓库”(warehouse_id = 5)。 +更新脚本: +UPDATE goods +SET belonging_warehouse_id = 5 +WHERE goods_id = 11; + +5. 更新客户联系信息 +需求:将 “京东商城”(customer_id = 1)的客户联系电话更新为 “400-123-4567”。 +更新脚本: +UPDATE customer +SET customer_contact = '400-123-4567' +WHERE customer_id = 1; + +6. 更新入库记录的入库数量 +需求:将入库记录中入库编号为 1(inbound_id = 1)的货物入库数量增加 20。 +更新脚本: +UPDATE inboundrecord +SET quantity_in = quantity_in + 20 +WHERE inbound_id = 1; + +7. 更新出库记录的出库日期 +需求:将出库记录中出库编号为 5(outbound_id = 5)的出库日期修改为 '2024-12-21'。 +更新脚本: +UPDATE outboundrecord +SET outbound_date = '2024-12-21' +WHERE outbound_id = 5; +8. 更新仓库设备的描述 +需求:将 “叉车 A”(equipment_id = 1)的设备描述更新为 “载重 3.5 吨电动叉车,用于高效搬运重物”。 +更新脚本: +UPDATE warehouseequipment +SET description = '载重 3.5 吨电动叉车,用于高效搬运重物' +WHERE equipment_id = 1; +9. 更新运输工具的状态 +需求:将 “平板货车”(transportation_id = 2)的状态更改为 “已派出”。 +更新脚本: +UPDATE transportation +SET status = '已派出' +WHERE transportation_id = 2; + + +10. 更新订单的订购数量 +需求:将订单编号为 3(order_id = 3)的订购数量修改为 20。 +更新脚本: +UPDATE `order` +SET order_quantity = 20 +WHERE order_id = 3; + diff --git a/sql_script/view.sql b/sql_script/view.sql new file mode 100644 index 0000000..4123339 --- /dev/null +++ b/sql_script/view.sql @@ -0,0 +1,114 @@ +3.5.4视图创建脚本; +1. 仓库及对应员工信息视图(warehouse_employee_info) +涉及表:仓库表(Warehouse)、员工表(Employee) +关联关系: +通过 Warehouse 表的 warehouse_id 字段和 Employee 表的 managed_warehouse_id 字段进行连接,以此关联每个仓库与管理该仓库的员工信息。 +功能说明:用于查询出每个仓库对应的负责员工信息,展示仓库名称、员工姓名以及员工所在部门,方便直观查看仓库与员工的对应关系。 +CREATE VIEW warehouse_employee_info AS +SELECT w.warehouse_name, e.employee_name, e.department +FROM Warehouse w +JOIN Employee e ON w.warehouse_id = e.managed_warehouse_id; + +2. 订单对应客户及货物名称视图(order_customer_goods_info) +涉及表:订单表(Order)、客户表(Customer)、货物表(Goods) +关联关系:先是通过 Order 表的 customer_id 字段与 Customer 表的 customer_id 字段连接,以确定订单对应的客户;再通过 Order 表的 goods_id 字段和 Goods 表的 goods_id 字段连接,来明确订单对应的货物。 +功能说明:获取每个订单对应的客户名称以及所订购的货物名称,展示订单编号、客户名称、货物名称,便于了解订单详情中客户与货物的关联情况。 +CREATE VIEW order_customer_goods_info AS +SELECT o.order_id, c.customer_name, g.goods_name +FROM `Order` o +JOIN Customer c ON o.customer_id = c.customer_id +JOIN Goods g ON o.goods_id = g.goods_id; + +3. 仓库入库情况及负责人视图(warehouse_inbound_quantity_employee) +涉及表:仓库表(Warehouse)、员工表(Employee)、入库记录表(InboundRecord) +关联关系: +首先利用 Warehouse 表的 warehouse_id 字段和 Employee 表的 managed_warehouse_id 字段关联仓库与负责员工;然后通过 Warehouse 表的 warehouse_id 字段与 InboundRecord 表的 warehouse_id 字段连接,将仓库与入库记录关联起来。 +功能说明:统计每个仓库中货物的入库数量,并显示对应的仓库名称以及负责该仓库的员工姓名,以此了解各仓库的入库情况以及负责人信息,对仓库运营管理有辅助作用。 +CREATE VIEW warehouse_inbound_quantity_employee AS +SELECT w.warehouse_name, e.employee_name, SUM(ir.quantity_in) AS total_quantity_in +FROM Warehouse w +JOIN Employee e ON w.warehouse_id = e.managed_warehouse_id +JOIN InboundRecord ir ON w.warehouse_id = ir.warehouse_id +GROUP BY w.warehouse_name, e.employee_name; + +4. 供应高订单量货物的供应商信息视图(suppliers_for_high_quantity_orders) +涉及表:供应商表(Supplier)、货物表(Goods)、订单表(Order) +关联关系: +先是在 Order 表中依据条件筛选出订单数量大于 15 的货物编号,然后在 Goods 表中通过货物编号关联找到对应的供应商编号,最后在 Supplier 表中基于供应商编号获取相应供应商信息,是一种嵌套的多表关联逻辑。 +功能说明:用于查询供应了订单数量大于 15 的货物的供应商信息,包含供应商编号、供应商名称、联系方式以及评级,可帮助分析优质供应商情况。 +CREATE VIEW suppliers_for_high_quantity_orders AS +SELECT supplier_id, supplier_name, contact_method, rating +FROM Supplier +WHERE supplier_id IN ( + SELECT supplier_id + FROM Goods + WHERE goods_id IN ( + SELECT goods_id + FROM `Order` + WHERE order_quantity > 15 + ) +); + +5. 管理有货物入库仓库的员工信息视图(employees_managing_inbound_warehouses) +涉及表:员工表(Employee)、入库记录表(InboundRecord) +关联关系:从 InboundRecord 表中获取有货物入库的仓库编号,然后在 Employee 表中通过 managed_warehouse_id 字段去匹配这些仓库编号,以此找出管理有货物入库仓库的员工信息。 +功能说明:方便查询管理了有货物入库的仓库的员工信息,展示员工编号、员工姓名以及所在部门,有助于了解员工工作涉及的仓库动态。 +CREATE VIEW employees_managing_inbound_warehouses AS +SELECT employee_id, employee_name, department +FROM Employee +WHERE managed_warehouse_id IN ( + SELECT DISTINCT warehouse_id + FROM InboundRecord +); + +6. 订单总量排名前 3 的客户信息视图(top_3_customers_by_orders) +涉及表:客户表(Customer)、订单表(Order) +关联关系:先在 Order 表中按 customer_id 分组统计每个客户的订单总量,然后按照订单总量降序排序并取前 3 条记录,得到的结果再与 Customer 表通过 customer_id 字段进行连接,以获取对应客户的详细信息。 +功能说明:能够查询出订单总量排名前 3 的客户的详细信息,包括客户编号、客户名称、客户联系方式以及订单历史,有助于聚焦重点客户情况。 +CREATE VIEW top_3_customers_by_orders AS +SELECT c.customer_id, c.customer_name, c.customer_contact, c.order_history +FROM Customer c +JOIN ( + SELECT customer_id, COUNT(order_id) AS total_orders + FROM `Order` + GROUP BY customer_id + ORDER BY total_orders DESC + LIMIT 3 +) AS top_customers ON c.customer_id = top_customers.customer_id; + +7. 有员工管理的仓库信息视图(warehouses_with_managed_employees) +涉及表:仓库表(Warehouse)、员工表(Employee)关联关系: +使用 EXISTS 子句在 Employee 表中查找是否存在 managed_warehouse_id 与 Warehouse 表中 warehouse_id 匹配的记录,以此判断仓库是否有员工管理,若存在则选取该仓库信息。 +功能说明:用于查询有员工管理的仓库的详细信息,包括仓库编号、仓库名称、位置以及容量,便于了解仓库的人力管理覆盖情况。 +CREATE VIEW warehouses_with_managed_employees AS +SELECT warehouse_id, warehouse_name, location, capacity +FROM Warehouse w +WHERE EXISTS ( + SELECT 1 + FROM Employee e + WHERE e.managed_warehouse_id = w.warehouse_id +); + +8. 有货物出库的仓库信息视图(warehouses_with_outbound_goods) +涉及表:仓库表(Warehouse)、出库记录表(OutboundRecord) +关联关系:借助 EXISTS 子句在 OutboundRecord 表中查找是否存在 warehouse_id 与 Warehouse 表中 warehouse_id 一致的记录,若存在则表示该仓库有货物出库,进而获取该仓库的相关信息。 +功能说明:通过该视图可查询出有货物出库的仓库的详细信息,像仓库编号、仓库名称、位置以及容量等,有助于掌握仓库货物流动情况。 +CREATE VIEW warehouses_with_outbound_goods AS +SELECT warehouse_id, warehouse_name, location, capacity +FROM Warehouse w +WHERE EXISTS ( + SELECT 1 + FROM OutboundRecord o + WHERE o.warehouse_id = w.warehouse_id +); + +9. 厢式货车配送订单信息视图(orders_delivered_by_van) +涉及表:订单表(Order)、配送关系表(deliver)、运输工具表(Transportation) +关联关系:先是通过 Order 表的 order_id 字段与 deliver 表的 order_id 字段连接,关联订单与配送关系;再通过 deliver 表的 transportation_id 字段和 Transportation 表的 transportation_id 字段连接,找到对应运输工具,最后筛选出运输工具类型为 “厢式货车” 的订单信息。 +功能说明:用于查看使用了 “厢式货车” 进行配送的订单详情,包含订单编号、客户编号、货物编号以及下单日期,可用于物流配送情况分析等场景。 +CREATE VIEW orders_delivered_by_van AS +SELECT o.order_id, o.customer_id, o.goods_id, o.order_date +FROM `Order` o +JOIN deliver d ON o.order_id = d.order_id +JOIN Transportation t ON d.transportation_id = t.transportation_id +WHERE t.transportation_type = '厢式货车';