Oracle数据库设计(开放式基金交易平台)
目录
项目实战1... 开放式基金交易平台(数据库设计) 1
1.1 需求描述... 1
1.2 问题分析... 1
1.3 相关技术与工具... 4
1.4 阶段划分... 5
1.5 项目总结... 10
- 开放式基金交易平台(数据库设计)
- 需求描述
随着我国经济水平的持续发展,金融产品也在不断发展。经中国证监会批准,开放式上市基金已在逐渐发展,为了开展此项业务,招商银行某分行需要一个基金交易平台,以便银行窗口人员在此平台上为广大用户提供基金交易管理的服务,同时为用户提供网上基金交易的便捷服务。该系统的功能分为前台和后台管理。
- 后台管理
- 基金管理:添加基金公司、基金公司查询、停用基金公司、添加基金、基金信息查询、停用基金。
- 客户账户管理:活期账户开户、查询活期账户信息、活期账户冻结与解冻、理财账户开户、查询理财账户信息、理财账户冻结与解冻、基金账户冻结与解冻。
- 交易审核:审核基金购买和赎回。
- 前台管理
- 信息查询:基金信息查询、理财资金查询、当日交易查询、未完成交易查询、历史交易查询。
- 委托交易:购买、赎回、撤单。
- 基金账户管理:基金账户开户、基金账户信息查询。
- 理财账户:转账、修改密码。
- 问题分析
分析上面的需求,我们可以得出系统中应该有如下数据表。
系统中基金公司表(FundCompany)字段及说明见表1-1。
表1-1 FundCompany表的字段及说明
字段名称 |
数据类型 |
说明 |
CompanyId |
varchar2(20) |
公司ID,主键 |
Name |
varchar2(30) |
公司名称 |
Content |
clob |
公司简介 |
Money |
number(10,2) |
注册资金,单位万元 |
State |
number(1,0) |
公司状态,0表示正常,1表示冻结 |
系统中基金表(Fund)字段及说明见表1-2。
表1-2 Fund表的字段及说明
字段名称 |
数据类型 |
说明 |
FundNo |
varchar2(20) |
基金代码ID,主键 |
CompanyId |
varchar2(20) |
基金公司ID,外键引用FundCompany表的CompanyId |
FundName |
varchar2(20) |
基金名称 |
Price |
number(10,2) |
基金净值 |
FundType |
number(1,0) |
基金类型,1表示开放式,2表示封闭式 |
Invest |
number(1,0) |
投资方向,1股票,2债券,3货币,4混合 |
BuyLimit |
number(5,0) |
购买下限 |
Ischange |
number(1,0) |
是否可转换,0表示不可转换,1表示可转换 |
YearRate |
number(6,5) |
年利率,必须是0-1之间的数字 |
ApplyDate |
date |
申请日期 |
State |
number(1,0) |
基金状态,0表示正常,1表示冻结 |
系统中活期帐户表(CurrentAccount)字段及说明见表1-3。
表1-3 CurrentAccount表的字段及说明
字段名称 |
数据类型 |
说明 |
CurrentAccount |
varchar2(20) |
活期帐户账号,主键 |
CurrentPassword |
varchar2(20) |
活期帐户密码 |
DepositSum |
number(10,2) |
活期账户存款金额 |
CardType |
number(1,0) |
证件类型,1为身份证,2为房产证,3为驾驶证 |
CardNo |
varchar2(20) |
证件号码 |
Name |
varchar2(10) |
开户人姓名 |
Address |
varchar2(100) |
家庭地址 |
Phone |
varchar2(20) |
电话 |
Sex |
number(1,0) |
性别,1表示男,2表示女 |
OpenAccDate |
date |
开户日期 |
State |
number(1,0) |
帐号状态,1表示不可转帐,0表示可用 |
系统中理财账户表(FinancingAccount)字段及说明见表1-4。
表1-4 FinancingAccount表的字段及说明
字段名称 |
数据类型 |
说明 |
FinancingAccount |
varchar2(20) |
理财帐户账号,主键 |
FinancePassWord |
varchar2(20) |
理财帐户密码 |
MoneyType |
number(1,0) |
货币类型,1表示人民币,2表示美元,3表示欧元 |
AccountBalance |
number(10,2) |
理财帐户金额 |
EnableBalance |
number(10,2) |
可用余额 |
CongealFund |
number(10,2) |
冻结资金,购买基金所对应的资金(未审核) |
State |
number(1,0) |
状态,1表示冻结,0表示可用 |
CurrentAccount |
varchar2(20) |
活期账户账号,外键引用CurrentAccount表的CurrentAccount |
系统中基金账户表(FundAccount)字段及说明见表1-5。
表1-5 FundAccount表的字段及说明
字段名称 |
数据类型 |
说明 |
FundAccount |
varchar2(20) |
基金账户账号,主键 |
FinancingAccount |
varchar2(20) |
理财帐户账号,外键引用FinancingAccount表的FinancingAccount |
CompanyID |
varchar2(20) |
公司ID,外键引用FundCompany表的CompanyID |
CardType |
number(1,0) |
证件类型,1为身份证,2为房产证,3为驾驶证 |
CardNo |
varchar2(20) |
证件号码 |
Name |
varchar2(10) |
姓名 |
Sex |
number(1,0) |
性别,1表示男,0表示女 |
Address |
varchar2(100) |
家庭地址 |
Phone |
varchar2(20) |
电话 |
PostNum |
varchar2(10) |
邮编 |
|
varchar2(30) |
电子邮件 |
createDate |
date |
开户日期 |
CongealState |
number(1,0) |
冻结状态(冻结之后该客户不能购买),0 表示未冻结 ,1 表示冻结 |
系统中购买的基金表(FundBuy)字段及说明见表1-6。
表1-6 FundBuy的字段及说明
字段名称 |
数据类型 |
说明 |
PactNo |
varchar2(20) |
合同号,主键 |
FinancingAccount |
varchar2(20) |
理财帐户账号,外键引用FinancingAccount表的FinancingAccount |
FundNO |
varchar2(20) |
基金账户账号,外键引用Fund表的FundNO |
Fundname |
varchar2(20) |
购买基金的名称 |
Fundnumber |
number(5,0) |
购买基金的份数 |
BuyDate |
date |
购买日期 |
State |
number(1,0) |
购买基金的状态,0表示未审核,1表示审核 |
系统中交易表(Trade)字段及说明见表1-7。
表1-7 Trade表的字段及说明
字段名称 |
数据类型 |
说明 |
PactNo |
varchar2(20) |
合同号,外键引用FundBuy表PactNo |
FinancingAccount |
varchar2(20) |
理财帐户账号,外键引用FinancingAccount表的FinancingAccount |
FundNo |
varchar2(20) |
基金编号,外键引用Fund表的FundNO |
FundName |
varchar2(20) |
基金名称 |
DealType |
number(1,0) |
交易类型,1 表示购买,2 表示撤单,3 表示赎回 |
FundQuotient |
number(5,0) |
基金份数 |
BargainPrice |
number(10,2) |
成交单价 |
DealMoney |
number(10,2) |
交易金额 |
FundAccount |
varchar2(20) |
基金账户账号,外键引用FundAccount表的FundAccount |
DealDate |
date |
交易日期 |
Status |
number(1,0) |
交易状态,0 表示未完成,1 表示完成 |
- 相关技术与工具
技术:
- 数据库基础
- 表空间、数据库用户的创建
- 为字段建立约束
- 主键约束
- 检查约束
- 唯一约束
- 默认约束
- 外键约束
- 使用SQL语句
- 使用insert插入数据
- 使用update修改数据
- 使用delete删除数据
- 使用select查询数据
- 使用select联接查询
- 使用Oracle对象
- 使用create sequence 创建序列
- 使用create view 创建视图
- 使用create procedure 创建存储过程
- 使用create function 创建函数
- 编写PL/SQL块
- 使用create trigger 创建触发器
- 使用crate package [body] 创建包和包体
工具:
- PL/SQL Developer
- 阶段划分
开放式基金交易平台(数据库设计)实现阶段划分见表1-8。
表1-8 阶段任务及时间
阶段名称 |
使用时间 |
阶段实现 |
第一阶段 |
60分钟 |
|
第二阶段 |
60分钟 |
|
第三阶段 |
30分钟 |
|
第四阶段 |
60分钟 |
|
第五阶段 |
90分钟 |
|
- 第一阶段
实现:创建表空间,创建用户,创建数据表,添加约束,创建表之间关系。
- 创建表空间fund保存到“D:\”路径下,如下所示。
create tablespace fund datafile 'd:\funddb_file.dbf' size 50M |
- 创建用户test_user 指定默认表空间为fund,如下所示。
create user test_user identified by test123456 default tablespace fund |
- 授予用户角色和权限,如下所示。
grant connect,resource to test_user |
- 使用test_user用户登录Oracle服务器,创建表。
- 创建基金公司表(FundCompany)并添加约束。
- 创建基金表(Fund)并添加约束。
- 创建活期帐户表(CurrentAccount)并添加约束。
- 创建理财账户表(FinancingAccount)并添加约束。
- 创建基金账户表(FundAccount)并添加约束。
- 创建购买的基金表(FundBuy)并添加约束。
- 创建交易表(Trade)并添加约束。
- 建立表之间的外键关系。
- 第二阶段
实现:创建序列分别生成基金公司编号、基金代码、活期账号、理财账号、基金账户、合同号;创建触发器,使用序列,分别实现添加表数据的时候,自动添加基金公司编号、基金代码、活期账号、理财账号、基金账户、合同号;实现基金管理模块。
创建基金管理程序包FundManager_pack,在程序包里创建过程分别实现,添加基金公司、添加基金公司基金、根据公司编号冻结/解冻基金公司、根据基金代码冻结/解冻基金、根据公司编号查询基金公司、根据公司编号查询基金、根据基金代码查询基金。
- 分别创建序列,生成基金公司编号、基金代码、活期账号、理财账号、基金账户、合同号。要求如下:
- 基金公司编号,字母K+5位数字。
- 基金代码,字母V+6位数字。
- 活期账号,13位数字。
- 理财账号,13位数字。
- 基金账户,字母L+5位数字。
- 合同号,字母Z+6位数字。
- 分别创建触发器,在添加表数据的时候,自动添加生成的主键编号。
- 添加基金公司“龙腾集团”,如图1-1所示。
图1-1 添加基金公司
- 根据基金公司添加基金,如图1-2所示。
图1-2 根据基金公司添加基金
- 根据基金公司查询基金信息,如图1-3所示。
图1-3 根据基金公司查询基金
基金公司、基金的冻结/解冻,只需修改基金公司、基金State的状态值(0表示正常,1表示冻结)。
- 第三阶段
实现:基金账户管理、理财账户模块。
创建基金账户管理程序包FundAccountManager_pack,在程序包里创建过程分别实现,基金账户开户、基金账户信息查询。
创建理财账户管理程序包FinancingAccountManager_pack,在程序包里创建过程分别实现,理财账户修改密码、实现转账功能。
- 实现基金账户开户。
- 基金账户的编号不能重复。
- 一个理财账号对同一个公司只能开一个基金账户。
- 实现基金账户信息查询。(查询指定理财帐户所开的所有基金账户的信息)
- 实现理财账户修改密码。(修改理财需要判断原密码是否输入正确,如果正确才能修改)。
- 实现转账功能。
- 转帐分为活期转理财和理财转活期。
- 活期转理财,需要判断活期的资金是否足够,如果不足,就不能进行转帐。
- 活期转理财,需要判断活期密码是否正确,不正确不能转帐。
- 活期转理财,活期转入的金额只加入到总金额和可用余额中。
- 理财转活期,需要判断理财的活动资金是否充足,如果不充足不能进行转帐。
- 理财转活期,需要判断密码是否正确。
- 转帐时需要判断理财/活期是否被冻结。
- 第四阶段
实现:客户账户管理、交易审核模块。
创建客户账户管理程序包ClientAccountManager_pack,在程序包里创建过程分别实现,活期账户开户、查询活期账户信息、活期账户冻结与解冻、理财账户开户、查询理财账户信息、理财账户冻结与解冻、基金账户冻结与解冻。
创建交易审核程序包Auditing_pack,在程序包里创建过程分别实现,审核基金购买、赎回。
- 活期账户开户。(活期帐户账号编号不能重复)
- 查询活期账户信息。(可以根据活期账号精确查询,可以根据姓名模糊查询)
- 活期账户冻结与解冻。(冻结活期帐户时,必须冻结理财帐户,启用活期帐户时,不能启用理财帐户)
- 理财账户开户。
- 一个活期帐户只能开一个理财帐户。
- 活期帐户被冻结不能开理财帐户。
- 活期帐户不存在不能开理财帐户。
- 理财帐户的用户名称应该跟活期帐户的用户名相同。
- 理财帐户的信息不允许进行修改。触发器
- 查询理财账户信息。(可以根据编号精确查询,可以根据姓名模糊查询)
- 理财账户冻结与解冻。(活期帐户被冻结,理财帐户不能被启用)
- 基金账户冻结与解冻。
- 基金账户被冻结不能购买相对应公司的基金。
- 基金公司被冻结,不能解冻基金账户。
- 第五阶段
实现:信息查询、委托交易模块。
创建信息查询程序包Information_pack,在程序包里创建过程分别实现,基金信息查询、理财资金查询、当日交易查询、未完成交易查询、历史交易查询。
创建委托交易程序包Consign_pack,在程序包里创建过程分别实现,基金的购买、赎回、撤单。
- 基金信息查询。(根据理财账号,查询所有购买成功的基金记录)
- 理财资金查询。(根据理财账号,查询理财资金(总金额,可用余额,冻结资金))
- 当日交易查询。(根据理财账号,获取系统时间查询当天的交易记录)
- 未完成交易查询。(根据理财账号,查询所有未完成的交易记录)
- 历史交易查询。(根据理财账号,查询所有交易记录)
- 购买基金。(根据基金账户,购买相应基金公司的基金)
- 购买时判断是否开启所需要购买的基金所对应的公司的基金账户。
- 购买时应判断该公司和该基金是否被冻结。
- 购买时应判断购买下限是否大于购买数量。
- 购买时应判断购买所需资金是否足够。
- 购买时应判断该公司所对应的基金账户是否冻结,冻结了不能基金交易。
- 购买成功后需要扣除交易手续费用,费率0.75%。
- 购买时需要插入一条交易记录。
- 购买成功后,未审核前,购买所需要使用的资金应该在冻结资金中,没有审核前,不能扣去这次交易的手续费用。
- 赎回基金。(根据基金账户,赎回购买的基金)
- 赎回时应该判断该公司和该基金是否被冻结。
- 赎回时应判断所拥有的基金的数量是否大于赎回的数量。
- 赎回时应判断该公司所对应的基金账户是否被冻结,冻结了就不能进行交易。
- 赎回成功后需要交手续费用,费率1.5%。
- 赎回时需要插入一条交易记录。
- 赎回成功后,赎回的基金的数量应该被减去,在冻结资金中应该加入等价的资金。
- 撤单。(根据基金账户,查询购买的基金,撤单是在购买成功后,未审核前,撤单可以把本次交易撤销掉,不能扣去手续费用)
- 项目总结
本项目从数据库设计的角度出发,依据前面学习的Oralce数据库知识,设计了开放式基金交易平台的数据库。该项目涵盖的内容比较丰富,涉及到数据库的三类完整性约束,实体间的1:n的联系,n:n的联系等。在项目中使用到了Oracle创建数据库表空间、用户、表、视图、序列、触发器、程序包、存储过程等等。
Oracle数据库设计(开放式基金交易平台)相关推荐
- Oracle数据库设计要做到五戒
众所周知,数据库设计的好坏直接关系到数据库运行的效率.根据笔者的经验,对于提升数据库性能来说,合理的数据库设计,比升级服务器的硬件配置,还要来的有效.但是,笔者无论是在跟同事合作,又或者是在论坛上跟相 ...
- 超大型Oracle数据库设计实例
超大型系统的特点为: 1.处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB: 2.系统必须提供实时响应功能,系统需不停机运行,要求系统有很高的可用性及可扩展性. 这篇是笔者针对 ...
- oracle报错数据复数,Oracle数据库设计策略及规范
Oracle数据库设计策略及规范 设计策略及规范 1. 目的 定义Oracle数据库设计规范,作为数据库规划.设计.开发以及维护人员的技术参考资料.用以规范和指导相关人员的设计行为. 2. 概述 本文 ...
- Oracle数据库的乘号是什么,(Oracle数据库设计实验指导书yk.doc
(Oracle数据库设计实验指导书yk Oracle数据库设计实验指导书 <Oracle 数据库设计>课程实验 一.本实验课在培养实验能力中的地位及作用 Oracle 数据库设计是软件工程 ...
- 七、Oracle 数据库设计
1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体. 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证 ...
- oracle数据库纵表设计,oracle 数据库设计-数据库表设计
在数据库设计中,我的工作中经常会分析怎样商业逻辑中的表格如何设计.再设计表的关系之前 需要先了解关系型数据库特点 1关系型数据库,是指采用了关系模型来组织数据的数据库: 2.关系型数据库的最大特点就是 ...
- Oracle学习总结(2)——Oracle数据库设计总结(三大范式)
一.实体与表对应关系 表<=>实体,字段<=>属性. 二.表与表的关系(实体间的关系):一对一.一对多.多对多 一对一:一条记录只对应其他表中的一条记录有关系 学生基本信息表t ...
- Oracle数据库设计方法
数据库设计师建立数据库及应用系统的技术,是信息系统开发和建设中的核心技术,具体来说,数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及应用系统,使之能够有效存储数据,满足各种用户 ...
- oracle数据库设计思维导图,Oracle
WITH子查询也称为CTE (Common Table Expression),是ANSI SQL-99标准的一部分.ORACLE从9i开始引入WITH子查询,把它被称作SUBQUERY FACTOR ...
最新文章
- mysql 常用函数循环_近30个MySQL常用函数,看到就是学到,纯干货收藏!
- itunes app 下载链接的几种表现形式
- 单片机课程设计数字心率计_如何选购合适的PH计
- NetBeans Java EE技巧9:从数据库创建JSF应用程序
- gulp webpack整合
- Guid.NewGuid().ToString()的几种格式 (转)
- 转载:[Matlab]结构体(Struct)
- Vue学习笔记之03v-on事件监听
- 一键环境安装包无法修改网站目录提示.user.ini权限问题解决方法
- C语言输入输出格式符
- 玩通透 全面解析Windows双系统引导菜单
- ecu根据什么信号对点火提前角_【科普】汽车ECU现状及发展趋势
- PgAdmin导入导出单表数据---解决PgAdmin导入单表数据报错乱码问题
- 【关于为什么要刷力扣的思考】记第二次周赛AK
- Openmv(一)OpenMV图像处理的基本方法
- 基础设施即代码(Infrastructure as Code)
- Ajax异步请求原理和过程
- unity制作mmd视频
- 画世界怎么用光影_水彩画中的光与影/世界绘画经典教程
- 撸了郭霖大神写的Framework源码笔记,Android篇