MySQL第七章,项目案例:保险管理系统

devtools/2024/11/14 11:36:53/

学了这么久来做一次项目,总结一下吧

保险管理系统首先来规划一下数据表

然后设计步骤

1. 规划数据库

首先,你需要确定系统需要哪些数据表。一个基本的保险管理系统可能包括以下几个表:

  • 用户表(Users):存储用户信息,如用户ID、用户名、密码、联系方式等。
  • 保险产品表(InsuranceProducts):存储保险产品信息,如产品ID、产品名称、保费、保险期限等。
  • 客户表(Customers):存储客户信息,如客户ID、姓名、联系方式、地址等。
  • 保单表(Policies):存储保单信息,如保单ID、客户ID、产品ID、生效日期、到期日期等。

2. 创建数据库和数据表

使用SQL语句创建数据库和数据表。例如,使用MySQL:

CREATE DATABASE InsuranceSystem;USE InsuranceSystem;CREATE TABLE Users (UserID INT AUTO_INCREMENT PRIMARY KEY,Username VARCHAR(50) NOT NULL UNIQUE,Password VARCHAR(255) NOT NULL,ContactInfo VARCHAR(100)
);CREATE TABLE InsuranceProducts (ProductID INT AUTO_INCREMENT PRIMARY KEY,ProductName VARCHAR(100) NOT NULL,Premium DECIMAL(10, 2) NOT NULL,Duration INT NOT NULL
);CREATE TABLE Customers (CustomerID INT AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(100) NOT NULL,ContactInfo VARCHAR(100),Address VARCHAR(255)
);CREATE TABLE Policies (PolicyID INT AUTO_INCREMENT PRIMARY KEY,CustomerID INT NOT NULL,ProductID INT NOT NULL,StartDate DATE NOT NULL,EndDate DATE NOT NULL,FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID),FOREIGN KEY (ProductID) REFERENCES InsuranceProducts(ProductID)
);

有些代码复制过去可能会出问题,很大概率是字符集问题,所以可以点击我头像,找找MySQL第二章有详细的创建表和插入数据

3. 插入测试数据

使用INSERT语句插入测试数据以模拟真实环境。例如

INSERT INTO Users (Username, Password, ContactInfo) VALUES ('admin', 'password123', 'admin@example.com');
INSERT INTO InsuranceProducts (ProductName, Premium, Duration) VALUES ('Life Insurance', 5000.00, 10);
INSERT INTO Customers (Name, ContactInfo, Address) VALUES ('John Doe', 'john.doe@example.com', '123 Main St');
INSERT INTO Policies (CustomerID, ProductID, StartDate, EndDate) VALUES (1, 1, '2023-01-01', '2033-01-01');

4. 使用存储过程实现业务处理

创建存储过程以封装复杂的业务逻辑。例如,创建一个存储过程来生成新的保单:

DELIMITER //CREATE PROCEDURE CreatePolicy (IN p_CustomerID INT,IN p_ProductID INT,IN p_StartDate DATE,IN p_Duration INT,OUT p_PolicyID INT
)
BEGINDECLARE v_EndDate DATE;SET v_EndDate = DATE_ADD(p_StartDate, INTERVAL p_Duration YEAR);INSERT INTO Policies (CustomerID, ProductID, StartDate, EndDate)VALUES (p_CustomerID, p_ProductID, p_StartDate, v_EndDate);SET p_PolicyID = LAST_INSERT_ID();
END //DELIMITER ;

调用存储过程:

CALL CreatePolicy(1, 1, '2023-04-01', 5, @PolicyID);
SELECT @PolicyID;

5. 创建视图

创建视图以简化复杂查询。例如,创建一个视图来显示客户的保单信息:

CREATE VIEW CustomerPolicies AS
SELECTc.CustomerID,c.Name AS CustomerName,p.PolicyID,ip.ProductName,p.StartDate,p.EndDate
FROMCustomers c
JOINPolicies p ON c.CustomerID = p.CustomerID
JOINInsuranceProducts ip ON p.ProductID = ip.ProductID;

6. 利用事务实现复杂的数据更新

使用事务来确保复杂数据更新操作的原子性、一致性、隔离性和持久性(ACID属性)。例如,更新客户信息和保单信息:

START TRANSACTION;UPDATE Customers
SET Name = 'Jane Doe', ContactInfo = 'jane.doe@example.com'
WHERE CustomerID = 1;UPDATE Policies
SET EndDate = DATE_ADD(EndDate, INTERVAL 1 YEAR)
WHERE CustomerID = 1;COMMIT;

如果在事务过程中发生错误,可以使用ROLLBACK来回滚所有更改:

START TRANSACTION;-- 尝试执行一些操作-- 如果发生错误
ROLLBACK;

以上步骤提供了一个基本的框架,你可以根据实际需求进行扩展和修改。在设计数据库和编写SQL语句时,务必考虑数据的完整性、安全性和性能。

以上的项目已经做的差不多了,现在该自己动手来试试,以下是一些对上面项目的练习

练习 1: 数据库设计与优化

  1. 设计新表:设计一个用于存储客户索赔信息的表(Claims)。该表应包含索赔ID、客户ID、保单ID、索赔金额、索赔日期和索赔状态等字段。

  2. 索引优化:为上述所有表添加适当的索引,以提高查询性能。例如,在用户表(Users)上为用户名(Username)添加唯一索引,在保单表(Policies)上为客户ID(CustomerID)和产品ID(ProductID)添加复合索引。

  3. 数据完整性:使用外键约束、检查约束和默认值等数据库特性来确保数据的完整性。例如,确保保单表中的客户ID和产品ID分别引用客户表和保险产品表的主键。

练习 2: SQL查询与更新

  1. 查询练习:编写SQL查询语句来检索特定条件下的数据。例如,查询所有购买了特定保险产品的客户,或查询在某个日期范围内提交的索赔。

  2. 更新练习:使用UPDATE语句更新表中的数据。例如,将某个客户的联系方式更新为新的电话号码,或将某个保单的到期日期延长一年。

  3. 删除练习:使用DELETE语句删除不再需要的数据。例如,删除已过期的保单或已解决的索赔记录。

练习 3: 存储过程与函数

  1. 创建存储过程:编写一个存储过程来处理客户索赔的提交。该存储过程应接收索赔信息作为输入参数,并插入到索赔表中。同时,它还应更新保单表中的相关字段(如索赔状态)。

  2. 创建函数:编写一个函数来计算某个客户的总保费支出。该函数应接收客户ID作为输入参数,并返回该客户购买的所有保险产品的保费总和。

练习 4: 视图与报表

  1. 创建视图:创建一个视图来显示每个客户的保单概览,包括保单ID、产品名称、保费、生效日期和到期日期等信息。

  2. 复杂查询与视图:使用视图和JOIN操作来创建更复杂的查询。例如,查询每个客户的总保费支出、总索赔金额以及未解决的索赔数量。

练习 5: 事务管理

  1. 简单事务:编写一个包含多个SQL语句的事务,这些语句要么全部成功执行,要么全部回滚。例如,在提交客户索赔时,你可能需要同时更新客户表、保单表和索赔表中的数据。

  2. 错误处理:在事务中添加错误处理逻辑。例如,如果某个SQL语句执行失败,则回滚整个事务并显示适当的错误消息。

  3. 嵌套事务:了解并实践嵌套事务的概念(如果数据库支持)。这通常涉及在现有事务中启动新的事务,并了解它们之间的相互影响。

练习 6: 性能测试与优化

  1. 基准测试:使用基准测试工具或自定义脚本来测量数据库的性能。例如,测量执行特定查询所需的时间,并比较在不同索引策略下的性能差异。

  2. 优化查询:根据基准测试的结果,优化SQL查询和数据库设计以提高性能。例如,通过添加索引、重写查询或使用更有效的JOIN策略来减少查询时间。

  3. 监控与分析:使用数据库监控工具来分析查询性能、资源利用率和潜在的性能瓶颈。根据分析结果调整数据库配置或优化查询。


http://www.ppmy.cn/devtools/133914.html

相关文章

Spring声明式事务 编程式事务

Spring声明式事务 1.事务的概念 1.1编程式事务 编程式事务是指手动编写程序来管理事务,即通过编写代码的方式直接控制事务的提交和回滚 Connection conn …; ​ try{ //开启事务:关闭事务的自动提交 conn.setAutoCommit(false); //业务代码 … //提交…

【Linux篇】面试——用户和组、文件类型、权限、进程

目录 一、权限管理 1. 用户和组 (1)相关概念 (2)用户命令 ① useradd(添加新的用户账号) ② userdel(删除帐号) ③ usermod(修改帐号) ④ passwd&…

2024年计算机视觉与图像处理国际学术会议 (CVIP 2024)

目录 大会简介 主办单位,协办单位 组委会 主讲嘉宾 征稿主题 参会方式 会议议程 重要信息 会议官网:iccvip.org 大会时间:2024年11月15日-17日 大会地点:中国 杭州 大会简介 2024年计算机视觉与图像处理国际学术会议(C…

从0开始机器学习--Day16--神经网络作业

题目:构建逻辑回归模型来识别数字0-9 代码如下: import numpy as np from scipy.io import loadmat import scipy.optimize as opt from sklearn.metrics import classification_report# 定义函数sigmoid,方便后续假设函数以sigmoid&#x…

软考:缓存持久化和过期策略,淘汰策略

持久化: RDC(把全量数据以二进制压缩文件的方式存储到磁盘文件),快照,体积小,性能更高(会fork一个子进程来处理保存操作)恢复更快。 AOF(每一个写命令都通过write函数追…

行业类别-智能制造-子类别工业4.0-细分类别物联网应用-应用场景智能工厂建设

1.大纲分析 针对您提出的题目“4.0 行业类别-智能制造-子类别工业4.0-细分类别物联网应用-应用场景智能工厂建设”,以下是一个详细的大纲分析,旨在深入探讨该应用场景下的各个方面: 一、引言 智能制造与工业4.0概述 智能制造的定义与发展趋…

内置RTK北斗高精度定位的4G执法记录仪、国网供电服务器记录仪

内置RTK北斗高精度定位的4G执法记录仪、国网供电服务器记录仪BD311R 发布时间: 2024-10-23 11:28:42 一、 产品图片: 二、 产品特性: 4G性能:支持2K超高清图传,数据传输不掉帧,更稳定。 独立北…

Enhanced Table如何安装?

githup项目地址: https://github.com/fbaligand/kibana-enhanced-table/releases/tag/v1.12.0