parent
5a689822ea
commit
6ed26d630d
@ -0,0 +1,104 @@
|
||||
CREATE TABLE IF NOT EXISTS products (
|
||||
product_id int PRIMARY KEY AUTO_INCREMENT,
|
||||
product_name VARCHAR(20) NOT NULL,
|
||||
price DOUBLE NOT NULL,
|
||||
stock_quantity INT DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS customers (
|
||||
customer_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
customer_name VARCHAR(20) NOT NULL,
|
||||
phone VARCHAR(11)
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS kpi (
|
||||
kid INT PRIMARY KEY AUTO_INCREMENT,
|
||||
grade INT CHECK(grade >= 0),
|
||||
sid INT,
|
||||
FOREIGN KEY (sid) REFERENCES sales_people(salesperson_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sales_people (
|
||||
salesperson_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
saleperson_name VARCHAR(20) NOT NULL,
|
||||
phone VARCHAR(11)
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS suppliers (
|
||||
supplier_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
company_name VARCHAR(20) NOT NULL,
|
||||
phone VARCHAR(11)
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS warehouses (
|
||||
warehouse_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
location VARCHAR(20) NOT NULL,
|
||||
capacity INT DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sales_orders (
|
||||
order_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
order_date DATE NOT NULL,
|
||||
customer_id INT,
|
||||
salesperson_id INT,
|
||||
total_amount int NOT NULL,
|
||||
FOREIGN KEY (customer_id) REFERENCES customers(customer_id),
|
||||
FOREIGN KEY (salesperson_id) REFERENCES sales_people(salesperson_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS order_details (
|
||||
order_detail_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
order_id INT,
|
||||
product_id INT,
|
||||
quantity INT NOT NULL,
|
||||
unit_price DOUBLE NOT NULL,
|
||||
FOREIGN KEY (order_id) REFERENCES sales_orders(order_id),
|
||||
FOREIGN KEY (product_id) REFERENCES products(product_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS returns (
|
||||
return_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
return_date DATE NOT NULL,
|
||||
order_id INT,
|
||||
reason varchar(30),
|
||||
FOREIGN KEY (order_id) REFERENCES sales_orders(order_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS product_suppliers (
|
||||
product_supplier_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
product_id INT,
|
||||
supplier_id INT,
|
||||
FOREIGN KEY (product_id) REFERENCES products(product_id),
|
||||
FOREIGN KEY (supplier_id) REFERENCES suppliers(supplier_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS product_warehouses (
|
||||
product_warehouse_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
product_id INT,
|
||||
warehouse_id INT,
|
||||
quantity_in_warehouse INT DEFAULT 0,
|
||||
FOREIGN KEY (product_id) REFERENCES products(product_id),
|
||||
FOREIGN KEY (warehouse_id) REFERENCES warehouses(warehouse_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sales_activities (
|
||||
activity_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
activity_name VARCHAR(20) NOT NULL,
|
||||
start_date DATE NOT NULL,
|
||||
end_date DATE NOT NULL,
|
||||
total_sales_amount double DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS shipping_methods (
|
||||
shipping_method_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
methodname VARCHAR(20) NOT NULL,
|
||||
cost_per_unit double NOT NULL CHECK (cost_per_unit >= 0),
|
||||
estimated_delivery_time INT NOT NULL CHECK (estimated_delivery_time > 0),
|
||||
order_id INT,
|
||||
FOREIGN KEY (order_id) REFERENCES sales_orders(order_id)
|
||||
);
|
||||
|
||||
|
@ -0,0 +1,42 @@
|
||||
-- 创建用户
|
||||
CREATE USER 'admin_user'@'localhost' IDENTIFIED BY 'password123';
|
||||
CREATE USER 'salesperson_user'@'localhost' IDENTIFIED BY 'password123';
|
||||
CREATE USER 'customer_user'@'localhost' IDENTIFIED BY 'password123';
|
||||
|
||||
-- 授予管理员权限
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
-- 授予销售员权限
|
||||
-- 查看所有产品信息
|
||||
GRANT SELECT ON my_company_db.products TO 'salesperson_user'@'localhost';
|
||||
|
||||
-- 创建新的销售订单
|
||||
GRANT INSERT ON my_company_db.sales_orders TO 'salesperson_user'@'localhost';
|
||||
GRANT INSERT ON my_company_db.order_details TO 'salesperson_user'@'localhost';
|
||||
|
||||
-- 查看自己的销售记录
|
||||
GRANT SELECT ON my_company_db.sales_orders TO 'salesperson_user'@'localhost';
|
||||
GRANT SELECT ON my_company_db.order_details TO 'salesperson_user'@'localhost';
|
||||
|
||||
-- 查看客户的订单信息
|
||||
GRANT SELECT ON my_company_db.customers TO 'salesperson_user'@'localhost';
|
||||
GRANT SELECT ON my_company_db.sales_orders TO 'salesperson_user'@'localhost';
|
||||
GRANT SELECT ON my_company_db.order_details TO 'salesperson_user'@'localhost';
|
||||
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
-- 授予客户权限
|
||||
-- 查看自己的订单信息
|
||||
GRANT SELECT ON my_company_db.customers TO 'customer_user'@'localhost';
|
||||
GRANT SELECT ON my_company_db.sales_orders TO 'customer_user'@'localhost';
|
||||
GRANT SELECT ON my_company_db.order_details TO 'customer_user'@'localhost';
|
||||
|
||||
-- 创建新的订单
|
||||
GRANT INSERT ON my_company_db.sales_orders TO 'customer_user'@'localhost';
|
||||
GRANT INSERT ON my_company_db.order_details TO 'customer_user'@'localhost';
|
||||
|
||||
-- 查看产品的基本信息(名称、价格)
|
||||
GRANT SELECT (product_name, price) ON my_company_db.products TO 'customer_user'@'localhost';
|
||||
|
||||
FLUSH PRIVILEGES;
|
@ -0,0 +1,20 @@
|
||||
-- 加速基于产品名称的查询。
|
||||
CREATE INDEX idx_product_name ON products (product_name);
|
||||
-- 加速基于客户姓名的查询
|
||||
CREATE INDEX idx_customer_name ON customers (customer_name);
|
||||
-- 加速基于销售人员姓名的查询
|
||||
CREATE INDEX idx_salesperson_name ON sales_people (saleperson_name);
|
||||
-- 加速基于订单日期的查询
|
||||
CREATE INDEX idx_order_date ON sales_orders (order_date);
|
||||
-- 加速基于退货日期的查询
|
||||
CREATE INDEX idx_return_date ON returns (return_date);
|
||||
-- 加速基于订单ID和产品ID的联合查询
|
||||
CREATE INDEX idx_order_product ON order_details (order_id, product_id);
|
||||
-- 加速基于客户ID和订单日期的联合查询
|
||||
CREATE INDEX idx_customer_order_date ON sales_orders (customer_id, order_date);
|
||||
-- 加速基于销售人员ID和订单日期的联合查询
|
||||
CREATE INDEX idx_salesperson_order_date ON sales_orders (salesperson_id, order_date);
|
||||
-- 加速基于供应商公司名称的查询
|
||||
CREATE INDEX idx_supplier_company_name ON suppliers (company_name);
|
||||
-- 加速基于仓库位置和产品ID的联合查询
|
||||
CREATE INDEX idx_warehouse_product ON product_warehouses (warehouse_id, product_id);
|
@ -0,0 +1,158 @@
|
||||
INSERT INTO products (product_name, price, stock_quantity) VALUES
|
||||
('笔记本电脑', 999.99, 100),
|
||||
('智能手机', 499.99, 200),
|
||||
('平板电脑', 299.99, 150),
|
||||
('显示器', 199.99, 300),
|
||||
('键盘', 49.99, 500),
|
||||
('鼠标', 29.99, 600),
|
||||
('耳机', 89.99, 400),
|
||||
('充电器', 19.99, 700),
|
||||
('电源适配器', 29.99, 800),
|
||||
('U盘', 14.99, 900);
|
||||
|
||||
INSERT INTO customers (customer_name, phone) VALUES
|
||||
('张伟', '1234567890'),
|
||||
('李娜', '0987654321'),
|
||||
('王丽', '1122334455'),
|
||||
('赵强', '5566778899'),
|
||||
('陈敏', '9988776655'),
|
||||
('孙华', '1133557788'),
|
||||
('周静', '2244668877'),
|
||||
('刘洋', '3355779966'),
|
||||
('杨柳', '4466880055'),
|
||||
('朱刚', '5577991144');
|
||||
|
||||
INSERT INTO sales_people (saleperson_name, phone) VALUES
|
||||
('王明', '1133557799'),
|
||||
('李华', '2244668800'),
|
||||
('刘洋', '3355779911'),
|
||||
('周红', '4466880022'),
|
||||
('吴刚', '5577991133'),
|
||||
('赵雷', '6688001122'),
|
||||
('钱芳', '7799112233'),
|
||||
('孙涛', '8800112244'),
|
||||
('周梅', '9911223355'),
|
||||
('郑强', '0011223366');
|
||||
|
||||
INSERT INTO kpi (grade, sid) VALUES
|
||||
(85, 1),
|
||||
(90, 2),
|
||||
(78, 3),
|
||||
(92, 4),
|
||||
(88, 5),
|
||||
(82, 6),
|
||||
(95, 7),
|
||||
(79, 8),
|
||||
(84, 9),
|
||||
(91, 10);
|
||||
|
||||
INSERT INTO suppliers (company_name, phone) VALUES
|
||||
('科技公司', '1234567890'),
|
||||
('电子公司', '0987654321'),
|
||||
('部件公司', '1122334455'),
|
||||
('供应中心', '5566778899'),
|
||||
('零件工厂', '9988776655'),
|
||||
('创新科技', '2233445566'),
|
||||
('未来电子', '3344556677'),
|
||||
('智能设备', '4455667788'),
|
||||
('高效物流', '5566778899'),
|
||||
('可靠供应商', '6677889900');
|
||||
|
||||
INSERT INTO warehouses (location, capacity) VALUES
|
||||
('北京', 5000),
|
||||
('上海', 7000),
|
||||
('广州', 6000),
|
||||
('深圳', 8000),
|
||||
('青岛', 4000),
|
||||
('郑州', 6500),
|
||||
('济南', 7500),
|
||||
('西安', 5500),
|
||||
('太原', 8500),
|
||||
('合肥', 4500);
|
||||
|
||||
INSERT INTO sales_orders (order_date, customer_id, salesperson_id, total_amount) VALUES
|
||||
('2024-10-01', 1, 1, 1999.98),
|
||||
('2024-10-02', 2, 2, 999.98),
|
||||
('2024-10-03', 3, 3, 299.99),
|
||||
('2024-10-04', 4, 4, 399.98),
|
||||
('2024-10-05', 5, 5, 499.98),
|
||||
('2024-10-06', 6, 6, 1499.94),
|
||||
('2024-10-07', 7, 7, 999.94),
|
||||
('2024-10-08', 8, 8, 299.98),
|
||||
('2024-10-09', 9, 9, 399.98),
|
||||
('2024-10-10', 10, 10, 499.98);
|
||||
|
||||
INSERT INTO order_details (order_id, product_id, quantity, unit_price) VALUES
|
||||
(1, 1, 1, 999.99),
|
||||
(2, 2, 2, 499.99),
|
||||
(3, 3, 1, 299.99),
|
||||
(4, 4, 2, 199.99),
|
||||
(5, 5, 1, 49.99),
|
||||
(6, 6, 1, 29.99),
|
||||
(7, 7, 2, 89.99),
|
||||
(8, 8, 1, 19.99),
|
||||
(9, 9, 2, 29.99),
|
||||
(10, 10, 1, 14.99);
|
||||
|
||||
INSERT INTO returns (return_date, order_id, reason) VALUES
|
||||
('2024-11-01', 1, '损坏'),
|
||||
('2024-11-02', 2, '错发商品'),
|
||||
('2024-11-03', 3, '破损'),
|
||||
('2024-11-04', 4, '改变主意'),
|
||||
('2024-11-05', 5, '不需要'),
|
||||
('2024-11-06', 6, '质量问题'),
|
||||
('2024-11-07', 7, '尺寸不符'),
|
||||
('2024-11-08', 8, '包装损坏'),
|
||||
('2024-11-09', 9, '颜色错误'),
|
||||
('2024-11-10', 10, '功能故障');
|
||||
|
||||
INSERT INTO product_suppliers (product_id, supplier_id) VALUES
|
||||
(1, 1),
|
||||
(2, 2),
|
||||
(3, 3),
|
||||
(4, 4),
|
||||
(5, 5),
|
||||
(6, 6),
|
||||
(7, 7),
|
||||
(8, 8),
|
||||
(9, 9),
|
||||
(10, 10);
|
||||
|
||||
INSERT INTO product_warehouses (product_id, warehouse_id, quantity_in_warehouse) VALUES
|
||||
(1, 1, 100),
|
||||
(2, 2, 200),
|
||||
(3, 3, 150),
|
||||
(4, 4, 300),
|
||||
(5, 5, 500),
|
||||
(6, 6, 600),
|
||||
(7, 7, 400),
|
||||
(8, 8, 700),
|
||||
(9, 9, 800),
|
||||
(10, 10, 900);
|
||||
|
||||
INSERT INTO sales_activities (activity_name, start_date, end_date, total_sales_amount) VALUES
|
||||
('劳动节促销', '2024-05-01', '2024-05-03', 15000.00),
|
||||
('元旦促销', '2024-01-01', '2024-01-03', 12000.00),
|
||||
('冬季清仓', '2024-12-01', '2024-12-31', 20000.00),
|
||||
('春季促销', '2024-03-01', '2024-03-31', 18000.00),
|
||||
('夏季折扣', '2024-06-01', '2024-08-31', 22000.00),
|
||||
('国庆促销', '2024-10-01', '2024-10-07', 17000.00),
|
||||
('春节促销', '2024-02-12', '2024-02-18', 16000.00),
|
||||
('中秋节促销', '2024-09-21', '2024-09-25', 14000.00),
|
||||
('双十一促销', '2024-11-11', '2024-11-11', 19000.00),
|
||||
('双十二促销', '2024-12-12', '2024-12-12', 21000.00);
|
||||
|
||||
INSERT INTO shipping_methods (methodname, cost_per_unit, estimated_delivery_time, order_id) VALUES
|
||||
('标准运输', 5.99, 5, 1),
|
||||
('快速运输', 15.99, 2, 2),
|
||||
('次日达', 25.99, 1, 3),
|
||||
('地面运输', 3.99, 7, 4),
|
||||
('隔夜运输', 45.99, 1, 5),
|
||||
('经济运输', 7.99, 6, 6),
|
||||
('普通快递', 10.99, 3, 7),
|
||||
('加急快递', 20.99, 2, 8),
|
||||
('自提', 60.99, 4, 9),
|
||||
('快递', 8.99, 8, 10);
|
||||
|
||||
|
||||
|
@ -0,0 +1,72 @@
|
||||
-- UPDATE 操作
|
||||
-- 将产品“笔记本电脑”的价格提高50%。
|
||||
select price from products where product_name = '笔记本电脑';
|
||||
UPDATE products
|
||||
SET price = price * 1.5
|
||||
WHERE product_name = '笔记本电脑';
|
||||
-- 为所有库存量小于100的产品补充库存至100。
|
||||
UPDATE products
|
||||
SET stock_quantity = 100
|
||||
WHERE stock_quantity < 100;
|
||||
-- 更新客户“张伟”的电话号码为“13800138000”。
|
||||
UPDATE customers
|
||||
SET phone = '13800138000'
|
||||
WHERE customer_name = '张伟';
|
||||
-- 将销售人员“王明”的KPI等级提升到95。
|
||||
UPDATE kpi
|
||||
SET grade = 95
|
||||
WHERE sid = (SELECT salesperson_id FROM sales_people WHERE saleperson_name = '王明');
|
||||
-- 将供应商“科技公司”的电话号码更改为“13700137000”。
|
||||
UPDATE suppliers
|
||||
SET phone = '13700137000'
|
||||
WHERE company_name = '科技公司';
|
||||
-- 将仓库“北京”的容量增加1000。
|
||||
UPDATE warehouses
|
||||
SET capacity = capacity + 1000
|
||||
WHERE location = '北京';
|
||||
-- 将订单ID为1的销售订单的总金额更新为2000元。
|
||||
UPDATE sales_orders
|
||||
SET total_amount = 2000
|
||||
WHERE order_id = 1;
|
||||
-- 将所有退货记录中的退货原因统一为“客户不满意”。
|
||||
UPDATE returns
|
||||
SET reason = '客户不满意';
|
||||
-- 将产品“智能手机”的供应商更改为“电子公司”。
|
||||
UPDATE product_suppliers
|
||||
SET supplier_id = (SELECT supplier_id FROM suppliers WHERE company_name = '电子公司')
|
||||
WHERE product_id = (SELECT product_id FROM products WHERE product_name = '智能手机');
|
||||
-- 将产品“平板电脑”在仓库“上海”的库存数量减少50。
|
||||
UPDATE product_warehouses
|
||||
SET quantity_in_warehouse = quantity_in_warehouse - 50
|
||||
WHERE product_id = (SELECT product_id FROM products WHERE product_name = '平板电脑')
|
||||
AND warehouse_id = (SELECT warehouse_id FROM warehouses WHERE location = '上海');
|
||||
|
||||
-- 删除产品表中的“键盘”产品
|
||||
DELETE FROM products WHERE product_name = '键盘';
|
||||
|
||||
-- 删除客户表中的“张伟”客户
|
||||
DELETE FROM customers WHERE customer_name = '张伟';
|
||||
|
||||
-- 删除销售人员表中的“王明”销售员
|
||||
DELETE FROM sales_people WHERE saleperson_name = '王明';
|
||||
|
||||
-- 删除KPI表中grade为85的记录
|
||||
DELETE FROM kpi WHERE grade = 85;
|
||||
|
||||
-- 删除供应商表中的“科技公司”
|
||||
DELETE FROM suppliers WHERE company_name = '科技公司';
|
||||
|
||||
-- 删除仓库表中location为“北京”的仓库
|
||||
DELETE FROM warehouses WHERE location = '北京';
|
||||
|
||||
-- 删除销售订单表中customer_id为1的订单
|
||||
DELETE FROM sales_orders WHERE customer_id = 1;
|
||||
|
||||
-- 删除订单详情表中order_id为1的记录
|
||||
DELETE FROM order_details WHERE order_id = 1;
|
||||
|
||||
-- 删除退货表中reason为“损坏”的记录
|
||||
DELETE FROM returns WHERE reason = '损坏';
|
||||
|
||||
-- 删除促销活动表中activity_name为“劳动节促销”的活动
|
||||
DELETE FROM sales_activities WHERE activity_name = '劳动节促销';
|
@ -0,0 +1,53 @@
|
||||
-- 显示每个产品的销售详情,包括产品名称、销售数量、销售总金额和平均售价。
|
||||
CREATE VIEW product_sales_details AS
|
||||
SELECT
|
||||
p.product_name,
|
||||
SUM(od.quantity) AS total_sold,
|
||||
SUM(od.quantity * od.unit_price) AS total_sales_amount,
|
||||
AVG(od.unit_price) AS avg_unit_price
|
||||
FROM products p
|
||||
JOIN order_details od ON p.product_id = od.product_id
|
||||
GROUP BY p.product_name;
|
||||
-- 显示每个客户的购买历史,包括客户姓名、订单日期、订单总金额和所购产品列表。
|
||||
CREATE VIEW customer_purchase_history AS
|
||||
SELECT
|
||||
c.customer_name,
|
||||
so.order_date,
|
||||
so.total_amount,
|
||||
GROUP_CONCAT(p.product_name SEPARATOR ', ') AS products_bought
|
||||
FROM customers c
|
||||
JOIN sales_orders so ON c.customer_id = so.customer_id
|
||||
JOIN order_details od ON so.order_id = od.order_id
|
||||
JOIN products p ON od.product_id = p.product_id
|
||||
GROUP BY c.customer_name, so.order_date, so.total_amount;
|
||||
-- 显示每个销售人员的业绩,包括销售人员姓名、销售订单数量、总销售额和平均订单金额。
|
||||
CREATE VIEW sales_person_performance AS
|
||||
SELECT
|
||||
sp.saleperson_name,
|
||||
COUNT(so.order_id) AS total_orders,
|
||||
SUM(so.total_amount) AS total_sales,
|
||||
AVG(so.total_amount) AS avg_order_amount
|
||||
FROM sales_people sp
|
||||
JOIN sales_orders so ON sp.salesperson_id = so.salesperson_id
|
||||
GROUP BY sp.saleperson_name;
|
||||
-- 显示每个仓库的库存状况,包括仓库位置、总库存量和各产品的库存明细。
|
||||
CREATE VIEW warehouse_inventory_status AS
|
||||
SELECT
|
||||
w.location,
|
||||
SUM(pw.quantity_in_warehouse) AS total_inventory,
|
||||
GROUP_CONCAT(CONCAT(p.product_name, ': ', pw.quantity_in_warehouse) SEPARATOR '; ') AS inventory_details
|
||||
FROM warehouses w
|
||||
JOIN product_warehouses pw ON w.warehouse_id = pw.warehouse_id
|
||||
JOIN products p ON pw.product_id = p.product_id
|
||||
GROUP BY w.location;
|
||||
-- 创建一个视图,评估每个销售活动的效果,包括活动名称、开始日期、结束日期、总销售额和参与订单数量。
|
||||
CREATE VIEW sales_activity_effectiveness AS
|
||||
SELECT
|
||||
sa.activity_name,
|
||||
sa.start_date,
|
||||
sa.end_date,
|
||||
SUM(so.total_amount) AS total_sales,
|
||||
COUNT(so.order_id) AS total_orders
|
||||
FROM sales_activities sa
|
||||
LEFT JOIN sales_orders so ON so.order_date BETWEEN sa.start_date AND sa.end_date
|
||||
GROUP BY sa.activity_name, sa.start_date, sa.end_date;
|
Loading…
Reference in new issue