ADB-银行业务管理系统数据库设计
银行业务管理系统数据库设计
银行有多个支行。各个支行位于某个城市,每个支行有唯一的名字。银行要监控每个支行的资产。 银行的客户通过其身份证号来标识。银行存储每个客户的姓名及其居住的街道和城市。客户可以有帐户,并且可以贷款。客户可能和某个银行员工发生联系,该员工是此客户的贷款负责人或银行帐户负责人。 银行员工也通过身份证号来标识。员工分为部门经理和普通员工,每个部门经理都负责领导其所在部门的员工,并且每个员工只允许在一个部门内工作。每个支行的管理机构存储每个员工的姓名、电话号码、 家庭地址及其经理的身份证号。银行还需知道每个员工开始工作的日期,由此日期可以推知员工的雇佣期。 银行提供两类帐户——储蓄帐户和支票帐户。帐户可以由2个或2个以上客户所共有,一个客户也可有两个或两个以上的帐户。每个帐户被赋以唯一的帐户号。银行记录每个帐户的余额 、开户的支行以及每个帐户所有者访问该帐户的最近日期。另外,每个储蓄帐户有其利率,且每个支票帐户有其透支额。 每笔贷款由某个分支机构发放,能被一个或多个客户所共有。每笔贷款用唯一的贷款号标识。银行需要知道每笔贷款所贷金额以及逐次支付的情况(银行将贷款分几次付给客户)。虽然贷款号不能唯一标识银行所有为贷款所付的款项,但可以唯一标识为某贷款所付的款项。对每次的付款需要记录日期和金额。
1 概念模型设计
1.1 实体设计
支行 (Branch):支行名,城市,资产。
客户 (Customer):身份证号,客户名,地址
员工 (Employee):身份证号,姓名,电话,地址,入职日期。
帐户 (Account):帐户ID,余额。
贷款 (Loan):贷款ID,贷款金额。
部门(Department):部门ID,部门名,部门类型,经理身份证号。
1.2 联系设计
序号 | 相关实体 | 联系 | 联系属性 |
---|---|---|---|
1 | 支行:贷款 | 1:n | |
2 | 支行:员工 | 1:n | |
3 | 支行:账户 | 1:n | |
5 | 贷款:客户 | m:n | 发放金额,发放日期,发放号 |
6 | 员工:客户 | m:n | 身份 |
7 | 账户:客户 | m:n | 最近访问时间 |
8 | 账户:储蓄账户 | 继承 | |
9 | 账户:支票账户 | 继承 | |
10 | 部门:员工 | 1:n |
1.3 ER图
2 概念模型到逻辑模型的转换
2.1 实体转换
1 | /*==============================================================*/ |
2.2 联系转换
- 员工从属于部门,受雇于分行,新增部门ID,分行名
- 贷款和客户,新增关系模式支付(支付金额,支付日期,支付号,客户号,贷款号)
- 账户和客户,新增关系模式拥有(客户号,账户号,最近访问日期)
- 员工和客户,新增关系模式联系(客户号,员工号,联系号)
- 贷款由分行发放,新增分行名
- 账户由银行创造,新增分行名
2.3 最终关系模式
1 | /*==============================================================*/ |
3 MySQL数据库结构实现
3.1 Power Designer的PDM设计
3.2 数据库表定义
表一:部门表(Department)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Department_ID | 部门号 | varchar(50) | Y | ||
Department_Name | 部门名 | varchar(255) | |||
Department_Type | 部门类型 | varchar(255) | Y | ||
Manager_ID | 经理号 | varchar(50) | Y |
表二:员工表(Employee)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Employee_ID | 员工号 | varchar(50) | Y | ||
Employee_Name | 员工名 | varchar(255) | |||
Employee_Tel | 员工电话 | int | Y | ||
Employee_Addr | 员工地址 | varchar(255) | Y | ||
Hiredate | 入职日期 | date | Y | ||
Branch_Name | 支行名 | varchar(255) | Y | ||
Department_ID | 部门名 | varchar(50) | Y |
表三:客户表(Customer)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Customer_ID | 客户号 | varchar(50) | Y | ||
Customer_Name | 客户名 | varchar(255) | |||
Customer_Tel | 客户电话 | int | Y | ||
Customer_Addr | 客户地址 | varchar(255) | Y |
表四:支行表(Bank)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Branch_Name | 支行名 | varchar(255) | Y | ||
City | 支行所在城市 | varchar(50) | |||
Assets | 支行资产 | decimal(20,2) |
表五:账户表(Account)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Account_ID | 账户名 | varchar(50) | Y | ||
Branch_Name | 支行名 | varchar(255) | Y | ||
Balance | 账户余额 | decimal(10,2) | Y |
表六:支票账户表(Checking_Account)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Account_ID | 账户名 | varchar(50) | Y | Y | |
Overdraft | 透支额度 | decimal(10,2) | Y |
表七:储蓄账户表(Saving_Account)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Account_ID | 账户名 | varchar(50) | Y | Y | |
Interest_Rate | 利率 | decimal(10,2) | Y |
表八:贷款表(Loan)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Loan_ID | 贷款号 | varchar(50) | Y | ||
Branch_Name | 支行名 | varchar(255) | Y | ||
Loan_Amount | 贷款总额 | decimal(10,2) |
表九:联系表(Contact)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Customer_ID | 客户号 | varchar(50) | Y | Y | |
Employee_ID | 员工号 | varchar(50) | Y | Y | |
Contact_ID | 联系号 | varchar(50) |
表十:账户从属表(Own)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Customer_ID | 客户号 | varchar(50) | Y | Y | |
Visite_Time | 最近访问日期 | date&time | Y | ||
Account_ID | 账户号 | varchar(50) | Y | Y |
表十一:贷款支付表(Pay)
列名 | 中文含义 | 类型 | 是否允许为空 | 主键 | 外键 |
---|---|---|---|---|---|
Customer_ID | 客户号 | varchar(50) | Y | Y | |
Loan_ID | 贷款号 | varchar(50) | Y | Y | |
Pay_ID | 支付号 | varchar(50) | Y | ||
Pay_Amount | 支付金额 | decimal(10,2) | Y | ||
Pay_Date | 支付时间 | date&time | Y |