【ATM自动取款机后台数据库设计】
在设计ATM自动取款机系统的后台数据库时,我们需要考虑的主要目的是实现各种银行服务,包括开户、取款、存款、查询余额、转账以及处理挂失等操作。以下是对数据库设计的关键知识点的详细说明:
1. **数据库结构设计**:
- 使用PowerDesigner (PD) 工具完成ER图设计,以建立实体关系模型,明确各个实体(如客户、卡信息、交易信息)及其属性和关联。
- 数据库名设定为`ATM`,存储位置在`F:\bank`目录下,文件增长率为15%,确保数据库文件的合理扩展。
2. **表的创建**:
- `userInfo`表用于存储客户信息,包括`customerID`(主键,自动编号),`customerName`,`PID`(身份证号,唯一性约束),`telephone`(电话号码,格式限制),和`address`(居住地址)。
- `cardInfo`表存储银行卡信息,包含`cardID`(主键,遵循特定格式),`curType`(货币类型,默认RMB),`savingType`(存款类型),`openDate`(开户日期),`openMoney`(开户金额),`balance`(余额),`pass`(密码),`IsReportLoss`(是否挂失),和`customerID`(外键,关联`userInfo`表)。
- `transInfo`表记录交易信息,包括`transDate`(交易日期),`cardID`(外键),`transType`(交易类型),`transMoney`(交易金额),和`remark`(备注)。
3. **添加测试数据**:
- 插入测试客户开户数据,如张三和李四的开户信息,包括身份证、电话、地址、开户金额、存款类型和卡号。
4. **常规业务处理**:
- 不使用事务处理的业务操作包括取款、存款、修改密码、挂失、余额查询、资金流通余额和盈利结算的统计。
- 取款和存款时,需要在`transInfo`表中添加交易记录,并更新`cardInfo`表的余额。
- 修改密码涉及更新`cardInfo`表的`pass`字段。
- 挂失操作需标记`IsReportLoss`为“是”。
- 余额查询根据条件筛选定期存款的`cardInfo`表记录。
- 资金流通平衡计算:存款视为资金流入,取款视为资金贷出,结合存款和贷款利率进行盈利结算。
5. **SQL查询与优化**:
- 使用`DATEDIFF()`函数查询指定时间段内的开户卡号。
- 找到本月交易金额最高的卡号,可能需要处理多个最高金额的情况。
- 查询挂失账户的客户信息。
- 催款提醒:找出余额低于200元的客户信息。
- 创建非聚集索引以提高`transInfo`表的`cardID`字段的查询性能。
- 创建视图以提供中文字段名,提升用户体验,如用户ID、用户名和余额的显示。
6. **存储过程创建**:
- 设计存储过程来处理特定业务逻辑,例如自动生成卡号,处理挂失申请,或者批量催款提醒等。
以上是ATM自动取款机后台数据库设计的主要方面,通过合理的数据库设计和SQL操作,可以高效地支持ATM系统的各项功能,并确保数据的完整性和安全性。