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