银行核心业务系统案例张英任务现有一商业银行需要用计算机完成其核心业务系统完成任务的步骤•准备工作•需求分析–限定业务范围–业务流程及数据调查•建立模型•物理实现•测试、运行与维护需求分析-业务限定业务限定:–存款账户的开户、存款、取款、行内转账、挂失、销户;–存款及客户信息的查询和统计。开户业务流程开户业务流程:–用户填写基本信息–根据用户身份证号查询该用户是否已经是本行客户•如果不是,先登记基本信息,再开户。•如果是,则直接开户。–开户:确定存款账户类型及金额;填写账户相关信息;用户预留密码;打印存折或发卡开户需要数据项•客户身份证编号•客户姓名•客户所在城市•联系电话•性别•职业•帐号•开户日期•账户余额•账户类型•银行操作人员•开户银行分支机构存款业务流程存款业务流程–用户提供账号(通过卡或存折)和存款数额信息–查询指定账号是否存在,如果不存在,则提示错误并终止业务;否则继续。–收取相应数量的现金,更改相应账户的余额,记录本次业务明细信息。存款数据项•帐号•存款日期•存款额•账户余额•银行操作人员取款业务流程取款业务流程:–用户提供账户,输入密码,取款数额–查询指定账号是否存在,如果不存在,则提示错误并终止业务;否则继续。–查询用户输入的密码与系统预留密码是否一致,如果不一致,则重新输入密码;否则继续。–查询指定账户是否为正常账户,是则继续,否则提示错误并终止业务。–查询指定账户的余额是否足够支取,如果不够,则提示错误并终止业务;否则继续。–给用户支取相应数量的现金,更改相应账户的余额,记录本次业务明细信息。取款数据项•帐号•取款日期•取款额•账户余额•银行操作人员行内转账业务流程行内转账业务流程:–用户提供转出账户,输入密码、对方账户和转账数额信息–查询上述指定账号是否都存在,如果任一个账户不存在,则提示错误并终止业务;否则继续。–查询用户输入的密码与系统预留密码是否一致,如果不一致,则提示重新输入密码;否则继续。–查询转出账户是否为正常账户,是则继续,否则提示错误并终止业务。–查询转出账户的余额是否足够转账,如果不够,则提示错误并终止业务;否则继续。–更改转出账户与对方账户的余额,记录本次业务明细信息。行内转账数据项•转出帐号•对方账号•转账金额•转账日期•银行操作人员其它业务流程其他业务流程请同学们讨论–挂失–销户–查询余额、交易明细需要哪些数据项?需求数据汇总•开户:客户身份证编号,客户姓名,客户所在城市,联系电话,性别,职业、帐号,开户日期,账户余额,账户类型,银行操作人员,开户银行分支机构•存款:帐号,存款日期,存款额,账户余额,银行操作人员•取款:帐号,取款日期,取款额,账户余额,银行操作人员•转账:转出帐号,对方账号,金额,转账日期,银行操作人员•销户:帐号,账户余额,销户日期,账户状态•挂失:帐号,挂失日期,账户状态•客户查询:账号,余额,存取款历史(时间,业务类型,发生额,当时余额)问题这些业务数据代表的现实世界如何在计算机内表示?用几张表存储?数据模型•在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。通俗地讲数据模型就是现实世界的模拟。•数据模型应满足三方面要求–能比较真实地模拟现实世界–容易为人所理解–便于在计算机上实现这三方面的要求是否很容易都满足?数据模型层次(1)概念模型也称信息模型按用户的观点对数据和信息建模。(2)结构模型按计算机系统的观点对数据建模。主要包括网状模型、层次模型、关系模型,面向对象模型等。信息世界概念化形式化概念数据模型结构数据模型现实世界计算机世界面向用户面向计算机客观对象的抽象过程概念模型中的基本概念(1)实体(Entity)客观存在并可相互区别的事物称为实体。(2)属性(Attribute)实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。(3)域(Domain)属性的取值范围称为该属性的域。(4)超码与侯选码、主码唯一标识实体的属性集称为超码。唯一标识实体的最小属性集称为侯选码。根据需要,选择一个候选码作为主码。主属性:包含在任意一个候选码中的属性。非主属性概念模型中的基本概念(续)•实体型(EntityType)与实体集(EntitySet)•联系(Relationship)反应实体集之间的关联。一对一联系(1:1)银行和正行长之间的联系一对多联系(1:n)客户和账户之间的联系多对多联系(m:n)客户和银行之间的联系E-R图•实体型(或实体集)–用矩形表示,矩形框内写明实体名。•属性–用椭圆形表示,并用无向边将其与相应的实体连接起来;–候选码:属性下加下划线客户身份证号性别姓名出生日期E-R图支行管理行长111:1联系客户服务银行mnm:n联系支行隶属存款账户1n1:n联系案例E-R图m1姓名身份证号电话账号类型余额状态开户日期客户存款账户职业对应1n金额类型日期名称编码银行分支机构性别城市经手人n1交易对方账号经手人逻辑模型—关系模型•银行表•客户表属性名含义类型长度要求Branch_id机构编码字符4主码Branch_name机构名称变长字符40非空属性名含义类型长度要求Customer_id身份证号字符18主码Cust_name姓名变长字符20非空Cust_phone电话变长字符13Cust_gender性别字符1“M”男”F“女Cust_job职业变长字符30Cust_city所在城市变长字符30账户表属性名含义类型长度要求Customer_id身份证号字符18外码Branch_id机构编码字符4外码Account_no账号字符8主码balance余额数值14,2build_date开户日期日期10Acct_type账户类型字符1“0”活期,”数字“表示定期月数status账户状态字符1”0“正常,”1”挂失,”2“销户Suspend_date挂失日期日期Close_date销户日期日期Account_pwd密码字符6Staff_id经手人字符18外码存、取款、转账明细表deposit属性名含义类型长度要求Serial_no流水号数值10,0主码Account_no账号字符8外码Oper_date发生日期日期amount金额数值11,2balance余额数值11,2oper_type类型字符1“C”存款”Q“取款”S“转入”Z“转出Account_vs往来账号字符8外码Staff_id经手人字符18外码银行职员表属性名含义类型长度要求staff_id职员编号字符18主码Staff_name姓名变长字符15Branch_id机构编码字符4Staff_role职位字符10staff_pwd密码字符15二维表(或关系)元组属性主码:customer_id关系的完整性约束•新增一个客户,身份证号可以不填吗?身份证号可以重复吗?实体完整性(主属性非空)•客户的性别栏可以填写什么?用户定义的完整性•账户表中customer_id栏是否可以出现一个在客户表customer_id栏中不存在的值?参照完整性外码•Customer的主键?•Account的主键?注意:一个客户可以有多个账号Cust_id称为account表的外码参照完整性学号姓名性别专业号年龄801张三女0119802李四男0120803王五男0120804赵六女0220805钱七男0219专业号专业名01信息02数学03计算机外码的取值:•或者取空值•或者等于它引用的主码的一个值。关系操作•类型查询、增加、删除、修改•语言SQL查询操作•找出成都的客户------选择•查看所有客户的身份证号和姓名-------投影•查看所有客户的身份证号、姓名和存款账户信息------连接连接举例学号计算机会计学号金融000180900001860002769800026600038870000390rsR.学号计算机会计S.学号金融000180900001860002769800026600038870000390学号计算机会计金融000180908600027698660003887090等值连接自然连接SQL概述•SQL(StructuredQueryLanguage)是关系数据库标准语言,最早由IBM公司研制,并在其SYSTEMR系统中实现。•SQL标准:–SQL-86(ANSI1986)(ISO1987)–SQL-89(ANSI1989)–SQL-92orSQL2(ANSI1992)–SQL-99orSQL3(ANSI1999)–SQL2003SQL命令动词SQL语言的动词SQL功能动词数据定义CREATE,DROP,ALTER数据查询SELECT数据操纵INSERT,UPDATEDELETE数据控制GRANT,REVOKE有关sql语句的说明•SQL是大小写无关的•每个SQL语句用半角分号“;”结束•在SQL语句中字符数据用半角单引号“‘”括起ORACLESQL中常用基本数据类型•字符型–char(n)固定长度字符串–varchar2(n)变长长度字符串•数值型–Int整数–number(p,d)小数,p为有效数位,d为小数位数。•日期时间型–date.日期型(4位年)。一般格式:yyyy-mm-dd例如:2012-1-27定义基本表CREATETABLE表名(列名数据类型[列级完整性约束条件][,...][,表级完整性约束条件]);常用完整性约束条件•常用列级完整性约束条件–NOTNULL–PRIMARYKEY仅适用于单属性主码–UNIQUE–CHECK()定义域•常用表级完整性约束条件–PRIMARYKEY(主码)–CHECK(条件)–FOREIGNKEY(外码)REFERENCES表名(与外码对应的主码)–UNIQUE(属性)创建系统中的表•Customer表CREATETABLEcustomer(cust_idCHAR(18)primarykey,cust_namevarCHAR2(20)notnull,cust_cityvarchar2(30),cust_phonevarCHAR2(13),cust_genderCHAR(1),cust_jobvarCHAR2(30));•ACCOUNT表•查看表的结构向表中添加数据•插入数据:向指定表中插入一条或多条元组;INSERTINTO表名(属性列表)VALUES(常量列表]…);•INTO子句–属性列的顺序可与表定义中的顺序不一致–可以只指定部分属性列(必须包含主属性)–如果不指定属性列:表示要插入的是一条完整的元组,且属性列顺序与表定义中的顺序一致(不建议使用)•练习:插入一个客户及其开户数据SQL查询查询语句的一般格式:SELECT目标列表达式FROM表名[,表名][WHERE条件表达式][GROUPBY列名[HAVING条件表达式]][ORDERBY列名[ASC|DESC]];各子句含义–SELECT子句:指定要显示的属性列表达式(即结果关系的属性)–FROM子句:指定查询需要的表–WHERE子句:指定查询条件–GROUPBY子句:分组统计。对表中满足查询条件的行按指定列分组,值相等的行为一个组。通常会在每组中使用集函数(即完成统计功能的函数)。–HAVING短语:筛选出满足指定条件的组–ORDERBY子句:对查询结果按指定顺序排序简单查询•从表Customer中查询Cust_id,cust_name。–selectcust_id,cust_namefromcustomer;•查询表Customer的全部数据。–“*”表示表中所有字段。–SELECT*FROMCustomer•查询表Account中有开户记录的客户身份证号。–SELECTDISTINCTcust_idFROMaccount条件查询运算符含义举例=、、、=、=、!=、比较大小balance100000NOT、AND、OR多重条件balance20000andbalance100000BETWEEN...AND…确定范围between20000and10000