From d1a17001a3206705acee05ebe179b0e671b68aa2 Mon Sep 17 00:00:00 2001 From: wyq <2378174283@qq.com> Date: Sun, 22 Dec 2024 17:15:07 +0800 Subject: [PATCH] V1 --- 数据库脚本/业务查询.sql | 165 +++++++++++++++ 数据库脚本/删除脚本.sql | 58 ++++++ 数据库脚本/存储脚本.sql | 61 ++++++ 数据库脚本/建表及数据插入.sql | 241 ++++++++++++++++++++++ 数据库脚本/更新及新增脚本.sql | 68 ++++++ 数据库脚本/索引脚本.sql | 48 +++++ 数据库脚本/视图脚本.sql | 76 +++++++ 数据库脚本/触发器.txt | 95 +++++++++ 8 files changed, 812 insertions(+) create mode 100644 数据库脚本/业务查询.sql create mode 100644 数据库脚本/删除脚本.sql create mode 100644 数据库脚本/存储脚本.sql create mode 100644 数据库脚本/建表及数据插入.sql create mode 100644 数据库脚本/更新及新增脚本.sql create mode 100644 数据库脚本/索引脚本.sql create mode 100644 数据库脚本/视图脚本.sql create mode 100644 数据库脚本/触发器.txt diff --git a/数据库脚本/业务查询.sql b/数据库脚本/业务查询.sql new file mode 100644 index 0000000..e0607c3 --- /dev/null +++ b/数据库脚本/业务查询.sql @@ -0,0 +1,165 @@ +--1. 比较条件查询 +--需求1: 查询所有欠费金额大于50的缴费记录 +--查询缴费记录表,找出欠费金额大于50的记录。 +SELECT * +FROM "tb_jiaofei" +WHERE "yingfje" > 50; + + +--需求2: 查询用水量大于200的所有用户的用水记录 +--查询用水记录表,找出用水量大于200的所有记录。 +SELECT * +FROM "tb_records" +WHERE "waterusage" > 200; + + +--2. 集合比较查询 +--需求1: 查询所有缴费记录中,欠费金额属于集合(50, 100)的记录 +--查询缴费记录表,找出欠费金额在50到100之间的记录。 +SELECT * +FROM "tb_jiaofei" +WHERE "yingfje" BETWEEN 50 AND 100; + + +--需求2: 查询所有用水记录,水量为集合(100, 200, 300)中的某一值的记录 +--查询用水记录表,找出水量在集合(100, 200, 300)中的记录。 +SELECT * +FROM "tb_records" +WHERE "waterusage" IN (100, 200, 300); + + +--3. 范围比较查询 +--需求1: 查询2024年1月的所有缴费记录 +--查询缴费记录表,找出2024年1月内的缴费记录。 +SELECT * +FROM "tb_jiaofei" +WHERE "niany" = '2024-01'; + + +--需求2: 查询所有用水记录,水量在150到300之间的记录 +--查询用水记录表,找出水量在150到300之间的记录。 +SELECT * +FROM "tb_records" +WHERE "waterusage" BETWEEN 150 AND 300; + + +--4. 字符串相似比较查询 +--需求1: 查询用户名包含“user”的所有用户 +--查询用户表,找出用户名中包含“user”的所有记录。 +SELECT * +FROM "tb_user" +WHERE "username" LIKE '%user%'; + + +--需求2: 查询所有水管异常记录,其异常类型包含“破裂” +--查询异常记录表,找出异常类型中包含“破裂”的所有记录。 +SELECT * +FROM "tb_yichang" +WHERE "yiclx" LIKE '%破裂%'; + + +--5. 多表连接查询 +--需求1: 查询所有缴费记录及其对应的用户信息 +--查询缴费记录表和用户表,查找每个缴费记录和相应用户的详细信息。 +SELECT "tb_jiaofei"."id", "tb_jiaofei"."zhangh", "tb_jiaofei"."yingfje", "tb_jiaofei"."shifje", "tb_user"."name", "tb_user"."tele" +FROM "tb_jiaofei" +JOIN "tb_user" ON "tb_jiaofei"."zhangh" = "tb_user"."id"; + + +--需求2: 查询所有用户的用水记录及对应的水价信息 +--查询用水记录表和水价表,找出每个用户的用水记录和相应的水价。 +SELECT "tb_user"."name", "tb_records"."waterusage", "tb_shuijia"."price" +FROM "tb_user" +JOIN "tb_records" ON "tb_user"."id" = "tb_records"."usid" +JOIN "tb_shuijia" ON "tb_records"."nmonth" = "tb_shuijia"."niany"; + + +--6. 嵌套查询 +--需求1: 查询所有欠费的用户的用水记录,只有当该用户的欠费金额大于50时才显示 +--首先查询所有欠费金额大于50的缴费记录,再查询这些用户的用水记录。 +SELECT * +FROM "tb_records" +WHERE "usid" IN ( + SELECT "zhangh" + FROM "tb_jiaofei" + WHERE "yingfje" > 50 +); + + +--需求2: 查询用水量超过300的用户的所有异常记录 +--查询用水量大于300的用户的异常记录。 +SELECT * +FROM "tb_yichang" +WHERE "zhangh" IN ( + SELECT "usid" + FROM "tb_records" + WHERE "waterusage" > 300 +); + + +--7. EXISTS查询 +--需求1: 查询所有有缴费记录的用户 +--查询所有有缴费记录的用户信息,使用EXISTS来判断用户是否有缴费记录。 +SELECT * +FROM "tb_user" u +WHERE EXISTS ( + SELECT 1 + FROM "tb_jiaofei" j + WHERE j."zhangh" = u."id" +); + + +--需求2: 查询所有有异常记录的用户 +--查询所有有异常记录的用户信息,使用EXISTS来判断用户是否有异常记录。 +SELECT * +FROM "tb_user" u +WHERE EXISTS ( + SELECT 1 + FROM "tb_yichang" y + WHERE y."zhangh" = u."id" +); + + +--8. 用户权限查询示例 +--需求1: 用户查询自己的用水记录 +--用户只能查询自己的用水记录,查询语句如下: +SELECT * +FROM "tb_records" +WHERE "usid" = '2024122121332710000009'; + + +--需求2: 员工查询所有的用水记录和异常记录 +--员工有权限查询所有用水记录和异常记录,查询语句如下: +SELECT * +FROM "tb_records"; + +SELECT * +FROM "tb_yichang"; + + +--需求3: 管理员查询所有用户的缴费记录 +--管理员可以查询所有用户的缴费记录,查询语句如下: +SELECT * +FROM "tb_jiaofei"; + + +--需求4: 员工查询所有未处理的异常记录 +--员工可以查询所有未处理的异常记录,查询语句如下: +SELECT * +FROM "tb_yichang" +WHERE "zhuangt" = '未处理'; + + +--9. 聚合查询 +--需求1: 查询每个用户的总用水量 +--该查询统计每个用户的总用水量。 +SELECT "usid", SUM("waterusage") AS "total_water_usage" +FROM "tb_records" +GROUP BY "usid"; + + +--需求2: 查询每月的总缴费金额 +--该查询统计每个月的总缴费金额。 +SELECT "niany", SUM("yingfje") AS "total_amount_due" +FROM "tb_jiaofei" +GROUP BY "niany"; \ No newline at end of file diff --git a/数据库脚本/删除脚本.sql b/数据库脚本/删除脚本.sql new file mode 100644 index 0000000..a189bc0 --- /dev/null +++ b/数据库脚本/删除脚本.sql @@ -0,0 +1,58 @@ +--1. 删除某个用户的用水记录 +--需求:员工删除某个用户的用水记录。 +DELETE FROM "tb_records" +WHERE "usid" = '2024122121332710000009'; + + +--2. 删除某个用户的缴费记录 +--需求:管理员删除某个用户的缴费记录。 +DELETE FROM "tb_jiaofei" +WHERE "Account" = '2024122121332710000009'; + + +--3. 删除水价记录 +--需求:管理员删除某个月的水价记录。 +DELETE FROM "tb_shuijia" +WHERE "niany" = '2024-02'; + + +--4. 删除异常记录 +--需求:管理员删除某个异常记录。 +DELETE FROM "tb_yichang" +WHERE "id" = '2024122121434710000040'; + + +--5. 删除管理员账户 +--需求:管理员删除自己账户。 +DELETE FROM "tb_admin" +WHERE "id" = '1234567890'; + + +--6. 删除特定用户记录 +--需求:管理员删除特定用户的信息,包括缴费记录、用水记录、异常记录等。 +DELETE FROM "tb_user" +WHERE "id" = '2024122121332710000009'; + + +--7. 删除指定的用水记录 +--需求:员工删除某个特定的用水记录。 +DELETE FROM "tb_records" +WHERE "id" = '2024122121493610000049'; + + +--8. 删除所有未处理的异常记录 +--需求:管理员删除所有状态为“未处理”的异常记录。 +DELETE FROM "tb_yichang" +WHERE "zhuangt" = '未处理'; + + +--9. 删除已经支付的缴费记录 +--需求:管理员删除所有已支付的缴费记录。 +DELETE FROM "tb_jiaofei" +WHERE "AmountPaid" = "AmountDue"; + + +--10. 删除水价表中特定日期的记录 +--需求:管理员删除某个特定日期的水价记录。 +DELETE FROM "tb_shuijia" +WHERE "niany" = '2024-02'; \ No newline at end of file diff --git a/数据库脚本/存储脚本.sql b/数据库脚本/存储脚本.sql new file mode 100644 index 0000000..c08b1ea --- /dev/null +++ b/数据库脚本/存储脚本.sql @@ -0,0 +1,61 @@ +--1. 存储过程:查询某用户的所有用水记录 +--需求:查询某个用户在所有月份的用水记录,返回 usid 对应的所有记录。 +CREATE OR REPLACE FUNCTION get_user_water_usage(user_id VARCHAR) +RETURNS TABLE(id VARCHAR, usid VARCHAR, nmonth DATE, waterusage DECIMAL) AS $$ +BEGIN + RETURN QUERY + SELECT id, usid, nmonth, waterusage + FROM "tb_records" + WHERE usid = user_id; +END; +$$ LANGUAGE plpgsql; + + +--2. 存储过程:查询某用户的缴费记录 +--需求:查询某个用户的所有缴费记录,返回缴费金额、缴费日期等信息。 +CREATE OR REPLACE FUNCTION get_user_payment_history(user_account VARCHAR) +RETURNS TABLE(PaymentID SERIAL, AmountDue DECIMAL, AmountPaid DECIMAL, PaymentDate TIMESTAMP) AS $$ +BEGIN + RETURN QUERY + SELECT PaymentID, AmountDue, AmountPaid, PaymentDate + FROM "tb_jiaofei" + WHERE Account = user_account; +END; +$$ LANGUAGE plpgsql; + + +--3. 存储过程:更新水价 +--需求:管理员更新某个月份的水价。 +CREATE OR REPLACE FUNCTION update_water_price(price DECIMAL, month DATE) +RETURNS VOID AS $$ +BEGIN + UPDATE "tb_shuijia" + SET price = price + WHERE niany = month; +END; +$$ LANGUAGE plpgsql; + + +--4. 存储过程:添加用户异常记录 +--需求:管理员或员工向异常记录表中插入一条新的异常记录。 +CREATE OR REPLACE FUNCTION add_exception_record(user_account VARCHAR, exception_type VARCHAR, status VARCHAR) +RETURNS VOID AS $$ +BEGIN + INSERT INTO "tb_yichang" (zhangh, yiclx, zhuangt, createtime) + VALUES (user_account, exception_type, status, NOW()); +END; +$$ LANGUAGE plpgsql; + + +--5. 存储过程:查询某个时间段内的缴费记录 +--需求:查询某个用户在指定时间段内的缴费记录。 +CREATE OR REPLACE FUNCTION get_payments_by_date_range(user_account VARCHAR, start_date DATE, end_date DATE) +RETURNS TABLE(PaymentID SERIAL, AmountDue DECIMAL, AmountPaid DECIMAL, PaymentDate TIMESTAMP) AS $$ +BEGIN + RETURN QUERY + SELECT PaymentID, AmountDue, AmountPaid, PaymentDate + FROM "tb_jiaofei" + WHERE Account = user_account + AND PaymentDate BETWEEN start_date AND end_date; +END; +$$ LANGUAGE plpgsql; \ No newline at end of file diff --git a/数据库脚本/建表及数据插入.sql b/数据库脚本/建表及数据插入.sql new file mode 100644 index 0000000..9e28c8e --- /dev/null +++ b/数据库脚本/建表及数据插入.sql @@ -0,0 +1,241 @@ +/* + Navicat Premium Dump SQL + + Source Server : 192.168.248.128_5432 + Source Server Type : PostgreSQL + Source Server Version : 90204 (90204) + Source Host : 192.168.248.128:5432 + Source Catalog : postgres + Source Schema : gaussdb + + Target Server Type : PostgreSQL + Target Server Version : 90204 (90204) + File Encoding : 65001 + + Date: 22/12/2024 16:43:38 +*/ + + +-- ---------------------------- +-- Table structure for tb_admin +-- ---------------------------- +DROP TABLE IF EXISTS "gaussdb"."tb_admin"; +CREATE TABLE "gaussdb"."tb_admin" ( + "id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "username" varchar(20) COLLATE "pg_catalog"."default", + "password" varchar(20) COLLATE "pg_catalog"."default", + "name" varchar(12) COLLATE "pg_catalog"."default", + "tele" varchar(11) COLLATE "pg_catalog"."default" +) +; + +-- ---------------------------- +-- Records of tb_admin +-- ---------------------------- +INSERT INTO "gaussdb"."tb_admin" VALUES ('1234567890', '1', '1', 'admin', '13245679845'); + +-- ---------------------------- +-- Table structure for tb_employee +-- ---------------------------- +DROP TABLE IF EXISTS "gaussdb"."tb_employee"; +CREATE TABLE "gaussdb"."tb_employee" ( + "id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "username" varchar(20) COLLATE "pg_catalog"."default", + "password" varchar(20) COLLATE "pg_catalog"."default", + "name" varchar(18) COLLATE "pg_catalog"."default", + "gender" varchar(10) COLLATE "pg_catalog"."default", + "numb" varchar(32) COLLATE "pg_catalog"."default", + "tele" varchar(11) COLLATE "pg_catalog"."default", + "idnum" varchar(18) COLLATE "pg_catalog"."default", + "age" int4, + "empposition" varchar(255) COLLATE "pg_catalog"."default", + "xuel" varchar(255) COLLATE "pg_catalog"."default", + "deptid" varchar(255) COLLATE "pg_catalog"."default" +) +; + +-- ---------------------------- +-- Records of tb_employee +-- ---------------------------- +INSERT INTO "gaussdb"."tb_employee" VALUES ('2024122111320410000001', 'admin1', '123456', '王天恩', '男', '1', '15967215736', '252627381538183547', 20, '经理', '本科', '行政'); +INSERT INTO "gaussdb"."tb_employee" VALUES ('2024122111325710000002', 'admin2', '123456', '吴殷琦', '男', '2', '13370942590', '362529200305083514', 21, '经理', '本科', '人事'); +INSERT INTO "gaussdb"."tb_employee" VALUES ('2024122121210310000001', 'admin3', '123456', '张三', '男', '3', '15965485731', '365784695635842684', 19, '专员', '本科', '销售'); +INSERT INTO "gaussdb"."tb_employee" VALUES ('2024122121222510000002', 'admin4', '123456', '李四', '女', '4', '14695725483', '378426544258935425', 24, 'HR专员', '硕士', '人事'); +INSERT INTO "gaussdb"."tb_employee" VALUES ('2024122121234010000003', 'admin5', '123456', '王五', '男', '5', '14726845351', '384521555247852541', 31, '专员', '本科', '销售'); +INSERT INTO "gaussdb"."tb_employee" VALUES ('2024122121244410000004', 'admin6', '123456', '赵六', '女', '6', '14364525417', '378425841635241572', 27, '经理', '博士', '技术'); +INSERT INTO "gaussdb"."tb_employee" VALUES ('2024122121265410000005', 'admin7', '123456', '吴七', '男', '7', '13784526842', '374152622415357184', 23, '专员', '大专', '销售'); +INSERT INTO "gaussdb"."tb_employee" VALUES ('2024122121302010000006', 'admin8', '123456', '周八', '男', '8', '16752348175', '348525655124836781', 28, '专员', '本科', '人事'); +INSERT INTO "gaussdb"."tb_employee" VALUES ('2024122121312410000007', 'admin9', '123456', '孙九', '女', '9', '15726482148', '367848255357415726', 24, '专员', '本科', '行政'); +INSERT INTO "gaussdb"."tb_employee" VALUES ('2024122121323610000008', 'admin10', '123456', '刘十', '男', '10', '16754285147', '374815268426845214', 32, '经理', '硕士', '财政'); + +-- ---------------------------- +-- Table structure for tb_jiaofei +-- ---------------------------- +DROP TABLE IF EXISTS "gaussdb"."tb_jiaofei"; +CREATE TABLE "gaussdb"."tb_jiaofei" ( + "id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "zhangh" varchar(255) COLLATE "pg_catalog"."default", + "niany" varchar(255) COLLATE "pg_catalog"."default", + "yingfje" float8, + "shifje" float8, + "createtime" timestamp(6), + "yuang" varchar(255) COLLATE "pg_catalog"."default" +) +; + +-- ---------------------------- +-- Records of tb_jiaofei +-- ---------------------------- +INSERT INTO "gaussdb"."tb_jiaofei" VALUES ('2024122121402010000029', '2024122121332710000009', '2024-01', 67.4, 67.4, '2024-12-21 21:40:20.055', '2024122111320410000001'); +INSERT INTO "gaussdb"."tb_jiaofei" VALUES ('2024122121405210000030', '2024122121335410000010', '2024-01', 57.6, 57.6, '2024-12-21 21:40:52.709', '2024122111325710000002'); +INSERT INTO "gaussdb"."tb_jiaofei" VALUES ('2024122121411310000031', '2024122121342710000011', '2024-01', 84.2, 84.2, '2024-12-21 21:41:13.266', '2024122111320410000001'); +INSERT INTO "gaussdb"."tb_jiaofei" VALUES ('2024122121412910000032', '2024122121345210000012', '2024-01', 67.3, 67.3, '2024-12-21 21:41:29.664', '2024122111320410000001'); +INSERT INTO "gaussdb"."tb_jiaofei" VALUES ('2024122121414510000033', '2024122121352210000013', '2024-01', 64.3, 64.3, '2024-12-21 21:41:45.457', '2024122111325710000002'); +INSERT INTO "gaussdb"."tb_jiaofei" VALUES ('2024122121420310000034', '2024122121354710000014', '2024-01', 94.3, 94.2, '2024-12-21 21:42:03.933', '2024122111320410000001'); +INSERT INTO "gaussdb"."tb_jiaofei" VALUES ('2024122121421810000035', '2024122121362410000015', '2024-01', 64.2, 64.2, '2024-12-21 21:42:18.704', '2024122121210310000001'); +INSERT INTO "gaussdb"."tb_jiaofei" VALUES ('2024122121423210000036', '2024122121364810000016', '2024-01', 54.1, 54.1, '2024-12-21 21:42:32.378', '2024122121210310000001'); +INSERT INTO "gaussdb"."tb_jiaofei" VALUES ('2024122121424710000037', '2024122121371810000017', '2024-01', 67.4, 67.4, '2024-12-21 21:42:47.282', '2024122111325710000002'); +INSERT INTO "gaussdb"."tb_jiaofei" VALUES ('2024122121430310000038', '2024122121374910000018', '2024-01', 67.1, 67.1, '2024-12-21 21:43:03.066', '2024122111320410000001'); + +-- ---------------------------- +-- Table structure for tb_records +-- ---------------------------- +DROP TABLE IF EXISTS "gaussdb"."tb_records"; +CREATE TABLE "gaussdb"."tb_records" ( + "id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "usid" varchar(255) COLLATE "pg_catalog"."default", + "nmonth" varchar(255) COLLATE "pg_catalog"."default", + "waterusage" varchar(255) COLLATE "pg_catalog"."default" +) +; + +-- ---------------------------- +-- Records of tb_records +-- ---------------------------- +INSERT INTO "gaussdb"."tb_records" VALUES ('2024122121493610000049', '2024122121332710000009', '2024-01', '315'); +INSERT INTO "gaussdb"."tb_records" VALUES ('2024122121495610000050', '2024122121335410000010', '2024-01', '216'); +INSERT INTO "gaussdb"."tb_records" VALUES ('2024122121501110000051', '2024122121342710000011', '2024-01', '328'); +INSERT INTO "gaussdb"."tb_records" VALUES ('2024122121501910000052', '2024122121345210000012', '2024-01', '143'); +INSERT INTO "gaussdb"."tb_records" VALUES ('2024122121502810000053', '2024122121352210000013', '2024-01', '186'); +INSERT INTO "gaussdb"."tb_records" VALUES ('2024122121503810000054', '2024122121354710000014', '2024-01', '405'); +INSERT INTO "gaussdb"."tb_records" VALUES ('2024122121505010000055', '2024122121362410000015', '2024-01', '256'); +INSERT INTO "gaussdb"."tb_records" VALUES ('2024122121505710000056', '2024122121364810000016', '2024-01', '248'); +INSERT INTO "gaussdb"."tb_records" VALUES ('2024122121510610000057', '2024122121371810000017', '2024-01', '203'); +INSERT INTO "gaussdb"."tb_records" VALUES ('2024122121511310000058', '2024122121374910000018', '2024-01', '218'); + +-- ---------------------------- +-- Table structure for tb_shuijia +-- ---------------------------- +DROP TABLE IF EXISTS "gaussdb"."tb_shuijia"; +CREATE TABLE "gaussdb"."tb_shuijia" ( + "id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "niany" varchar(255) COLLATE "pg_catalog"."default", + "price" float8 +) +; + +-- ---------------------------- +-- Records of tb_shuijia +-- ---------------------------- +INSERT INTO "gaussdb"."tb_shuijia" VALUES ('2024122121381610000019', '2024-01', 3.6); +INSERT INTO "gaussdb"."tb_shuijia" VALUES ('2024122121382510000020', '2024-02', 4.1); +INSERT INTO "gaussdb"."tb_shuijia" VALUES ('2024122121383710000021', '2024-03', 3.7); +INSERT INTO "gaussdb"."tb_shuijia" VALUES ('2024122121385010000022', '2024-04', 3.3); +INSERT INTO "gaussdb"."tb_shuijia" VALUES ('2024122121390110000023', '2024-05', 3.8); +INSERT INTO "gaussdb"."tb_shuijia" VALUES ('2024122121391310000024', '2024-06', 3.1); +INSERT INTO "gaussdb"."tb_shuijia" VALUES ('2024122121392510000025', '2024-07', 4.1); +INSERT INTO "gaussdb"."tb_shuijia" VALUES ('2024122121393210000026', '2024-08', 3.6); +INSERT INTO "gaussdb"."tb_shuijia" VALUES ('2024122121394010000027', '2024-09', 3.2); +INSERT INTO "gaussdb"."tb_shuijia" VALUES ('2024122121395210000028', '2024-10', 3.5); + +-- ---------------------------- +-- Table structure for tb_user +-- ---------------------------- +DROP TABLE IF EXISTS "gaussdb"."tb_user"; +CREATE TABLE "gaussdb"."tb_user" ( + "id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "username" varchar(20) COLLATE "pg_catalog"."default", + "password" varchar(20) COLLATE "pg_catalog"."default", + "name" varchar(18) COLLATE "pg_catalog"."default", + "gender" varchar(10) COLLATE "pg_catalog"."default", + "age" int4, + "tele" varchar(11) COLLATE "pg_catalog"."default", + "place" varchar(255) COLLATE "pg_catalog"."default" +) +; + +-- ---------------------------- +-- Records of tb_user +-- ---------------------------- +INSERT INTO "gaussdb"."tb_user" VALUES ('2024122121332710000009', 'user1', '123456', '李强', '男', 43, '13700000001', '北京朝阳区'); +INSERT INTO "gaussdb"."tb_user" VALUES ('2024122121335410000010', 'user2', '123456', '王丽', '女', 34, '13700000002', '上海浦东新区'); +INSERT INTO "gaussdb"."tb_user" VALUES ('2024122121342710000011', 'user3', '123456', '赵雷', '男', 51, '13700000003', '广州天河区'); +INSERT INTO "gaussdb"."tb_user" VALUES ('2024122121345210000012', 'user4', '123456', '孙娜', '女', 38, '13700000004', '深圳福田区'); +INSERT INTO "gaussdb"."tb_user" VALUES ('2024122121352210000013', 'user5', '123456', '周洋', '男', 43, '13700000005', '杭州西湖区'); +INSERT INTO "gaussdb"."tb_user" VALUES ('2024122121354710000014', 'user6', '123456', '陈涛', '男', 28, '13700000006', '成都锦江区'); +INSERT INTO "gaussdb"."tb_user" VALUES ('2024122121362410000015', 'user7', '123456', '刘红', '女', 25, '13700000007', '南京秦淮区'); +INSERT INTO "gaussdb"."tb_user" VALUES ('2024122121364810000016', 'user8', '123456', '郑敏', '女', 46, '13700000008', '武汉武昌区'); +INSERT INTO "gaussdb"."tb_user" VALUES ('2024122121371810000017', 'user9', '123456', '孙明', '男', 26, '13700000009', '重庆渝中区'); +INSERT INTO "gaussdb"."tb_user" VALUES ('2024122121374910000018', 'user10', '123456', '张艳', '男', 24, '13700000010', '天津和平区'); + +-- ---------------------------- +-- Table structure for tb_yichang +-- ---------------------------- +DROP TABLE IF EXISTS "gaussdb"."tb_yichang"; +CREATE TABLE "gaussdb"."tb_yichang" ( + "id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "zhangh" varchar(255) COLLATE "pg_catalog"."default", + "yiclx" varchar(255) COLLATE "pg_catalog"."default", + "zhuangt" varchar(255) COLLATE "pg_catalog"."default", + "createtime" timestamp(6) +) +; + +-- ---------------------------- +-- Records of tb_yichang +-- ---------------------------- +INSERT INTO "gaussdb"."tb_yichang" VALUES ('2024122121432410000039', '2024122121332710000009', '水管破裂', '未处理', '2024-12-21 21:43:24.747'); +INSERT INTO "gaussdb"."tb_yichang" VALUES ('2024122121434710000040', '2024122121335410000010', '欠费', '已处理', '2024-12-21 21:43:47.091'); +INSERT INTO "gaussdb"."tb_yichang" VALUES ('2024122121440610000041', '2024122121342710000011', '用水超标', '未处理', '2024-12-21 21:44:06.807'); +INSERT INTO "gaussdb"."tb_yichang" VALUES ('2024122121443310000042', '2024122121345210000012', '用水异常', '未处理', '2024-12-21 21:44:33.429'); +INSERT INTO "gaussdb"."tb_yichang" VALUES ('2024122121444910000043', '2024122121352210000013', '余额不足', '已处理', '2024-12-21 21:44:49.031'); +INSERT INTO "gaussdb"."tb_yichang" VALUES ('2024122121451110000044', '2024122121335410000010', '欠费', '未处理', '2024-12-21 21:45:11.442'); +INSERT INTO "gaussdb"."tb_yichang" VALUES ('2024122121463410000045', '2024122121345210000012', '水管破裂', '已处理', '2024-12-21 21:46:34.445'); +INSERT INTO "gaussdb"."tb_yichang" VALUES ('2024122121464510000046', '2024122121345210000012', '欠费', '未处理', '2024-12-21 21:46:45.795'); +INSERT INTO "gaussdb"."tb_yichang" VALUES ('2024122121470110000047', '2024122121371810000017', '欠费', '未处理', '2024-12-21 21:47:01.31'); +INSERT INTO "gaussdb"."tb_yichang" VALUES ('2024122121472810000048', '2024122121364810000016', '用水异常', '未处理', '2024-12-21 21:47:28.704'); + +-- ---------------------------- +-- Primary Key structure for table tb_admin +-- ---------------------------- +ALTER TABLE "gaussdb"."tb_admin" ADD CONSTRAINT "tb_admin_pkey" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table tb_employee +-- ---------------------------- +ALTER TABLE "gaussdb"."tb_employee" ADD CONSTRAINT "tb_employee_pkey" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table tb_jiaofei +-- ---------------------------- +ALTER TABLE "gaussdb"."tb_jiaofei" ADD CONSTRAINT "tb_jiaofei_pkey" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table tb_records +-- ---------------------------- +ALTER TABLE "gaussdb"."tb_records" ADD CONSTRAINT "tb_records_pkey" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table tb_shuijia +-- ---------------------------- +ALTER TABLE "gaussdb"."tb_shuijia" ADD CONSTRAINT "tb_shuijia_pkey" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table tb_user +-- ---------------------------- +ALTER TABLE "gaussdb"."tb_user" ADD CONSTRAINT "tb_user_pkey" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table tb_yichang +-- ---------------------------- +ALTER TABLE "gaussdb"."tb_yichang" ADD CONSTRAINT "tb_yichang_pkey" PRIMARY KEY ("id"); diff --git a/数据库脚本/更新及新增脚本.sql b/数据库脚本/更新及新增脚本.sql new file mode 100644 index 0000000..5188d57 --- /dev/null +++ b/数据库脚本/更新及新增脚本.sql @@ -0,0 +1,68 @@ +--1. 更新用户的联系电话 +--需求:管理员更新用户的联系电话. +UPDATE "tb_user" +SET "tele" = '13912345678' +WHERE "id" = '2024122121332710000009'; + + +--2. 更新用户的住址 +--需求:管理员更新用户的住址。 +UPDATE "tb_user" +SET "place" = '上海浦东新区' +WHERE "id" = '2024122121335410000010'; + + +--3. 更新水价 +--需求:管理员更新某月的水价。 +UPDATE "tb_shuijia" +SET "price" = '4.0' +WHERE "niany" = '2024-02'; + + +--4. 更新缴费记录的状态 +--需求:管理员更新缴费记录的状态为已处理。 +UPDATE "tb_jiaofei" +SET "yingfje" = "shifje" +WHERE "PaymentID" = 1; + + +--5. 更新异常记录的状态 +--需求:管理员将某一异常记录状态更新为已处理。 +UPDATE "tb_yichang" +SET "zhuangt" = '已处理' +WHERE "id" = '2024122121434710000040'; + + +--6. 更新用水记录的用水量 +--需求:员工更新用户某个月的用水量。 +UPDATE "tb_records" +SET "waterusage" = '350' +WHERE "id" = '2024122121493610000049'; + + +--7. 更新管理员账户的密码 +--需求:管理员更新自己账户的密码。 +UPDATE "tb_admin" +SET "password" = 'new_password' +WHERE "id" = '1234567890'; + + +--8. 更新用户的年龄 +--需求:管理员更新用户的年龄。 +UPDATE "tb_user" +SET "age" = 30 +WHERE "id" = '2024122121332710000009'; + + +--9. 更新水费记录的缴费金额 +--需求:管理员更新某用户的缴费记录。 +UPDATE "tb_jiaofei" +SET "AmountPaid" = '100.00' +WHERE "PaymentID" = 1; + + +--10. 更新用水记录的月份 +--需求:员工更新某用户的用水记录月份。 +UPDATE "tb_records" +SET "nmonth" = '2024-02' +WHERE "id" = '2024122121493610000049'; \ No newline at end of file diff --git a/数据库脚本/索引脚本.sql b/数据库脚本/索引脚本.sql new file mode 100644 index 0000000..ea0b052 --- /dev/null +++ b/数据库脚本/索引脚本.sql @@ -0,0 +1,48 @@ +--1. 索引:用户表 username 字段索引 +--需求:查询时常根据 username 查询用户信息,尤其是通过用户名登录。 +CREATE INDEX idx_tb_user_username ON "tb_user" ("username"); + + +--2. 索引:用户表 id 字段索引 +--需求:大多数查询操作涉及通过 id 字段来查找用户(如查询用户的缴费记录、用水记录等)。 +CREATE INDEX idx_tb_user_id ON "tb_user" ("id"); + + +--3. 索引:用水记录表 usid 字段索引 +--需求:用水记录查询时常使用 usid 来查找某个用户的所有用水记录。 +CREATE INDEX idx_tb_records_usid ON "tb_records" ("usid"); + + +--4. 索引:用水记录表 nmonth 字段索引 +--需求:需要按月份筛选用水记录,尤其是查询某个月份的用户用水记录。 +CREATE INDEX idx_tb_records_nmonth ON "tb_records" ("nmonth"); + + +--5. 索引:缴费记录表 Account 字段索引 +--需求:查询时常根据 Account 字段查找用户的缴费记录。 +CREATE INDEX idx_tb_jiaofei_account ON "tb_jiaofei" ("Account"); + + +--6. 索引:缴费记录表 Month 字段索引 +--需求:查询用户在某一月份的缴费记录。 +CREATE INDEX idx_tb_jiaofei_month ON "tb_jiaofei" ("Month"); + + +--7. 索引:异常记录表 zhangh 字段索引 +--需求:查询异常记录时,通常根据 zhangh 查找某个用户的异常记录。 +CREATE INDEX idx_tb_yichang_zhangh ON "tb_yichang" ("zhangh"); + + +--8. 索引:异常记录表 createtime 字段索引 +--需求:查询某个时间段内的异常记录,尤其是根据 createtime 时间字段进行筛选。 +CREATE INDEX idx_tb_yichang_createtime ON "tb_yichang" ("createtime"); + + +--9. 索引:水价表 niany 字段索引 +--需求:查询某个月份的水价,尤其是按照月份进行筛选。 +CREATE INDEX idx_tb_shuijia_niany ON "tb_shuijia" ("niany"); + + +--10. 复合索引:用户表 tele 和 place 字段索引 +--需求:根据用户的 tele 和 place 查询特定的用户。 +CREATE INDEX idx_tb_user_tele_place ON "tb_user" ("tele", "place"); \ No newline at end of file diff --git a/数据库脚本/视图脚本.sql b/数据库脚本/视图脚本.sql new file mode 100644 index 0000000..71a92ff --- /dev/null +++ b/数据库脚本/视图脚本.sql @@ -0,0 +1,76 @@ +--1. 视图:用户水费信息视图 +--需求:查询某用户的所有用水记录及其对应的水费(包括缴费情况)。 +CREATE VIEW "vw_user_water_info" AS +SELECT + u."id" AS "user_id", + u."username", + u."name" AS "user_name", + r."nmonth" AS "month", + r."waterusage" AS "water_usage", + p."price" AS "water_price", + r."waterusage" * p."price" AS "total_amount_due", + jf."AmountPaid" AS "amount_paid", + jf."AmountDue" AS "amount_due", + jf."PaymentDate" AS "payment_date" +FROM "tb_user" u +JOIN "tb_records" r ON u."id" = r."usid" +JOIN "tb_shuijia" p ON r."nmonth" = p."niany" +LEFT JOIN "tb_jiaofei" jf ON u."id" = jf."Account" AND r."nmonth" = jf."Month"; + + +--2. 视图:未处理的异常记录视图 +--需求:查询所有未处理的异常记录,包括异常类型和用户信息。 +CREATE VIEW "vw_pending_exceptions" AS +SELECT + e."id" AS "exception_id", + e."yiclx" AS "exception_type", + e."zhangh" AS "user_account", + u."name" AS "user_name", + e."createtime" AS "creation_time", + e."zhuangt" AS "status" +FROM "tb_yichang" e +JOIN "tb_user" u ON e."zhangh" = u."id" +WHERE e."zhuangt" = '未处理'; + + +--3. 视图:缴费记录概览视图 +--需求:查询用户的缴费记录概览,包括用户信息、缴费金额和缴费状态。 +CREATE VIEW "vw_payment_summary" AS +SELECT + u."id" AS "user_id", + u."name" AS "user_name", + jf."PaymentID", + jf."AmountDue" AS "due_amount", + jf."AmountPaid" AS "paid_amount", + jf."PaymentDate" AS "payment_date", + CASE + WHEN jf."AmountPaid" >= jf."AmountDue" THEN '已支付' + ELSE '未支付' + END AS "payment_status" +FROM "tb_jiaofei" jf +JOIN "tb_user" u ON jf."Account" = u."id"; + + +--4. 视图:用户用水统计视图 +--需求:统计每个用户每月的用水量。 +CREATE VIEW "vw_user_water_usage_summary" AS +SELECT + u."id" AS "user_id", + u."username", + u."name" AS "user_name", + r."nmonth" AS "month", + SUM(r."waterusage") AS "total_water_usage" +FROM "tb_user" u +JOIN "tb_records" r ON u."id" = r."usid" +GROUP BY u."id", r."nmonth"; + + +--5. 视图:水价历史记录视图 +--需求:查看水价的历史记录,查询每个月的水价。 +CREATE VIEW "vw_water_price_history" AS +SELECT + p."id" AS "price_id", + p."niany" AS "month", + p."price" AS "water_price" +FROM "tb_shuijia" p +ORDER BY p."niany"; \ No newline at end of file diff --git a/数据库脚本/触发器.txt b/数据库脚本/触发器.txt new file mode 100644 index 0000000..096bbbd --- /dev/null +++ b/数据库脚本/触发器.txt @@ -0,0 +1,95 @@ +--1. 触发器:在插入用水记录时,自动更新异常记录 +--需求: +--当插入一条新的用水记录时,系统会自动检查用水量是否超过预定的阈值,如果超过则在异常记录表中插入一条“用水超标”的异常记录。 +CREATE OR REPLACE FUNCTION check_water_usage() +RETURNS TRIGGER AS $$ +BEGIN + IF NEW.waterusage > 500 THEN + INSERT INTO "tb_yichang" (zhangh, yiclx, zhuangt, createtime) + VALUES (NEW.usid, '用水超标', '未处理', NOW()); + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trigger_check_water_usage +AFTER INSERT ON "tb_records" +FOR EACH ROW +EXECUTE FUNCTION check_water_usage(); + + +--2. 触发器:在更新水价时记录变更历史 +--需求: +--每当更新水价表时,记录水价变更历史,保留每次变更的水价和变更时间。 +CREATE OR REPLACE FUNCTION log_water_price_change() +RETURNS TRIGGER AS $$ +BEGIN + INSERT INTO "tb_water_price_history" (niany, old_price, new_price, change_time) + VALUES (NEW.niany, OLD.price, NEW.price, NOW()); + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trigger_log_water_price_change +AFTER UPDATE ON "tb_shuijia" +FOR EACH ROW +EXECUTE FUNCTION log_water_price_change(); + + +--3. 触发器:删除用户时,删除该用户的所有用水记录 +--需求: +--当删除用户时,自动删除该用户的所有用水记录,保持数据一致性。 +CREATE OR REPLACE FUNCTION delete_user_water_usage() +RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM "tb_records" + WHERE usid = OLD.id; + RETURN OLD; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trigger_delete_user_water_usage +AFTER DELETE ON "tb_user" +FOR EACH ROW +EXECUTE FUNCTION delete_user_water_usage(); + + +--4. 触发器:在插入异常记录时,检查用户的余额并更新状态 +--需求: +--当插入一条新的异常记录时,如果异常类型为“余额不足”,系统会检查用户的余额,若余额不足则自动将异常记录的状态更新为“已处理”。 +CREATE OR REPLACE FUNCTION update_exception_status_for_balance() +RETURNS TRIGGER AS $$ +BEGIN + IF NEW.yiclx = '余额不足' THEN + IF EXISTS (SELECT 1 FROM "tb_user_balance" WHERE usid = NEW.zhangh AND balance < 0) THEN + UPDATE "tb_yichang" + SET zhuangt = '已处理' + WHERE id = NEW.id; + END IF; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trigger_update_exception_status_for_balance +AFTER INSERT ON "tb_yichang" +FOR EACH ROW +EXECUTE FUNCTION update_exception_status_for_balance(); + + +--5. 触发器:在更新用户信息时,记录操作日志 +--需求: +--每当更新用户信息时,系统会自动将变更的用户信息(如名称、电话、地址等)记录到操作日志表中。 +CREATE OR REPLACE FUNCTION log_user_update() +RETURNS TRIGGER AS $$ +BEGIN + INSERT INTO "tb_user_update_log" (user_id, old_name, new_name, old_tele, new_tele, old_place, new_place, update_time) + VALUES (NEW.id, OLD.name, NEW.name, OLD.tele, NEW.tele, OLD.place, NEW.place, NOW()); + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trigger_log_user_update +AFTER UPDATE ON "tb_user" +FOR EACH ROW +EXECUTE FUNCTION log_user_update(); \ No newline at end of file