|
|
|
@ -0,0 +1,667 @@
|
|
|
|
|
-- 创建数据库
|
|
|
|
|
CREATE DATABASE supermarket OWNER yjw;
|
|
|
|
|
|
|
|
|
|
-- 表空间
|
|
|
|
|
CREATE TABLESPACE products RELATIVE LOCATION 'tablespace/products';
|
|
|
|
|
CREATE TABLESPACE money RELATIVE LOCATION 'tablespace/money';
|
|
|
|
|
CREATE TABLESPACE employee RELATIVE LOCATION 'tablespace/employee';
|
|
|
|
|
CREATE TABLESPACE customers RELATIVE LOCATION 'tablespace/customers';
|
|
|
|
|
CREATE TABLESPACE caigou RELATIVE LOCATION 'tablespace/caigou';
|
|
|
|
|
|
|
|
|
|
-- 模式
|
|
|
|
|
CREATE SCHEMA admin;
|
|
|
|
|
CREATE SCHEMA public;
|
|
|
|
|
CREATE SCHEMA purchase;
|
|
|
|
|
CREATE SCHEMA sale;
|
|
|
|
|
|
|
|
|
|
-- 创建序列
|
|
|
|
|
CREATE SEQUENCE empID START 1 INCREMENT 1 MAXVALUE 200 CACHE 1;
|
|
|
|
|
CREATE SEQUENCE productTypeID START 2001 INCREMENT 1 MAXVALUE 700 CACHE 1;
|
|
|
|
|
CREATE SEQUENCE vipI START 700 INCREMENT 1 MAXVALUE 200000 CACHE 1;
|
|
|
|
|
CREATE SEQUENCE productID START 200001 INCREMENT 1 MAXVALUE 2000000 CACHE 1;
|
|
|
|
|
CREATE SEQUENCE inventoryID START 2000001 INCREMENT 1 MAXVALUE 3000000 CACHE 1;
|
|
|
|
|
CREATE SEQUENCE supplierID START 3000001 INCREMENT 1 MAXVALUE 350000 CACHE 1;
|
|
|
|
|
CREATE SEQUENCE purchaseID START 3500001 INCREMENT 1 MAXVALUE 5000000 CACHE 1;
|
|
|
|
|
CREATE SEQUENCE salesPromotionID START 5000001 INCREMENT 1 MAXVALUE 6000000 CACHE 1;
|
|
|
|
|
CREATE SEQUENCE salaryID START 6000001 INCREMENT 1 MAXVALUE 7000000 CACHE 1;
|
|
|
|
|
CREATE SEQUENCE financialStatementID START 7000001 INCREMENT 1 MAXVALUE 8000000 CACHE 1;
|
|
|
|
|
CREATE SEQUENCE sellID START 8000001 INCREMENT 1 CACHE 1;
|
|
|
|
|
|
|
|
|
|
-- 创建表
|
|
|
|
|
-- 员工表:
|
|
|
|
|
CREATE TABLE admin.employees (
|
|
|
|
|
emp_id INT PRIMARY KEY DEFAULT nextval('empID'),
|
|
|
|
|
emp_name VARCHAR(20) NOT NULL,
|
|
|
|
|
emp_gender CHAR(3) NOT NULL CHECK(emp_gender IN ('男','女')),
|
|
|
|
|
emp_age INT NOT NULL,
|
|
|
|
|
emp_contactInfo VARCHAR(11) NOT NULL,
|
|
|
|
|
emp_position VARCHAR(20) NOT NULL,
|
|
|
|
|
hiredate DATE NOT NULL DEFAULT CURRENT_DATE
|
|
|
|
|
)TABLESPACE employee;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- 商品类型表:
|
|
|
|
|
CREATE TABLE sale.product_type (
|
|
|
|
|
category_id INT PRIMARY KEY DEFAULT nextval('productTypeID'),
|
|
|
|
|
category_name VARCHAR(20) NOT NULL,
|
|
|
|
|
notes TEXT DEFAULT ('')
|
|
|
|
|
)TABLESPACE products;
|
|
|
|
|
|
|
|
|
|
-- 商品表:
|
|
|
|
|
CREATE TABLE sale.products (
|
|
|
|
|
product_id INT PRIMARY KEY DEFAULT nextval('productID'),
|
|
|
|
|
product_name VARCHAR(40) NOT NULL,
|
|
|
|
|
category_id INT REFERENCES product_type(category_id),
|
|
|
|
|
brand VARCHAR(20) NOT NULL DEFAULT '',
|
|
|
|
|
purchase_price DECIMAL(10, 2) NOT NULL,
|
|
|
|
|
selling_price DECIMAL(10, 2) NOT NULL,
|
|
|
|
|
member_price DECIMAL(10, 2) NOT NUL,
|
|
|
|
|
stock_quantity FLOAT NOT NULL CHECK (stock_quantity >= 0)
|
|
|
|
|
)TABLESPACE products;
|
|
|
|
|
|
|
|
|
|
-- 会员表:
|
|
|
|
|
CREATE TABLE sale.members (
|
|
|
|
|
member_id INT PRIMARY KEY DEFAULT nextval('vipID'),
|
|
|
|
|
member_name VARCHAR(20) NOT NULL,
|
|
|
|
|
member_gender CHAR(3) NOT NULL DEFAULT '男' CHECK (member_gender IN ('男', '女')),
|
|
|
|
|
member_age INT,
|
|
|
|
|
member_contactInfo VARCHAR(11) NOT NULL,
|
|
|
|
|
member_level INT NOT NULL DEFAULT 0,
|
|
|
|
|
points INT NOT NULL DEFAULT 0
|
|
|
|
|
)TABLESPACE member;
|
|
|
|
|
|
|
|
|
|
-- 库存表:
|
|
|
|
|
CREATE TABLE public.inventory (
|
|
|
|
|
inventory_id INT PRIMARY KEY DEFAULT nextval('inventoryID'),
|
|
|
|
|
product_id INT REFERENCES products(product_id),
|
|
|
|
|
stock_quantity FLOAT NOT NULL CHECK (stock_quantity >= 0),
|
|
|
|
|
stock_upper_limit FLOAT NOT NULL CHECK (stock_upper_limit >= 0),
|
|
|
|
|
stock_lower_limit FLOAT NOT NULL CHECK (stock_lower_limit >= 0),
|
|
|
|
|
inbound_date DATE NOT NULL,
|
|
|
|
|
outbound_date DATE NOT NULL
|
|
|
|
|
)TABLESPACE caigou;
|
|
|
|
|
|
|
|
|
|
-- 供应商表:
|
|
|
|
|
CREATE TABLE purchase.suppliers (
|
|
|
|
|
supplier_id INT PRIMARY KEY DEFAULT nextval('supplierID'),
|
|
|
|
|
supplier_name VARCHAR(20) NOT NULL,
|
|
|
|
|
supplier_contact_person_name VARCHAR(20) NOT NULL,
|
|
|
|
|
supplier_contact_info VARCHAR(11) NOT NULL,
|
|
|
|
|
supplied_product INT REFERENCES products(product_id)
|
|
|
|
|
)TABLESPACE caigou;
|
|
|
|
|
|
|
|
|
|
-- 促销活动表:
|
|
|
|
|
CREATE TABLE sale.sale_promotion (
|
|
|
|
|
promotion_id INT PRIMARY KEY DEFAULT nextval('salesPromotionID'),
|
|
|
|
|
promotion_name VARCHAR(20) NOT NULL,
|
|
|
|
|
start_date DATE NOT NULL DEFAULT CURRENT_DATE,
|
|
|
|
|
end_date DATE NOT NULL,
|
|
|
|
|
discount_rate FLOAT NOT NULL CHECK (discount_rate > 0 AND discount_rate < 1)
|
|
|
|
|
)TABLESPACE products;
|
|
|
|
|
|
|
|
|
|
-- 采购订单表:
|
|
|
|
|
CREATE TABLE purchase.purchase_order (
|
|
|
|
|
order_id INT PRIMARY KEY DEFAULT nextval('purchaseID'),
|
|
|
|
|
supplier_id INT NOT NULL REFERENCES suppliers(supplier_id),
|
|
|
|
|
emp_id INT NOT NULL REFERENCES employees(emp_id),
|
|
|
|
|
product_id INT NOT NULL REFERENCES products(product_id),
|
|
|
|
|
order_date DATE NOT NULL DEFAULT CURRENT_DATE,
|
|
|
|
|
estimated_delivery_date DATE NOT NULL,
|
|
|
|
|
total_price DECIMAL(10, 2) NOT NULL CHECK (total_price > 0),
|
|
|
|
|
order_status VARCHAR(5) NOT NULL,
|
|
|
|
|
product_quantity FLOAT NOT NULL CHECK (product_quantity > 0)
|
|
|
|
|
)TABLESPACE caigou;
|
|
|
|
|
|
|
|
|
|
-- 工资表:
|
|
|
|
|
CREATE TABLE public.salaries (
|
|
|
|
|
salary_id INT PRIMARY KEY DEFAULT nextval('salaryID'),
|
|
|
|
|
emp_id INT NOT NULL REFERENCES employees(emp_id),
|
|
|
|
|
basic_salary DECIMAL(10, 2) NOT NULL CHECK (basic_salary > 0),
|
|
|
|
|
performance_salary DECIMAL(10, 2) NOT NULL DEFAULT 0,
|
|
|
|
|
bonus DECIMAL(10, 2) NOT NULL DEFAULT 0,
|
|
|
|
|
deduction DECIMAL(10, 2) NOT NULL DEFAULT 0,
|
|
|
|
|
actual_salary DECIMAL(10, 2) NOT NULL,
|
|
|
|
|
payment_date DATE NOT NULL
|
|
|
|
|
)TABLESPACE employee;
|
|
|
|
|
|
|
|
|
|
-- 财务报表:
|
|
|
|
|
CREATE TABLE admin.financial_reports (
|
|
|
|
|
report_id INT PRIMARY KEY DEFAULT nextval('financialStatementID'),
|
|
|
|
|
sales_revenue DECIMAL(10, 2) NOT NULL DEFAULT 0,
|
|
|
|
|
procurement_cost DECIMAL(10, 2) NOT NULL DEFAULT 0,
|
|
|
|
|
emp_wage_cost DECIMAL(10, 2) NOT NULL DEFAULT 0,
|
|
|
|
|
rent_and_utilities DECIMAL(10, 2) NOT NULL DEFAULT 0,
|
|
|
|
|
net_profit DECIMAL(10, 2) NOT NULL DEFAULT 0,
|
|
|
|
|
report_start_date DATE NOT NULL,
|
|
|
|
|
report_end_date DATE NOT NULL CHECK (report_start_date < report_end_date)
|
|
|
|
|
)TABLESPACE money;
|
|
|
|
|
|
|
|
|
|
-- 商品促销表:
|
|
|
|
|
CREATE TABLE sale.product_promotion (
|
|
|
|
|
promotion_id INT,
|
|
|
|
|
product_id INT,
|
|
|
|
|
discount_rate FLOAT NOT NULL CHECK (discount_rate > 0 AND discount_rate < 1),
|
|
|
|
|
PRIMARY KEY (promotion_id, product_id),
|
|
|
|
|
FOREIGN KEY (promotion_id) REFERENCES sale_promotion(promotion_id),
|
|
|
|
|
FOREIGN KEY (product_id) REFERENCES products(product_id)
|
|
|
|
|
)TABLESPACE products;
|
|
|
|
|
|
|
|
|
|
-- 销售记录表:
|
|
|
|
|
CREATE TABLE sale.sales (
|
|
|
|
|
sale_id INT DEFAULT nextval('sellID'),
|
|
|
|
|
emp_id INT,
|
|
|
|
|
product_id INT,
|
|
|
|
|
member_id INT,
|
|
|
|
|
sale_quantity FLOAT NOT NULL CHECK (sale_quantity > 0),
|
|
|
|
|
sale_time DATE NOT NULL DEFAULT CURRENT_DATE,
|
|
|
|
|
PRIMARY KEY (sale_id, emp_id, product_id, member_id),
|
|
|
|
|
FOREIGN KEY (emp_id) REFERENCES employees(emp_id),
|
|
|
|
|
FOREIGN KEY (product_id) REFERENCES products(product_id),
|
|
|
|
|
FOREIGN KEY (member_id) REFERENCES members(member_id)
|
|
|
|
|
)TABLESPACE money;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- 数据初始化脚本
|
|
|
|
|
-- 员工表初始化:
|
|
|
|
|
INSERT INTO admin.employees (emp_name, emp_age, emp_gender, emp_contactinfo, emp_position, password) VALUES
|
|
|
|
|
('喻佳文', 20, '男', 18702616716, '管理员', 'admin'),
|
|
|
|
|
('吴天宇', 20, '男', 18702616716, '售货员', '123456'),
|
|
|
|
|
('test', 20, '男', 18702616716, '管理员', '123456'),
|
|
|
|
|
('Bob', 30, '男', 12345678912, '采购员', '123456'),
|
|
|
|
|
('Alice', 20, '女', 12345678912, '采购员', '123456'),
|
|
|
|
|
('Mark', 33, '男', 12345678912, '售货员', '123456'),
|
|
|
|
|
('嵙嵙', 18, '男', 12345678912, '售货员', '123456'),
|
|
|
|
|
('张三', 30, '男', 12345678912, '售货员', '123456'),
|
|
|
|
|
('李四', 20, '女', 12345678912, '采购员', '123456'),
|
|
|
|
|
('王五', 33, '男', 12345678912, '售货员', '123456');
|
|
|
|
|
-- 工资表初始化:
|
|
|
|
|
INSERT INTO public.salaries (emp_id, basic_salary, performance_salary, bonus, deduction, payment_date) VALUES
|
|
|
|
|
(8, 6455.96, 187.16, 65.53, 558.94, TO_DATE('2024-03-10 17:22:39', 'YYYY-MM-DD HH24:MI:SS')),
|
|
|
|
|
(10, 5623.29, 305.80, 764.70, 988.92, TO_DATE('2023-04-15 16:50:22', 'YYYY-MM-DD HH24:MI:SS')),
|
|
|
|
|
(5, 8750.76, 137.45, 448.72, 955.63, TO_DATE('2024-02-25 10:58:13', 'YYYY-MM-DD HH24:MI:SS')),
|
|
|
|
|
(7, 5747.54, 382.15, 863.73, 675.80, TO_DATE('2022-12-07 17:29:09', 'YYYY-MM-DD HH24:MI:SS')),
|
|
|
|
|
(9, 7717.88, 853.36, 883.65, 831.46, TO_DATE('2023-08-05 09:26:51', 'YYYY-MM-DD HH24:MI:SS')),
|
|
|
|
|
(3, 6080.88, 244.53, 881.90, 543.34, TO_DATE('2024-08-28 13:33:40', 'YYYY-MM-DD HH24:MI:SS')),
|
|
|
|
|
(5, 8886.48, 403.13, 317.58, 993.22, TO_DATE('2024-12-06 14:01:44', 'YYYY-MM-DD HH24:MI:SS')),
|
|
|
|
|
(3, 9328.66, 359.43, 574.67, 496.32, TO_DATE('2024-02-08 17:54:40', 'YYYY-MM-DD HH24:MI:SS')),
|
|
|
|
|
(4, 9275.54, 447.25, 357.84, 463.25, TO_DATE('2023-12-17 15:39:34', 'YYYY-MM-DD HH24:MI:SS')),
|
|
|
|
|
(1, 7864.91, 304.06, 709.95, 248.94, TO_DATE('2023-11-10 12:40:41', 'YYYY-MM-DD HH24:MI:SS'));
|
|
|
|
|
|
|
|
|
|
-- 商品类型表初始化:
|
|
|
|
|
INSERT INTO sale.product_type ( category_name, notes )
|
|
|
|
|
VALUES
|
|
|
|
|
( '食品', '需冷藏' ),
|
|
|
|
|
( '日用品', '易碎品小心存放' ),
|
|
|
|
|
( '饮料', '注意保质期' ),
|
|
|
|
|
( '文具', '防潮' ),
|
|
|
|
|
( '玩具', '注意安全' ),
|
|
|
|
|
( '电器', '防潮防尘' ),
|
|
|
|
|
( '服装', '注意洗涤方式' ),
|
|
|
|
|
( '书籍', '防潮防虫' ),
|
|
|
|
|
( '化妆品', '注意保质期' ),
|
|
|
|
|
( '数码产品', '不能接触水' );
|
|
|
|
|
|
|
|
|
|
-- 商品表初始化:
|
|
|
|
|
INSERT INTO sale.products ( product_name, category_id, brand, purchase_price, selling_price, member_price, stock_quantity )
|
|
|
|
|
VALUES
|
|
|
|
|
('牛奶',2003,'蒙牛',21.00,35.00,32.00,0),
|
|
|
|
|
('洗发水',2009,'清扬',11.00,23.00,20.00,0),
|
|
|
|
|
('饼干',2001,'徐福记',20.00,33.00,30.00,0),
|
|
|
|
|
('三体',2008,'人民文学出版社',40.00,55.00,50.00,0),
|
|
|
|
|
('遥控汽车',2005,'顽皮龙',33.00,45.00,40.00,0),
|
|
|
|
|
('男士短袖',2007,'李宁',45.00,60.00,57.00,0),
|
|
|
|
|
('照相机',2010,'尼康',3000.00,3400.00,3379.00,0),
|
|
|
|
|
('签字笔',2004,'晨光',3.00,8.00,6.00,0),
|
|
|
|
|
('空调',2006,'格力',1999.00,2500.00,2399.00,0),
|
|
|
|
|
('牙刷',2002,'小鹿妈妈',9.00,14.00,12.00,0);
|
|
|
|
|
|
|
|
|
|
-- 商品促销表初始化:
|
|
|
|
|
INSERT INTO sale.product_promotion ( promotion_id, product_id )
|
|
|
|
|
VALUES
|
|
|
|
|
(5000001,200001),
|
|
|
|
|
(5000001,200002),
|
|
|
|
|
(5000001,200003),
|
|
|
|
|
(5000001,200004),
|
|
|
|
|
(5000001,200005),
|
|
|
|
|
(5000002,200003),
|
|
|
|
|
(5000005,200005),
|
|
|
|
|
(5000002,200007),
|
|
|
|
|
(5000002,200006),
|
|
|
|
|
(5000002,200004);
|
|
|
|
|
|
|
|
|
|
-- 会员表初始化:
|
|
|
|
|
INSERT INTO sale.members ( member_name, member_gender, member_age, member_contactinfo, member_level, points )
|
|
|
|
|
VALUES
|
|
|
|
|
('会员1','男', 20, '13670000000', 2, 200),
|
|
|
|
|
('会员2','男', 20, '13670000000', 1, 100),
|
|
|
|
|
('会员3','女', 20, '13670000000', 2, 200),
|
|
|
|
|
('会员4','男', 20, '13670000000', 3, 300),
|
|
|
|
|
('会员5','女', 20, '13670000000', 1, 20),
|
|
|
|
|
('会员6','男', 20, '13670000000', 2, 210),
|
|
|
|
|
('会员7','女', 20, '13670000000', 2, 290),
|
|
|
|
|
('会员8','男', 20, '13670000000', 2, 260),
|
|
|
|
|
('会员9','男', 20, '13670000000', 2, 223),
|
|
|
|
|
('会员10','男', 20, '13670000000', 2, 212);
|
|
|
|
|
|
|
|
|
|
-- 促销活动表初始化:
|
|
|
|
|
INSERT INTO sale.sale_promotion ( promotion_name, start_date, end_date, discount_rate )
|
|
|
|
|
VALUES
|
|
|
|
|
('双十一大促','2024-10-24','2024-11-11',0.88),
|
|
|
|
|
('双十二大促','2024-11-24','2024-12-12',0.88),
|
|
|
|
|
('年末大促','2024-12-24','2025-01-01',0.88),
|
|
|
|
|
('促销活动4','2024-10-24','2024-11-11',0.88),
|
|
|
|
|
('促销活动5','2024-10-24','2024-11-11',0.88),
|
|
|
|
|
('促销活动6','2024-10-24','2024-11-11',0.88),
|
|
|
|
|
('促销活动7','2024-10-24','2024-11-11',0.88),
|
|
|
|
|
('促销活动8','2024-10-24','2024-11-11',0.88),
|
|
|
|
|
('促销活动9','2024-10-24','2024-11-11',0.88),
|
|
|
|
|
('促销活动10','2024-10-24','2024-11-11',0.88);
|
|
|
|
|
|
|
|
|
|
-- 供应商表初始化:
|
|
|
|
|
INSERT INTO purchase.suppliers ( supplier_name, supplier_contact_person_name, supplier_contact_info, supplied_product )
|
|
|
|
|
VALUES
|
|
|
|
|
('供应商A','联系人A','13500000000',200001),
|
|
|
|
|
('供应商B','联系人B','13500000000',200002),
|
|
|
|
|
('供应商C','联系人C','13500000000',200003),
|
|
|
|
|
('供应商D','联系人D','13500000000',200004),
|
|
|
|
|
('供应商E','联系人E','13500000000',200005),
|
|
|
|
|
('供应商F','联系人F','13500000000',200006),
|
|
|
|
|
('供应商G','联系人G','13500000000',200007),
|
|
|
|
|
('供应商H','联系人H','13500000000',200008),
|
|
|
|
|
('供应商I','联系人I','13500000000',200009),
|
|
|
|
|
('供应商J','联系人J','13500000000',200010);
|
|
|
|
|
|
|
|
|
|
-- 库存表初始化:
|
|
|
|
|
INSERT INTO PUBLIC.inventory ( product_id, stock_quantity, stock_upper_limit, stock_lower_limit, inbound_date, outbound_date )
|
|
|
|
|
VALUES
|
|
|
|
|
( 200001, 250, 1000, 25, '2024-11-29', '2024-12-10'),
|
|
|
|
|
( 200002, 350, 1000, 25, '2024-11-29', '2024-12-10'),
|
|
|
|
|
( 200003, 340, 1000, 25, '2024-11-29', '2024-12-10'),
|
|
|
|
|
( 200004, 150, 1000, 25, '2024-11-29', '2024-12-10'),
|
|
|
|
|
( 200005, 350, 1000, 25, '2024-11-29', '2024-12-10'),
|
|
|
|
|
( 200006, 150, 1000, 25, '2024-11-29', '2024-12-10'),
|
|
|
|
|
( 200007, 220, 1000, 25, '2024-11-29', '2024-12-10'),
|
|
|
|
|
( 200008, 100, 1000, 25, '2024-11-29', '2024-12-10'),
|
|
|
|
|
( 200009, 250, 1000, 25, '2024-11-29', '2024-12-10'),
|
|
|
|
|
( 200010, 250, 1000, 25, '2024-11-29', '2024-12-10');
|
|
|
|
|
|
|
|
|
|
-- 采购订单表初始化:
|
|
|
|
|
INSERT INTO purchase.purchase_order ( supplier_id, emp_id, product_id, order_date, estimated_delivery_date, total_price, order_status, product_quantity )
|
|
|
|
|
VALUES
|
|
|
|
|
( 3000001, 4, 200001, '2024-12-01','2024-12-30', 2000, '未到货', 100),
|
|
|
|
|
( 3000002, 5, 200002, '2024-12-01','2024-12-30', 5500, '未到货', 100),
|
|
|
|
|
( 3000003, 9, 200003, '2024-12-01','2024-12-30', 2099, '已到货', 100),
|
|
|
|
|
( 3000004, 9, 200004, '2024-12-01','2024-12-30', 2000, '未到货', 100),
|
|
|
|
|
( 3000005, 4, 200005, '2024-12-01','2024-12-30', 1980, '未到货', 100),
|
|
|
|
|
( 3000006, 5, 200006, '2024-12-01','2024-12-30', 1900, '已到货', 100),
|
|
|
|
|
( 3000007, 5, 200007, '2024-12-01','2024-12-30', 3300, '未到货', 100),
|
|
|
|
|
( 3000008, 9, 200008, '2024-12-01','2024-12-30', 3000, '未到货', 100),
|
|
|
|
|
( 3000009, 4, 200009, '2024-12-01','2024-12-30', 1200, '未到货', 100),
|
|
|
|
|
( 3000010, 4, 200010, '2024-12-01','2024-12-30', 3200, '未到货', 100);
|
|
|
|
|
|
|
|
|
|
-- 财务报表表初始化:
|
|
|
|
|
INSERT INTO admin.financial_reports ( sales_revenue, procurement_cost, emp_wage_cost, rent_and_utilities, report_start_date , report_end_date)
|
|
|
|
|
VALUES
|
|
|
|
|
( 120000, 5000, 15000, 5000, '2021-01-01', '2021-03-31'),
|
|
|
|
|
( 156000, 6600, 15600, 5000, '2021-04-01', '2021-06-30'),
|
|
|
|
|
( 119000, 4000, 14000, 5000, '2021-07-01', '2021-09-30'),
|
|
|
|
|
( 170000, 5000, 20300, 5000, '2021-10-01', '2021-12-31'),
|
|
|
|
|
( 120000, 5000, 15000, 5000, '2022-01-01', '2022-03-31'),
|
|
|
|
|
( 156000, 6600, 15600, 5000, '2022-04-01', '2022-06-30'),
|
|
|
|
|
( 119000, 4000, 14000, 5000, '2022-07-01', '2022-09-30'),
|
|
|
|
|
( 170000, 5000, 20300, 5000, '2022-10-01', '2022-12-31'),
|
|
|
|
|
( 120000, 5000, 15000, 5000, '2023-01-01', '2023-03-31'),
|
|
|
|
|
( 156000, 6600, 15600, 5000, '2023-04-01', '2023-06-30'),
|
|
|
|
|
( 119000, 4000, 14000, 5000, '2023-07-01', '2023-09-30'),
|
|
|
|
|
( 170000, 5000, 20300, 5000, '2023-10-01', '2023-12-31');
|
|
|
|
|
|
|
|
|
|
-- 销售记录表初始化:
|
|
|
|
|
INSERT INTO sale.sales ( emp_id, product_id, member_id, sale_quantity )
|
|
|
|
|
VALUES
|
|
|
|
|
( 2, 200001, 7001, 3),
|
|
|
|
|
( 7, 200002, NULL, 1),
|
|
|
|
|
( 5, 200003, 7002, 3),
|
|
|
|
|
( 8, 200004, 7005, 4),
|
|
|
|
|
( 2, 200005, 7007, 7),
|
|
|
|
|
( 8, 200006, 7001, 2),
|
|
|
|
|
( 8, 200007, NULL, 4),
|
|
|
|
|
( 6, 200004, 7005, 6),
|
|
|
|
|
( 2, 200003, 7003, 1),
|
|
|
|
|
( 7, 200001, 7009, 3);
|
|
|
|
|
|
|
|
|
|
-- 业务查询及查询脚本
|
|
|
|
|
-- 比较条件查询
|
|
|
|
|
-- 1. 查询需求:查询所有工资高于3500的员工
|
|
|
|
|
SELECT * FROM public.salaries WHERE actual_salary > 3500;
|
|
|
|
|
-- 2. 查询需求:查询所有库存数量低于50的商品。
|
|
|
|
|
SELECT * FROM PUBLIC.inventory WHERE stock_quantity < 50;
|
|
|
|
|
-- 3. 查询需求:查询所有进价大于20的商品。
|
|
|
|
|
SELECT * FROM sale.products WHERE purchase_price > 20;
|
|
|
|
|
|
|
|
|
|
-- 集合比较查询
|
|
|
|
|
-- 1. 查询需求:查询在商品表中存在但是在销售记录表中不存在的商品编号及名称。
|
|
|
|
|
SELECT product_id,product_name FROM sale.products
|
|
|
|
|
WHERE product_id NOT IN (SELECT product_id FROM sale.sales);
|
|
|
|
|
-- 2. 查询需求:查询在商品表中存在同时在商品促销表中也存在的商品编号及名称。
|
|
|
|
|
SELECT product_id,product_name FROM sale.products
|
|
|
|
|
WHERE product_id IN (SELECT product_id FROM sale.product_promotion);
|
|
|
|
|
-- 范围比较查询
|
|
|
|
|
-- 1. 查询需求:查询所有库存上限在100至200之间的商品。
|
|
|
|
|
SELECT * FROM PUBLIC.inventory WHERE stock_upper_limit BETWEEN 100 AND 200;
|
|
|
|
|
-- 2. 查询需求:查询所有在2024年1月至2024年12月期间有促销活动。
|
|
|
|
|
SELECT * FROM sale.sale_promotion WHERE start_date BETWEEN '2024-01-01' AND '2024-12-30';
|
|
|
|
|
-- 3. 查询需求:查询所有售价在20至50之间的商品。
|
|
|
|
|
SELECT * FROM sale.products WHERE selling_price BETWEEN 20 AND 50;
|
|
|
|
|
|
|
|
|
|
-- 字符串相似比较查询
|
|
|
|
|
-- 1.查询需求:查询所有名字中包含“文”的员工。
|
|
|
|
|
SELECT * FROM admin.employees WHERE emp_name LIKE '%文%';
|
|
|
|
|
-- 2.查询需求:查询所有品牌名称中包含“牛”的商品
|
|
|
|
|
SELECT * FROM sale.products WHERE brand LIKE '%牛%';
|
|
|
|
|
-- 3.查询需求:查询供应商名称为“供应商A”的供应的商品。
|
|
|
|
|
SELECT p.product_name
|
|
|
|
|
FROM purchase.suppliers s
|
|
|
|
|
JOIN sale.products p ON s.supplied_product = p.product_id
|
|
|
|
|
WHERE s.supplier_name = '供应商A';
|
|
|
|
|
|
|
|
|
|
-- 多表连接查询
|
|
|
|
|
-- 1.查询需求:查询每个员工的工资和基本信息。
|
|
|
|
|
SELECT e.emp_name, s.basic_salary, s.performance_salary, s.bonus, s.deduction, s.actual_salary
|
|
|
|
|
FROM admin.employees e
|
|
|
|
|
JOIN public.salaries s ON e.emp_id = s.emp_id;
|
|
|
|
|
-- 2.查询需求:查询每个供应商的供应商品信息。
|
|
|
|
|
SELECT s.supplier_name, p.product_name
|
|
|
|
|
FROM purchase.suppliers s
|
|
|
|
|
JOIN sale.products p ON s.supplied_product = p.product_id;
|
|
|
|
|
-- 3.查询需求:查询每种商品的库存信息和商品基本信息。
|
|
|
|
|
SELECT p.product_name, i.stock_quantity, i.stock_upper_limit, i.stock_lower_limit
|
|
|
|
|
FROM sale.products p
|
|
|
|
|
JOIN PUBLIC.inventory i ON p.product_id = i.product_id;
|
|
|
|
|
|
|
|
|
|
-- 嵌套查询
|
|
|
|
|
-- 1. 查询需求:查询所有有库存的商品名称。
|
|
|
|
|
SELECT product_name FROM sale.products WHERE product_id IN (SELECT product_id FROM PUBLIC.inventory);
|
|
|
|
|
-- 2.查询需求:查询所有有销售记录的会员编号。
|
|
|
|
|
SELECT member_id FROM sale.members WHERE member_id IN (SELECT member_id FROM sale.sales);
|
|
|
|
|
-- 3.查询需求:查询所有销售过商品的员工姓名。
|
|
|
|
|
SELECT emp_name FROM admin.employees WHERE emp_id IN (SELECT emp_id FROM sale.sales);
|
|
|
|
|
|
|
|
|
|
-- EXISTS查询
|
|
|
|
|
-- 1. 查询需求:查询所有有促销活动的商品。
|
|
|
|
|
SELECT * FROM sale.products p WHERE EXISTS (SELECT 1 FROM sale.product_promotion pp WHERE pp.product_id = p.product_id);
|
|
|
|
|
-- 2. 查询需求:查询所有有工资记录的员工。
|
|
|
|
|
SELECT * FROM admin.employees e WHERE EXISTS (SELECT 1 FROM public.salaries s WHERE s.emp_id = e.emp_id);
|
|
|
|
|
-- 3. 查询需求:查询所有有库存的商品。
|
|
|
|
|
SELECT * FROM sale.products p WHERE EXISTS (SELECT 1 FROM PUBLIC.inventory i WHERE i.product_id = p.product_id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- 数据更新及脚本
|
|
|
|
|
-- 更新:
|
|
|
|
|
-- 1.更新需求:将员工喻佳文的联系方式更新为13800000011。
|
|
|
|
|
UPDATE admin.employees SET emp_contactInfo = '13800000011' WHERE emp_name = '喻佳文';
|
|
|
|
|
-- 2.更新需求:将商品牛奶的售价更新为7.00。
|
|
|
|
|
UPDATE sale.products SET selling_price = 7.00 WHERE product_name = '牛奶';
|
|
|
|
|
-- 3.更新需求:将会员一的等级更新为2。
|
|
|
|
|
UPDATE sale.members SET member_level = 2 WHERE member_name = '会员一';
|
|
|
|
|
-- 4.更新需求:将库存编号为1的库存上限更新为250。
|
|
|
|
|
UPDATE PUBLIC.inventory SET stock_upper_limit = 250 WHERE inventory_id = 1;
|
|
|
|
|
-- 5.更新需求:将供应商A的联系人姓名更新为联系人A1。
|
|
|
|
|
UPDATE purchase.suppliers SET supplier_contact_person_name = '联系人A1' WHERE supplier_name = '供应商A';
|
|
|
|
|
-- 6.更新需求:将促销活动春节促销的折扣率更新为0.7。
|
|
|
|
|
UPDATE sale.sale_promotion SET discount_rate = 0.7 WHERE promotion_name = '春节促销';
|
|
|
|
|
-- 7.更新需求:将采购订单编号为1的订单状态更新为“未到货”。
|
|
|
|
|
UPDATE purchase.purchase_order SET order_status = '未到货' WHERE order_id = 1;
|
|
|
|
|
-- 8.更新需求:将员工吴天宇的基本工资更新为3200.00。
|
|
|
|
|
UPDATE public.salaries SET basic_salary = 3200.00 WHERE emp_id = (SELECT emp_id FROM admin.employees WHERE emp_name = '吴天宇');
|
|
|
|
|
-- 9.更新需求:将财务报表编号为1的净利润更新为6000.00。
|
|
|
|
|
UPDATE admin.financial_reports SET net_profit = 6000.00 WHERE report_id = 1;
|
|
|
|
|
-- 10.更新需求:将商品促销活动编号为1的折扣率更新为0.75。
|
|
|
|
|
UPDATE sale.product_promotion SET discount_rate = 0.75 WHERE promotion_id = 1;
|
|
|
|
|
|
|
|
|
|
-- 删除:
|
|
|
|
|
-- 1.删除需求:删除员工test的记录。
|
|
|
|
|
DELETE FROM admin.employees WHERE emp_name = 'test';
|
|
|
|
|
-- 2.删除需求:删除商品牛奶的记录。
|
|
|
|
|
DELETE FROM sale.products WHERE product_name = '牛奶';
|
|
|
|
|
-- 3.删除需求:删除会员一的记录。
|
|
|
|
|
DELETE FROM sale.members WHERE member_name = '会员一';
|
|
|
|
|
-- 4.删除需求:删除库存编号为1的记录。
|
|
|
|
|
DELETE FROM PUBLIC.inventory WHERE inventory_id = 1;
|
|
|
|
|
-- 5.删除需求:删除供应商A的记录。
|
|
|
|
|
DELETE FROM purchase.suppliers WHERE supplier_name = '供应商A';
|
|
|
|
|
-- 6.删除需求:删除促销活动春节促销的记录。
|
|
|
|
|
DELETE FROM sale.sale_promotion WHERE promotion_name = '春节促销';
|
|
|
|
|
-- 7.删除需求:删除采购订单编号为1的记录。
|
|
|
|
|
DELETE FROM purchase.purchase_order WHERE order_id = 1;
|
|
|
|
|
-- 8.删除需求:删除员工Bob的工资记录。
|
|
|
|
|
DELETE FROM public.salaries WHERE emp_id = (SELECT emp_id FROM admin.employees WHERE emp_name = 'Bob');
|
|
|
|
|
-- 9.删除需求:删除财务报表编号为1的记录。
|
|
|
|
|
DELETE FROM admin.financial_reports WHERE report_id = 1;
|
|
|
|
|
-- 10.删除需求:删除商品促销活动编号为2的记录。
|
|
|
|
|
DELETE FROM sale.product_promotion WHERE promotion_id = 2;
|
|
|
|
|
|
|
|
|
|
-- 视图创建脚本:
|
|
|
|
|
-- 1.视图:员工工资详情
|
|
|
|
|
CREATE VIEW view_employee_salary AS
|
|
|
|
|
SELECT e.emp_name, s.basic_salary, s.performance_salary, s.bonus, s.deduction, s.actual_salary
|
|
|
|
|
FROM admin.employees e
|
|
|
|
|
JOIN public.salaries s ON e.emp_id = s.emp_id;
|
|
|
|
|
-- 2. 视图:商品库存详情
|
|
|
|
|
CREATE VIEW view_product_inventory AS
|
|
|
|
|
SELECT p.product_name, i.stock_quantity, i.stock_upper_limit, i.stock_lower_limit
|
|
|
|
|
FROM sale.products p
|
|
|
|
|
JOIN PUBLIC.inventory i ON p.product_id = i.product_id;
|
|
|
|
|
|
|
|
|
|
-- 3. 视图:促销活动商品
|
|
|
|
|
CREATE VIEW view_promotion_products AS
|
|
|
|
|
SELECT pp.promotion_id, p.product_name, pp.discount_rate
|
|
|
|
|
FROM sale.product_promotion pp
|
|
|
|
|
JOIN sale.products p ON pp.product_id = p.product_id;
|
|
|
|
|
-- 4. 视图:销售记录详情
|
|
|
|
|
CREATE VIEW view_sales_details AS
|
|
|
|
|
SELECT s.sale_id, e.emp_name, p.product_name, m.member_name, s.sale_quantity, s.sale_time
|
|
|
|
|
FROM sale.sales s
|
|
|
|
|
JOIN admin.employees e ON s.emp_id = e.emp_id
|
|
|
|
|
JOIN sale.products p ON s.product_id = p.product_id
|
|
|
|
|
JOIN sale.members m ON s.member_id = m.member_id;
|
|
|
|
|
|
|
|
|
|
-- 5.视图:供应商商品信息
|
|
|
|
|
CREATE VIEW view_supplier_products AS
|
|
|
|
|
SELECT s.supplier_name, p.product_name
|
|
|
|
|
FROM purchase.suppliers s
|
|
|
|
|
JOIN sale.products p ON s.supplied_product = p.product_id;
|
|
|
|
|
|
|
|
|
|
-- 索引创建脚本:
|
|
|
|
|
CREATE INDEX idx_emp_name ON employees (emp_name);-- (可能经常需要根据员工名字查找员工信息,建立索引提高查找效率)
|
|
|
|
|
CREATE INDEX idx_member_contactInfo ON members (member_contactInfo);-- (可能经常需要根据会员的联系方式查找对应的会员,如在结账时根据手机号码查找会员信息,建立索引提高查找效率)
|
|
|
|
|
CREATE INDEX idx_member_name ON members (member_name);-- (也可能经常需要根据会员的姓名找对应的会员,建立索引提高查找效率)
|
|
|
|
|
CREATE INDEX idx_category_name ON product_type (category_name);-- (可能经常需要根据商品类别的名称查找相应的商品类别信息,建立索引提高查找效率)
|
|
|
|
|
CREATE INDEX idx_product_name ON products (product_name);-- (可能经常需要根据商品名称查找对应的商品信息,建立索引提高查找效率)
|
|
|
|
|
CREATE INDEX idx_emp_id ON salaries (emp_id);-- (可能经常需要根据员工的编号查找相应的工资信息,建立索引提高查找效率)
|
|
|
|
|
CREATE INDEX idx_supplied_product ON suppliers (supplied_product);-- (可能经常需要根据供应商供应的商品查找相应的供应商信息,建立索引提高查找效率)
|
|
|
|
|
|
|
|
|
|
-- 存储过程创建脚本:
|
|
|
|
|
-- 1、添加新员工
|
|
|
|
|
CREATE OR REPLACE PROCEDURE sp_add_employee(
|
|
|
|
|
IN emp_name VARCHAR(20),
|
|
|
|
|
IN emp_gender VARCHAR(3),
|
|
|
|
|
IN emp_age INT,
|
|
|
|
|
IN emp_contactinfo VARCHAR(11),
|
|
|
|
|
IN emp_position VARCHAR(20),
|
|
|
|
|
IN hiredate DATE,
|
|
|
|
|
IN password VARCHAR(20),
|
|
|
|
|
OUT new_emp_id INT
|
|
|
|
|
)
|
|
|
|
|
IS
|
|
|
|
|
BEGIN
|
|
|
|
|
INSERT INTO admin.employees (emp_name, emp_gender, emp_age, emp_contact, emp_position, hiredate,password)
|
|
|
|
|
VALUES (emp_name, emp_gender, emp_age, emp_contactinfo, emp_position, hiredate, password)
|
|
|
|
|
RETURNING emp_id INTO new_emp_id;
|
|
|
|
|
END;
|
|
|
|
|
-- 2、更新商品库存
|
|
|
|
|
CREATE OR REPLACE PROCEDURE sp_update_inventory(
|
|
|
|
|
IN inv_id INT,
|
|
|
|
|
IN new_quantity INT
|
|
|
|
|
)
|
|
|
|
|
IS
|
|
|
|
|
BEGIN
|
|
|
|
|
UPDATE public.inventory
|
|
|
|
|
SET stock_quantity = new_quantity
|
|
|
|
|
WHERE inventory_id = inv_id;
|
|
|
|
|
END;
|
|
|
|
|
-- 3、添加销售记录
|
|
|
|
|
CREATE OR REPLACE PROCEDURE add_sales_record(
|
|
|
|
|
IN p_emp_id INT,
|
|
|
|
|
IN p_member_id INT,
|
|
|
|
|
IN p_product_id INT,
|
|
|
|
|
IN p_sale_id INT,
|
|
|
|
|
IN p_sale_money DECIMAL(10, 2),
|
|
|
|
|
IN p_sale_quantity FLOAT,
|
|
|
|
|
IN p_sale_time TIMESTAMP
|
|
|
|
|
)
|
|
|
|
|
IS
|
|
|
|
|
BEGIN
|
|
|
|
|
INSERT INTO sale.sales (emp_id, member_id, product_id, sale_id, sale_money, sale_quantity, sale_time)
|
|
|
|
|
VALUES (p_emp_id, p_member_id, p_product_id, p_sale_id, p_sale_money, p_sale_quantity, p_sale_time);
|
|
|
|
|
END;
|
|
|
|
|
-- 4、添加新供应商
|
|
|
|
|
CREATE OR REPLACE PROCEDURE sp_add_supplier(
|
|
|
|
|
IN supplier_name VARCHAR(20),
|
|
|
|
|
IN contact_name VARCHAR(20),
|
|
|
|
|
IN contact_info VARCHAR(20),
|
|
|
|
|
IN supply_product VARCHAR(20),
|
|
|
|
|
OUT new_supplier_id INT
|
|
|
|
|
)
|
|
|
|
|
IS
|
|
|
|
|
BEGIN
|
|
|
|
|
INSERT INTO purchase.suppliers (supplier_name, supplier_contact_person_name, supplier_contact_info, supplied_product)
|
|
|
|
|
VALUES (supplier_name, contact_name, contact_info, supply_product)
|
|
|
|
|
RETURNING supplier_id INTO new_supplier_id;
|
|
|
|
|
END;
|
|
|
|
|
-- 5、更新会员信息
|
|
|
|
|
CREATE OR REPLACE PROCEDURE sp_update_member(
|
|
|
|
|
IN p_member_id INT,
|
|
|
|
|
IN p_member_name VARCHAR(20),
|
|
|
|
|
IN p_member_gender VARCHAR(10),
|
|
|
|
|
IN p_member_age INT,
|
|
|
|
|
IN p_member_contact VARCHAR(20),
|
|
|
|
|
IN p_new_level INT,
|
|
|
|
|
IN p_new_points INT
|
|
|
|
|
)
|
|
|
|
|
AS
|
|
|
|
|
BEGIN
|
|
|
|
|
UPDATE sale.members
|
|
|
|
|
SET member_name = p_member_name, member_gender = p_member_gender, member_age = p_member_age, member_contactInfo = p_member_contact, member_level = p_new_level, points = p_new_points
|
|
|
|
|
WHERE member_id = p_member_id;
|
|
|
|
|
END;
|
|
|
|
|
-- 触发器创建脚本:
|
|
|
|
|
-- 1、计算净利润触发器
|
|
|
|
|
CREATE
|
|
|
|
|
OR REPLACE FUNCTION calculate_net_profit ( ) RETURNS TRIGGER AS $$ BEGIN
|
|
|
|
|
NEW.net_profit := NEW.sales_revenue - NEW.procurement_cost - NEW.emp_wage_cost - NEW.rent_and_utilities;
|
|
|
|
|
RETURN NEW;
|
|
|
|
|
|
|
|
|
|
END;
|
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
|
|
|
|
|
CREATE TRIGGER trg_calculate_net_profit BEFORE INSERT ON ADMIN.financial_reports FOR EACH ROW
|
|
|
|
|
EXECUTE PROCEDURE calculate_net_profit ( );
|
|
|
|
|
|
|
|
|
|
-- 2、更新商品库存触发器
|
|
|
|
|
CREATE
|
|
|
|
|
OR REPLACE FUNCTION update_stock_quantity ( ) RETURNS TRIGGER AS $$ BEGIN
|
|
|
|
|
EXECUTE'UPDATE sale.products
|
|
|
|
|
SET stock_quantity = stock_quantity + $1
|
|
|
|
|
WHERE product_id = $2' USING NEW.stock_quantity,
|
|
|
|
|
NEW.product_id;
|
|
|
|
|
RETURN NEW;
|
|
|
|
|
|
|
|
|
|
END;
|
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
CREATE TRIGGER trg_update_stock_quantity BEFORE INSERT ON inventory FOR EACH ROW
|
|
|
|
|
EXECUTE PROCEDURE update_stock_quantity ( );
|
|
|
|
|
|
|
|
|
|
-- 3、设置商品促销折扣率触发器
|
|
|
|
|
CREATE
|
|
|
|
|
OR REPLACE FUNCTION update_discount_rate ( ) RETURNS TRIGGER AS $$ BEGIN
|
|
|
|
|
SELECT
|
|
|
|
|
discount_rate INTO NEW.discount_rate
|
|
|
|
|
FROM
|
|
|
|
|
sale_promotion
|
|
|
|
|
WHERE
|
|
|
|
|
promotion_id = NEW.promotion_id;
|
|
|
|
|
RETURN NEW;
|
|
|
|
|
|
|
|
|
|
END;
|
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
CREATE TRIGGER trg_update_discount_rate BEFORE INSERT ON product_promotion FOR EACH ROW
|
|
|
|
|
EXECUTE PROCEDURE update_discount_rate ( );
|
|
|
|
|
|
|
|
|
|
-- 4、销售时计算总价触发器
|
|
|
|
|
CREATE
|
|
|
|
|
OR REPLACE FUNCTION update_sale_money ( ) RETURNS TRIGGER AS $$ DECLARE
|
|
|
|
|
price NUMERIC;
|
|
|
|
|
BEGIN
|
|
|
|
|
IF
|
|
|
|
|
NEW.member_id IS NULL THEN
|
|
|
|
|
SELECT
|
|
|
|
|
selling_price INTO price
|
|
|
|
|
FROM
|
|
|
|
|
sale.products
|
|
|
|
|
WHERE
|
|
|
|
|
product_id = NEW.product_id;
|
|
|
|
|
ELSE SELECT
|
|
|
|
|
member_price INTO price
|
|
|
|
|
FROM
|
|
|
|
|
sale.products
|
|
|
|
|
WHERE
|
|
|
|
|
product_id = NEW.product_id;
|
|
|
|
|
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
NEW.sale_money := price * NEW.sale_quantity;
|
|
|
|
|
RETURN NEW;
|
|
|
|
|
|
|
|
|
|
END;
|
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
CREATE TRIGGER trg_update_sale_money BEFORE INSERT ON sale.sales FOR EACH ROW
|
|
|
|
|
EXECUTE PROCEDURE update_sale_money ( );
|
|
|
|
|
|
|
|
|
|
-- 5、计算员工工资触发器
|
|
|
|
|
CREATE
|
|
|
|
|
OR REPLACE FUNCTION calculate_actual_salary ( ) RETURNS TRIGGER AS $$ BEGIN
|
|
|
|
|
NEW.actual_salary := NEW.basic_salary + NEW.performance_salary + NEW.bonus - NEW.deduction;
|
|
|
|
|
RETURN NEW;
|
|
|
|
|
|
|
|
|
|
END;
|
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
CREATE TRIGGER before_insert_salaries BEFORE INSERT ON salaries FOR EACH ROW
|
|
|
|
|
EXECUTE PROCEDURE calculate_actual_salary ( );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- 1、创建管理员角色
|
|
|
|
|
CREATE ROLE admin IDENTIFIED BY 'admin@123';
|
|
|
|
|
-- 2、创建采购员角色
|
|
|
|
|
CREATE ROLE purchaser IDENTIFIED BY 'purchaser@123'
|
|
|
|
|
-- 3、创建售货员角色
|
|
|
|
|
CREATE ROLE salesperson IDENTIFIED BY 'sale@123'
|
|
|
|
|
-- 授予权限
|
|
|
|
|
-- 1、授予管理员所有权限
|
|
|
|
|
GRANT ALL PRIVILEGES ON DATABASE supermarket TO admin;
|
|
|
|
|
|
|
|
|
|
-- 2、授予采购员权限
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE inventory TO purchaser;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE salaries TO purchaser;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE sale.product_type TO purchaser;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE sale.products TO purchaser;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE purchase.purchase_order TO purchaser;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE purchase.suppliers TO purchaser;
|
|
|
|
|
-- 3、授予售货员权限
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE inventory TO salesperson;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE salaries TO salesperson;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE sale.members TO salesperson;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE sale.product_promotion TO salesperson;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE sale.product_type TO salesperson;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE sale.products TO salesperson;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE sale.sale_promotion TO salesperson;
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE sale.sales TO salesperson;
|