Oracle数据库设计(开放式基金交易平台)

  1. 开放式基金交易平台(数据库设计)
    1. 需求描述

随着我国经济水平的持续发展,金融产品也在不断发展。经中国证监会批准,开放式上市基金已在逐渐发展,为了开展此项业务,招商银行某分行需要一个基金交易平台,以便银行窗口人员在此平台上为广大用户提供基金交易管理的服务,同时为用户提供网上基金交易的便捷服务。该系统的功能分为前台和后台管理。

    1. 后台管理
      • 基金管理:添加基金公司、基金公司查询、停用基金公司、添加基金、基金信息查询、停用基金。
      • 客户账户管理:活期账户开户、查询活期账户信息、活期账户冻结与解冻、理财账户开户、查询理财账户信息、理财账户冻结与解冻、基金账户冻结与解冻。
      • 交易审核:审核基金购买和赎回。
    2. 前台管理
      • 信息查询:基金信息查询、理财资金查询、当日交易查询、未完成交易查询、历史交易查询。
      • 委托交易:购买、赎回、撤单。
      • 基金账户管理:基金账户开户、基金账户信息查询。
      • 理财账户:转账、修改密码。
    1. 问题分析

分析上面的需求,我们可以得出系统中应该有如下数据表。

系统中基金公司表(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)

邮编

email

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 表示完成

    1. 相关技术与工具

技术:

  1. 数据库基础
    • 表空间、数据库用户的创建
  2. 为字段建立约束
    • 主键约束
    • 检查约束
    • 唯一约束
    • 默认约束
    • 外键约束
  3. 使用SQL语句
    • 使用insert插入数据
    • 使用update修改数据
    • 使用delete删除数据
    • 使用select查询数据
    • 使用select联接查询
  4. 使用Oracle对象
    • 使用create sequence 创建序列
    • 使用create view 创建视图
    • 使用create procedure 创建存储过程
    • 使用create function 创建函数
    • 编写PL/SQL块
    • 使用create trigger 创建触发器
    • 使用crate package [body] 创建包和包体

工具:

    • PL/SQL Developer
    1. 阶段划分

开放式基金交易平台(数据库设计)实现阶段划分见表1-8。

表1-8  阶段任务及时间

阶段名称

使用时间

阶段实现

第一阶段

60分钟

  • 创建表空间,创建用户,创建数据表,添加约束,创建表之间关系

第二阶段

60分钟

  • 创建序列分别生成基金公司编号、基金代码、活期账号、理财账号、基金账户、合同号。
  • 创建触发器,使用序列,分别实现添加表数据的时候,自动添加基金公司编号、基金代码、活期账号、理财账号、基金账户、合同号。
  • 实现基金管理模块。

第三阶段

30分钟

  • 实现账户管理、理财账户模块。

第四阶段

60分钟

  • 实现客户账户管理、交易审核模块。

第五阶段

90分钟

  • 实现信息查询、委托交易模块。
      1. 第一阶段

实现:创建表空间,创建用户,创建数据表,添加约束,创建表之间关系。

  1. 创建表空间fund保存到“D:\”路径下,如下所示。

create tablespace fund

datafile 'd:\funddb_file.dbf' size 50M

  1. 创建用户test_user 指定默认表空间为fund,如下所示。

create user test_user

identified by test123456

default tablespace fund

  1. 授予用户角色和权限,如下所示。

grant connect,resource to test_user

  1. 使用test_user用户登录Oracle服务器,创建表。
    • 创建基金公司表(FundCompany)并添加约束。
    • 创建基金表(Fund)并添加约束。
    • 创建活期帐户表(CurrentAccount)并添加约束。
    • 创建理财账户表(FinancingAccount)并添加约束。
    • 创建基金账户表(FundAccount)并添加约束。
    • 创建购买的基金表(FundBuy)并添加约束。
    • 创建交易表(Trade)并添加约束。
    • 建立表之间的外键关系。
      1. 第二阶段

实现:创建序列分别生成基金公司编号、基金代码、活期账号、理财账号、基金账户、合同号;创建触发器,使用序列,分别实现添加表数据的时候,自动添加基金公司编号、基金代码、活期账号、理财账号、基金账户、合同号;实现基金管理模块。

创建基金管理程序包FundManager_pack,在程序包里创建过程分别实现,添加基金公司、添加基金公司基金、根据公司编号冻结/解冻基金公司、根据基金代码冻结/解冻基金、根据公司编号查询基金公司、根据公司编号查询基金、根据基金代码查询基金。

  1. 分别创建序列,生成基金公司编号、基金代码、活期账号、理财账号、基金账户、合同号。要求如下:
    • 基金公司编号,字母K+5位数字。
    • 基金代码,字母V+6位数字。
    • 活期账号,13位数字。
    • 理财账号,13位数字。
    • 基金账户,字母L+5位数字。
    • 合同号,字母Z+6位数字。
  2. 分别创建触发器,在添加表数据的时候,自动添加生成的主键编号。
  3. 添加基金公司“龙腾集团”,如图1-1所示。

图1-1  添加基金公司

  1. 根据基金公司添加基金,如图1-2所示。

图1-2  根据基金公司添加基金

  1. 根据基金公司查询基金信息,如图1-3所示。

图1-3  根据基金公司查询基金

基金公司、基金的冻结/解冻,只需修改基金公司、基金State的状态值(0表示正常,1表示冻结)。

      1. 第三阶段

实现:基金账户管理、理财账户模块。

创建基金账户管理程序包FundAccountManager_pack,在程序包里创建过程分别实现,基金账户开户、基金账户信息查询。

创建理财账户管理程序包FinancingAccountManager_pack,在程序包里创建过程分别实现,理财账户修改密码、实现转账功能。

  1. 实现基金账户开户。
    • 基金账户的编号不能重复。
    • 一个理财账号对同一个公司只能开一个基金账户。
  2. 实现基金账户信息查询。(查询指定理财帐户所开的所有基金账户的信息)
  3. 实现理财账户修改密码。(修改理财需要判断原密码是否输入正确,如果正确才能修改)。
  4. 实现转账功能。
    • 转帐分为活期转理财和理财转活期。
    • 活期转理财,需要判断活期的资金是否足够,如果不足,就不能进行转帐。
    • 活期转理财,需要判断活期密码是否正确,不正确不能转帐。
    • 活期转理财,活期转入的金额只加入到总金额和可用余额中。
    • 理财转活期,需要判断理财的活动资金是否充足,如果不充足不能进行转帐。
    • 理财转活期,需要判断密码是否正确。
    • 转帐时需要判断理财/活期是否被冻结。
      1. 第四阶段

实现:客户账户管理、交易审核模块。

创建客户账户管理程序包ClientAccountManager_pack,在程序包里创建过程分别实现,活期账户开户、查询活期账户信息、活期账户冻结与解冻、理财账户开户、查询理财账户信息、理财账户冻结与解冻、基金账户冻结与解冻。

创建交易审核程序包Auditing_pack,在程序包里创建过程分别实现,审核基金购买、赎回。

  1. 活期账户开户。(活期帐户账号编号不能重复)
  2. 查询活期账户信息。(可以根据活期账号精确查询,可以根据姓名模糊查询)
  3. 活期账户冻结与解冻。(冻结活期帐户时,必须冻结理财帐户,启用活期帐户时,不能启用理财帐户)
  4. 理财账户开户。
    • 一个活期帐户只能开一个理财帐户。
    • 活期帐户被冻结不能开理财帐户。
    • 活期帐户不存在不能开理财帐户。
    • 理财帐户的用户名称应该跟活期帐户的用户名相同。
    • 理财帐户的信息不允许进行修改。触发器
  5. 查询理财账户信息。(可以根据编号精确查询,可以根据姓名模糊查询)
  6. 理财账户冻结与解冻。(活期帐户被冻结,理财帐户不能被启用)
  7. 基金账户冻结与解冻。
    • 基金账户被冻结不能购买相对应公司的基金。
    • 基金公司被冻结,不能解冻基金账户。
      1. 第五阶段

实现:信息查询、委托交易模块。

创建信息查询程序包Information_pack,在程序包里创建过程分别实现,基金信息查询、理财资金查询、当日交易查询、未完成交易查询、历史交易查询。

创建委托交易程序包Consign_pack,在程序包里创建过程分别实现,基金的购买、赎回、撤单。

  1. 基金信息查询。(根据理财账号,查询所有购买成功的基金记录)
  2. 理财资金查询。(根据理财账号,查询理财资金(总金额,可用余额,冻结资金))
  3. 当日交易查询。(根据理财账号,获取系统时间查询当天的交易记录)
  4. 未完成交易查询。(根据理财账号,查询所有未完成的交易记录)
  5. 历史交易查询。(根据理财账号,查询所有交易记录)
  6. 购买基金。(根据基金账户,购买相应基金公司的基金)
    • 购买时判断是否开启所需要购买的基金所对应的公司的基金账户。
    • 购买时应判断该公司和该基金是否被冻结。
    • 购买时应判断购买下限是否大于购买数量。
    • 购买时应判断购买所需资金是否足够。
    • 购买时应判断该公司所对应的基金账户是否冻结,冻结了不能基金交易。
    • 购买成功后需要扣除交易手续费用,费率0.75%。
    • 购买时需要插入一条交易记录。
    • 购买成功后,未审核前,购买所需要使用的资金应该在冻结资金中,没有审核前,不能扣去这次交易的手续费用。
  7. 赎回基金。(根据基金账户,赎回购买的基金)
    • 赎回时应该判断该公司和该基金是否被冻结。
    • 赎回时应判断所拥有的基金的数量是否大于赎回的数量。
    • 赎回时应判断该公司所对应的基金账户是否被冻结,冻结了就不能进行交易。
    • 赎回成功后需要交手续费用,费率1.5%。
    • 赎回时需要插入一条交易记录。
    • 赎回成功后,赎回的基金的数量应该被减去,在冻结资金中应该加入等价的资金。
  8. 撤单。(根据基金账户,查询购买的基金,撤单是在购买成功后,未审核前,撤单可以把本次交易撤销掉,不能扣去手续费用)
    1. 项目总结

本项目从数据库设计的角度出发,依据前面学习的Oralce数据库知识,设计了开放式基金交易平台的数据库。该项目涵盖的内容比较丰富,涉及到数据库的三类完整性约束,实体间的1:n的联系,n:n的联系等。在项目中使用到了Oracle创建数据库表空间、用户、表、视图、序列、触发器、程序包、存储过程等等。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值