根据线上预约系统功能描述,画出对应的E-R图。主要内容是分别对数据字典、医院设置、排班、用户、用户登录、病人、支付、退款、订单进行对象描述,数据字典对象描述系统的数据字典的基本信息,包括id、上级id、名称、值、编码、创建时间、更新时间、删除标记等信息;医院设置对象描述包括编号、医院名称、医院编号、api基础路径、签名秘钥、联系人、联系人手机、状态、创建时间、更新时间、删除标记等基础信息;排班对象描述包括编号、医院编号、科室编号、职称、医生名称、擅长技能、安排日期、安排时间、可预约数、剩余预约数、挂号费、排班状态、创建时间、更新时间、删除标记等基础信息;用户对象描述包括编号、微信openid、昵称、手机号、用户姓名、证件类型、证件路径、认证状态、状态、创建时间、更新时间、删除标记等基础信息;用户登录对象描述包括编号、用户id、IP地址、创建时间、更新时间、删除标记;病人对象描述包括编号、用户id、姓名、证件类型、证件编号、性别、出身年月、手机、是否结婚、省code、市code、区code、详细地址、联系人姓名、联系人证件类型、联系人证件号、联系人手机、就赠卡号、是否有医保、状态、创建时间、更新时间、删除标记。支付对象描述包括编号、对外业务编号、订单id、支付类型、交易金额、交易内容、支付状态、回调时间、回调信息、创建时间、更新时间、删除标记等基础信息;退款对象描述包括编号、对外业务编号、订单编号、支付类型、交易编号、退款金额、交易内容、退款状态、回调时间、回调信息、创建时间、更新时间、删除标记等基础信息;订单对象描述包括编号、患者id、订单交易号、医院编号、医院名称、科室编号、科室名称、医生职称、排班编号、安排日期、安排时间、就诊id、就诊人名称、就诊人手机、预约记录唯一标识、预约号序、建议取号时间、取号地点、医事服务费、退号时间、订单状态、创建时间、更新时间、删除标记等基础信息。具体如图所示。
image.png
表4.1 dict表

列名 类型 长度 小数点 注释 约束
id bigint 0 0 id Primary key
parent_id bigint 0 0 上级id Not null
name varchar 100 0 名称 Not null
value bigint 0 0
dict_code varchar 20 0 编码
create_time timestamp 0 0 创建时间 Not null
update_time timestamp 0 0 更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

表4.2 yygh_hosp的hospital_set表

列名 类型 长度 小数点 注释 约束
id bigint 0 0 编号 Primary key
Hosname varchar 100
医院名称 Not null
hoscode varchar 30
医院编号
Api_url varchar 100
api基础路径
Sign_key varchar 50
签名秘钥
Contacts_name varchar 20
联系人
Contacts_phone varchar 11
联系人手机
status tinyint 0 0 状态 Not null
create_time timestamp 0
创建时间 Not null
update_time timestamp 0
更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

表4.3 yygh_manage的hospital_set表

列名 类型 长度 小数点 注释 约束
id bigint 0 0 id Primary key
hoscode varchar 30
上级id
Sign_key varchar 50
名称
Api_url varchar 100

create_time timestamp 0
创建时间 Not null
update_time timestamp 0
更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

表4.4 yygh_manage的order_info表

列名 类型 长度 小数点 注释 约束
id bigint 0 0 编号 Primary key
schedule_id bigint 0 0 排班id
patient_id bigint 0 0 就诊人id
number int 0 0 预约号序
fetch_time varchar 50
建议取号时间
fetch_address varchar 255
取号地点
amount decimal 10 0 医事服务费
pay_time datetime 0
支付时间
quit_time datetime 0
退号时间
order_status tinyint 0 0 订单状态
create_time timestamp 0
创建时间 Not null
update_time timestamp 0
更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

表4.5 yygh_manage的schedule表

列名 类型 长度 小数点 注释 约束
id bigint 0 0 编号 Primary key
hoscode varchar 30 0 医院编号
depcode varchar 30 0 科室编号
title varchar 20 0 职称
docname varchar 20 0 医生名称
skill text 0 0 擅长技能
work_date date 0 0 安排日期
work_time tinyint 0 0 安排时间
reserved_number int 0 0 可预约数
available_number int 0 0 剩余预约数
amount decimal 10 0 挂号费
status tinyint 0 0 排班状态
create_time timestamp 0 0 创建时间 Not null
update_time timestamp 0 0 更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

表4.6 yygh_order的order_info表

列名 类型 长度 小数点 注释 约束
id bigint 0 0 编号 Primary key
user_id bigint 0 0 患者id
out_trade_no varchar 0 0 订单交易号
hoscode varchar 0 0 医院编号
hosname varchar 50
医院名称
depcode varchar 255
科室编号
depname varchar 10 0 科室名称
title varchar 0
医生职称
hos_schedule_id varchar 0
排班编号
reserve_date date 0 0 安排日期
reserve_time tinyint

安排时间
patient_id bigint

就诊人id
patient_name varchar

就诊人名称
patient_phone varchar

就诊人手机
hos_record_id varchar

预约记录唯一标识
number int

预约号序
fetch_time varchar

建议取号时间
fetch_address varchar

取号地点
amount decimal

医事服务费
quit_time datetimr

退号时间
order_status tinyi

订单状态
create_time timestamp 0
创建时间 Not null
update_time timestamp 0
更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

表4.7 payment_info表

列名 类型 长度 小数点 注释 约束
id bigint 0 0 编号 Primary key
out_trade_no varchar 30
对外业务编号
order_id bigint 0 2 订单id
payment_type tinyint 1 0 支付类型
trade_no varchar 50
交易编号
total_amount decimal 10 0 支付金额
subject varchar 200
交易内容
payment_status tinyint 0 0 支付状态
callback_time datetime 0
回调时间
callback_content varchar 1000
回调信息
create_time timestamp 0
创建时间 Not null
update_time timestamp 0
更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

表4.8 refund_info表

列名 类型 长度 小数点 注释 约束
id int 0 0 编号 Primary key
out_trade_no varchar 50
对外业务编号
order_id bigint 0 2 订单编号
payment_type tinyint 0 0 支付类型
trade_no varchar 50
交易编号
total_amount decimal 10 2 退款金额
subject varchar 200
交易内容
refund_status tinyint 0 0 退款状态
callback_time datetime 0
回调时间
callback_content varchar 1000
回调信息
create_time timestamp 0
创建时间 Not null
update_time timestamp 0
更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

表4.9 patient表

列名 类型 长度 小数点 注释 约束
id bigint 0 0 编号 Primary key
user_id bigint 0
用户id
name varchar 20
姓名
certificates_type varchar 3
证件类型
certificates_no varchar 30
证件编号
sex tinyint 0
性别
birthdate date 0
出生年月
phone varchar 11
手机
is_marry tinyint 0
是否结婚
province_code varchar 20
省code
city_code varchar 20
市code
district_code varchar 20
区code
address varchar 100
详情地址
contacts_name varchar 20
联系人姓名
contacts_certificates_type varchar 3
联系人证件类型
contacts_certificates_no varchar 30
联系人证件号
contacts_phone varchar 11
联系人手机
card_no varchar 50
就诊卡号
is_insure tinyint 0
是否有医保
status tinyint 0
状态 Not null
create_time timestamp 0
创建时间 Not null
update_time timestamp 0
更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

表4.10 user_info表

列名 类型 长度 小数点 注释 约束
id bigint 0 0 编号 Primary key
openid varchar 100 0 微信openid
nick_name varchar 20 0 昵称
phone varchar 11 0 手机号 Not null
name varchar 20 0 用户姓名
certificates_type varchar 3 0 证件类型
certificates_no varchar 30 0 证件编号
certificates_url varchar 200 0 证件路径
auth_status tinyint 0 0 认证状态 Not null
status tinyint 0 0 状态 Not null
create_time timestamp 0 0 创建时间 Not null
update_time timestamp 0 0 更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

表4.11 user_login_record表

列名 类型 长度 小数点 注释 约束
id bigint 0 0 编号 Primary key
user_id bigint 0 0 用户id Not null
ip varchar 32 0 IP地址 Not null
create_time timestamp 0 0 创建时间 Not null
update_time timestamp 0 0 更新时间 Not null
is_deleted tinyint 0 0 删除标记 Not null

数据库优化

在系统设计后期数据量大增,访问量也都陡增,系统的响应的速度会变慢。例如在选择科室操作时,在系统后台的操作,会对所有的科室进行查询。这样的操作无疑会影响系统 的响应速度。对此,为了优化系统,针对频繁的查询操作,需要优化数据库。应对措施就是:添加索引。

这同时也提出一个问题,该如何添加索引呢?

很简单,统计一下,哪些字段经常被查询,我们就对该字段添加索引。在本系统中数据库hospital_Set下hoscode、hosname字段以及数据库dict中的id、parent_id、name、value字段被进行查询。我们就对这这些字段添加索引。

  1. CREATE INDEX hosp_idx ON hospital_set (hosname,hoscode)
CREATE INDEX dict_idx ON dict (id,parent_id,name,value);