数据库原理实验(openGauss)金融场景化实验

Posted BkbK-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库原理实验(openGauss)金融场景化实验相关的知识,希望对你有一定的参考价值。

金融场景化实验

一、金融数据模型

假设A市C银行为了方便对银行数据的管理和操作,引入了华为openGauss数据库。针对C银行的业务,本实验主要将对象分为客户、银行卡、理财产品、保险和基金。因此,针对这些数据库对象,本实验假设C银行的金融数据库存在着以下关系:客户可以办理银行卡,同时客户可以购买不同的银行产品,如理财产品,基金和保险。那么,根据C银行的对象关系,本实验给出了相应的关系模式和ER图,并对其进行较为复杂的数据库操作。

1.E-R图

在这里插入图片描述

2.关系模式

对于C银行中的5个对象,分别建立属于每个对象的属性集合,具体属性描述如下:

  • 客户(客户编号、客户名称、客户邮箱,客户身份证,客户手机号,客户登录密码)
  • 银行卡(银行卡号,银行卡类型)
  • 理财产品(产品名称,产品编号,产品描述,购买金额,理财年限)
  • 保险(保险名称,保险编号,保险金额,适用人群,保险年限,保障项目)
  • 基金(基金名称,基金编号,基金类型,基金金额,风险等级,基金管理者)

对象之间的关系:

  • 一个客户可以办理多张银行卡
  • 一个客户可以购买多个理财产品,同一类理财产品可由多个客户购买
  • 一个客户可以购买多个基金,同一类基金可由多个客户购买
  • 一个客户可以购买多个保险,同一类保险可由多个客户购买

根据关系分析,设计关系模式如下:
在这里插入图片描述

说明:

  • 由于一个客户可以办理多张银行卡,所以银行卡表引用客户表的客户编号作为外键。
  • 由于一个客户可以购买多个理财产品,同一类理财产品可由多个客户购买。所以生成关系表——资产表。资产表引用客户表的商品编号作为外键,引用理财产品表的产品编号作为外键,并且添加商品状态、商品数量、商品收益和购买时间等属性。
  • 客户和保险、客户和基金的关系同理,所以资产表同样作为生成的关系表,修改资产表的理财产品编号为商品编号,商品编号引用自理财产品表、保险和基金表的编号。

3.物理模型

对象及属性对应的编号为:

  • Client(c_id,c_name,c_mail,c_id_card,c_phone,c_password)
  • bank_card(b_number,b_type,b_c_id)
  • finances_product(p_name,p_id,p_description,p_amount,p_year)
  • insurance(i_name,i_id,i_amount,i_person,i_year,i_project)
  • fund(f_name,f_id,f_type,f_amount,risk_level,f_manager)
  • property(pro_id,pro_c_id,pro_pif_id,pro_type,pro_status,pro_quantity,pro_income,pro_purchase_time)

说明:
资产表(property)中由于商品编号(pro_pif_id)字段引用自理财产品表、保险和基金表的id字段,为了防止三商品的id字段相互冲突,添加商品类型(pro_type)字段区分三种商品。并且资产表添加资产编号(pro_id)字段作为主键。

Client(客户)表

字段名称字段类型约束说明
c_idINTEGERPRIMARY KEY客户编码
c_nameVARCHAR(100)NOT NULL客户名称
c_mailCHAR(30)UNIQUE客户邮箱
c_id_cardCHAR(20)UNIQUENOT NULL
c_phoneCHAR(20)UNIQUENOT NULL
c_passwordCHAR(20)NOT NULL客户登录密码

bank_card(银行卡)表

字段名称字段类型约束说明
b_numberCHAR(30)PRIMARY KEY银行卡号
b_typeCHAR(20)银行卡类型
b_c_idINTEGERNOT NULLFOREIGN KEY

finances_product(理财产品)信息表

字段名称字段类型约束说明
p_nameVARCHAR(100)NOT NULL产品名称
p_idINTEGERPRIMARY KEY产品编号
p_descriptionVARCHAR(4000)产品描述
p_amountINTEGER购买金额
p_year INTEGER理财年限

insurance(保险)表

字段名称字段类型约束说明
i_nameVARCHAR(100)NOT NULL保险名称
i_idINTEGERPRIMARY KEY保险编号
i_amountINTEGER保险金额
i_personCHAR(20)适用人群
i_yearINTEGER保险年限
i_projectVARCHAR(200)保障项目

fund(基金)表

字段名称字段类型约束说明
f_nameVARCHAR(100)NOT NULL基金名称
f_idINTEGERPRIMARY KEY基金编号
f_typeCHAR(20)基金类型
f_amountINTEGER基金金额
risk_levelCHAR(20)NOT NULL风险等级
f_managerINTEGERNOT NULL基金管理者

property(资本)表

字段名称字段类型约束说明
pro_idINTEGERPRIMARY KEY资产编号
pro_c_idVARCHAR(100)NOT NULL FOREIGN KEY客户编号(说明:本字段引用自client表的c_id字段)
pro_pif_idINTEGERNOT NULL FOREIGN KEY商品编号(说明:本字段引用自finances_product表、insurance表和fund表三个表的id字段)
pro_typeINTEGERNOT NULL商品类型(说明:1表示理财产品;2表示保险;3表示基金)
pro_statusCHAR(20)商品状态
pro_quantityINTEGER商品数量
pro_incomeINTEGER商品收益
pro_purchase_timeDATE购买时间

4.创建数据表

创建金融数据库finance

切换到omm用户,以操作系统用户omm登录数据库主节点。

su - omm

启动数据库服务

gs_om -t start

使用gsql工具登陆数据库

gsql -d postgres -p 26000 -r

创建数据库finance

CREATE DATABASE finance ENCODING 'UTF8' template = template0;

连接finance数据库

\\connect finance

创建名为finance的schema,并设置finance为当前的schema

CREATE SCHEMA finance;

将默认搜索路径设为finance

SET search_path TO finance;

在这里插入图片描述

客户信息表的创建

在SQL编辑框中输入如下语句,创建客户信息表client。

删除表client

DROP TABLE IF EXISTS finance.client;

创建表client

CREATE TABLE finance.client
(
        c_id INT PRIMARY KEY,
        c_name VARCHAR(100) NOT NULL,
        c_mail CHAR(30) UNIQUE,
        c_id_card CHAR(20) UNIQUE NOT NULL,
        c_phone CHAR(20) UNIQUE NOT NULL,
        c_password CHAR(20) NOT NULL
);

在这里插入图片描述

银行卡信息表的创建

在SQL编辑框中输入如下语句,创建银行卡信息表bank_card。

删除表bank_card

DROP TABLE IF EXISTS finance.bank_card;

创建表bank_card

CREATE TABLE finance.bank_card
(
        b_number CHAR(30) PRIMARY KEY,
        b_type CHAR(20),
        b_c_id INT NOT NULL
);

在这里插入图片描述

理财产品信息表的创建

创建理财产品信息表finances_product。

删除表finances_product

DROP TABLE IF EXISTS finance.finances_product;
CREATE TABLE finance.finances_product
(
        p_name VARCHAR(100) NOT NULL,
        p_id INT PRIMARY KEY,
        p_description VARCHAR(4000),
        p_amount INT,
        p_year INT
);

在这里插入图片描述

保险信息表的创建

在SQL编辑框中输入如下语句,创建保险信息表insurance。

删除表insurance

DROP TABLE IF EXISTS finance.insurance;

创建表insurance

CREATE TABLE finance.insurance
(
        i_name VARCHAR(100) NOT NULL,
        i_id INT PRIMARY KEY,
        i_amount INT,
        i_person CHAR(20),
        i_year INT,
        i_project VARCHAR(200)
);

在这里插入图片描述

基金信息表的创建

在SQL编辑框中输入如下语句,创建保险信息表fund。

删除表fund

DROP TABLE IF EXISTS finance.fund;

创建表fund

CREATE TABLE finance.fund
(
        f_name VARCHAR(100) NOT NULL,
        f_id INT PRIMARY KEY,
        f_type CHAR(20),
        f_amount INT,
        risk_level CHAR(20) NOT NULL,
        f_manager INT NOT NULL
);

在这里插入图片描述

资产信息表的创建

在SQL编辑框中输入如下语句,创建资产信息表property。

删除表property。

DROP TABLE IF EXISTS finance.property;

创建表property

CREATE TABLE finance.property
(
        pro_id INT PRIMARY KEY,
pro_c_id INT NOT NULL,
        pro_pif_id INT NOT NULL,
        pro_type INT NOT NULL,
        pro_status CHAR(20),
        pro_quantity INT,
        pro_income INT,
        pro_purchase_time DATE
);

在这里插入图片描述

5.插入表数据

为了实现对表数据的相关操作,本实验需要以执行SQL语句的方式对金融数据库的相关表插入部分数据。

client表进行数据初始化

执行insert操作

INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (1,'张一','zhangyi@huawei.com','340211199301010001','18815650001','gaussdb_001');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (2,'张二','zhanger@huawei.com','340211199301010002','18815650002','gaussdb_002');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (3,'张三','zhangsan@huawei.com','340211199301010003','18815650003','gaussdb_003');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (4,'张四','zhangsi@huawei.com','340211199301010004','18815650004','gaussdb_004');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (5,'张五','zhangwu@huawei.com','340211199301010005','18815650005','gaussdb_005');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (6,'张六','zhangliu@huawei.com','340211199301010006','18815650006','gaussdb_006');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (7,'张七','zhangqi@huawei.com','340211199301010007','18815650007','gaussdb_007');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (8,'张八','zhangba@huawei.com','340211199301010008','18815650008','gaussdb_008');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (9,'张九','zhangjiu@huawei.com','340211199301010009','18815650009','gaussdb_009');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (10,'李一','liyi@huawei.com','340211199301010010','18815650010','gaussdb_010');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (11,'李二','lier@huawei.com','340211199301010011','18815650011','gaussdb_011');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (12,'李三','lisan@huawei.com','340211199301010012','18815650012','gaussdb_012');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (13,'李四','lisi@huawei.com','340211199301010013','18815650013','gaussdb_013');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (14,'李五','liwu@huawei.com','340211199301010014','18815650014','gaussdb_014');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (15,'李六','liliu@huawei.com','340211199301010015','18815650015','gaussdb_015');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (16,'李七','liqi@huawei.com','340211199301010016','18815650016','gaussdb_016');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (17,'李八','liba@huawei.com','340211199301010017','18815650017','gaussdb_017');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (18,'李九','lijiu@huawei.com','340211199301010018','18815650018','gaussdb_018');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (19,'王一','wangyi@huawei.com','340211199301010019','18815650019','gaussdb_019');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (20,'王二','wanger@huawei.com','340211199301010020','18815650020','gaussdb_020');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (21,'王三','wangsan@huawei.com','340211199301010021','18815650021','gaussdb_021');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (22,'王四','wangsi@huawei.com','340211199301010022','18815650022','gaussdb_022');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (23,'王五','wangwu@huawei.com','340211199301010023','18815650023','gaussdb_023');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (24,'王六','wangliu@huawei.com','340211199301010024','18815650024','gaussdb_024');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (25,'王七','wangqi@huawei.com','340211199301010025','18815650025','gaussdb_025');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (26,'王八','wangba@huawei.com','340211199301010026','18815650026','gaussdb_026');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (27,'王九','wangjiu@huawei.com','340211199301010027','18815650027','gaussdb_027');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (28,'钱一','qianyi@huawei.com','340211199301010028','18815650028','gaussdb_028');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (29,'钱二','qianer@huawei.com','340211199301010029','18815650029','gaussdb_029');
INSERT INTO finance.client(c_id,c_name,c_mail,c_id_card,c_phone,c_password) VALUES (30,'钱三','qiansan@huawei.com','340211199301010030','18815650030','gaussdb_030');

在这里插入图片描述
查询插入结果

select count(*) from finance.client;
select * from finance.client;

在这里插入图片描述

bank_card表进行数据初始化

执行insert操作

INSERT INTO finance.bank_card(b_number,b_type,b_c_id) VALUES ('6222021302020000001','信用卡',1);
INSERT INTO finance.bank_card(b_number,b_type,b_c_id) VALUES ('6222021302020000002','信用卡',3);
INSERT INTO finance.bank_card(b_number,b_type,b_c_id) VALUES ('6222021302020000003','信用卡',5);
INSERT INTO finance.bank_card(b_number,b_type,b_c_id) VALUES ('6222021302020000004','信用卡',7);
INSERT INTO finance.bank_card(b_number,b_type,b_c_id) VALUES ('6222021302020000005','信用卡',9);
INSERT INTO finance.bank_card(b_number,b_type,b_c_id) VALUES ('6222021302020000006','信用卡',10);
INSERT 以上是关于数据库原理实验(openGauss)金融场景化实验的主要内容,如果未能解决你的问题,请参考以下文章

数据库原理实验(openGauss)实验报告

数据库原理实验(openGauss)视图

数据库原理实验(openGauss)数据库的备份与恢复

数据库原理实验(openGauss) 使用JDBC连接数据库

数据库原理实验(openGauss) 使用JDBC连接数据库

数据库原理实验(openGauss)事务与并发控制