一、概要
作为《银行信贷管理系统》项目开发组的程序员,按要求完成:
数据库的创建;
数据表的创建;
数据的操作。
二、实施步骤和内容
《银行信贷管理系统》的E-R图如图2.7 所示,逻辑数据模型、物理数据模型如图2.8和图2.9所示。数据表字段名定义见表2.5。按以下设计完成数据库创建、数据表创建和数据操作任务:
三、代码
-- 创建数据表客户基本信息表: T_customer_info
CREATE TABLE IF NOT EXISTS T_customer_info(
Cust_id CHAR(10) NOT NULL COMMENT '客户编号,主键',
Cust_name VARCHAR(60) NOT NULL COMMENT '客户名称',
Legal_name VARCHAR(10) NOT NULL COMMENT '法人代表',
Reg_address VARCHAR(60) NOT NULL COMMENT '注册地址',
Post_code CHAR(6) NOT NULL COMMENT '邮政编码',
PRIMARY KEY(Cust_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 创建数据表客户信用等级表: T_cust_credit_level
CREATE TABLE IF NOT EXISTS T_cust_credit_level(
Cust_id CHAR(10) NOT NULL COMMENT '客户编号,主键',
Credit_level CHAR(2) NOT NULL COMMENT '信用级别',
Begin_date DATETIME NOT NULL COMMENT '评级有效起始日期',
End_date DATETIME NOT NULL COMMENT '评级有效终止日期',
PRIMARY KEY(Cust_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 创建数据表客户信用等级历史表: T_his_cust_credit_level ,其中 序号Id为自动增长字段
CREATE TABLE IF NOT EXISTS T_his_cust_credit_level(
Id INTEGER AUTO_INCREMENT COMMENT '序号,主键',
Cust_id CHAR(10) NOT NULL COMMENT '客户编号',
Credit_level CHAR(2) NOT NULL COMMENT '信用级别',
Begin_date DATETIME NOT NULL COMMENT '评级有效起始日期',
End_date DATETIME NOT NULL COMMENT '评级有效终止日期',
PRIMARY KEY(Id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- FOREIGN KEY: 创建数据表之间的关系
ALTER TABLE T_cust_credit_level ADD CONSTRAINT FOREIGN KEY(Cust_id)
REFERENCES T_customer_info(Cust_id)
ALTER TABLE T_his_cust_credit_level ADD CONSTRAINT FOREIGN KEY(Cust_id)
REFERENCES T_customer_info(Cust_id)
-- 将信用级别字段的默认值设置为"01"
ALTER TABLE T_cust_credit_level MODIFY Credit_level CHAR(2) DEFAULT '01'
-- 向三个表中插入测试数据
INSERT INTO T_customer_info VALUES('A001B0101','XX公司','张三','长沙市雨花区XX路999号','410001')
INSERT INTO T_cust_credit_level(Cust_id,Begin_date,End_date) VALUES('A001B0101','2022-01-01','2023-01-01')
INSERT INTO T_his_cust_credit_level(Cust_id,Credit_level,Begin_date,End_date) VALUES('A001B0101','01','2022-01-01','2023-01-01')
-- 查询客户名称为"xx公司"的信用等级
SELECT Credit_level FROM T_cust_credit_level WHERE Cust_id =
(SELECT Cust_id FROM T_customer_info WHERE Cust_name='xx公司')
SELECT a.Cust_id,a.Cust_name,b.Credit_level FROM T_customer_info AS a INNER JOIN T_cust_credit_level AS b
ON a.Cust_id = b.Cust_id
AND a.Cust_name = 'xx公司'
-- 创建视图查询客户的信用级别历史记录,视图列名显示为:客户名称、 信用级别、评级有效起始日期、评级有效中止日期
CREATE VIEW v_his_cust_credit_level
AS
SELECT b.Cust_name AS '客户名称',a.Credit_level AS '信用级别',a.Begin_date AS '评级有效起始日期',a.End_date AS '评级有效中止日期' FROM T_his_cust_credit_level AS a INNER JOIN T_customer_info AS b
ON a.Cust_id = b.Cust_id
-- 创建带输入参数的存储过程P_cust_credit_level, 根据输入参数,更新客户信用等级表,将更新前的记录插入到客户信用等级历史表
DELIMITER $$
CREATE PROCEDURE P_cust_credit_level(IN custId CHAR(10), IN creditLevel CHAR(2))
BEGIN
UPDATE T_cust_credit_level SET Credit_level=creditLevel
WHERE Cust_id = custId;
INSERT INTO T_his_cust_credit_level(Cust_id,Credit_level,Begin_date,End_date) VALUES(custId,creditLevel,NOW(),NOW());
END $$
DELIMITER ;
CALL p_cust_credit_level('A001B0101','02')