数据库

这是一套养老管理系统的数据库设计,整体分为权限体系、老人客户档案、护理服务、预约服务、体检服务、合同管理六大业务模块,表之间通过外键与中间表建立关联,同时大量采用快照式冗余设计保障历史数据独立性。各表关系梳理如下:

一、权限与用户体系(5张表)

  1. 用户 ↔ 角色:多对多
  • user(用户/护工/管理员表)与 role(角色表)通过中间表 user_role 关联
  • 外键:user_role.user_id → user.id,user_role.role_id → role.id
  • 业务含义:一个用户可分配多个角色,一个角色可赋予多个用户。
  1. 角色 ↔ 权限:多对多
  • role(角色表)与 permission(权限表)通过中间表 role_permission 关联
  • 外键:role_permission.role_id → role.id,role_permission.permission_id → permission.id
  • 业务含义:一个角色绑定多个权限点,一个权限可分配给多个角色。
  1. 权限自关联:树形一对多
  • permission 表通过 parent_id 字段自关联 permission.id
  • 业务含义:实现「目录-菜单-按钮」三级权限层级结构,父权限下包含多个子权限。

二、老人与客户档案(4张表)

  1. 客户 → 老人:一对多
  • customer(客户表)→ elder(老人表)
  • 外键:elder.customer_id → shturl.cc/S
  • 业务含义:一个客户(家属/签约人)可对应多位老人,一位老人归属一个签约客户。
  1. 老人 ↔ 标签:多对多
  • elder(老人表)与 tag(标签表)通过中间表 elder_tag 关联
  • 外键:elder_tag.elder_id → elder.id,elder_tag.tag_id → tag.id
  • 业务含义:一位老人可打多个特征标签(独居、高血压等),一个标签可匹配多位老人。

三、护理服务模块(5张表)

  1. 护理等级 → 护理计划:一对多
  • care_level(护理等级表)→ care_plan(护理计划表)
  • 外键:care_plan.care_level_id → care_level.id
  1. 老人 → 护理计划:一对多
  • elder → care_plan
  • 外键:care_plan.elder_id → elder.id
  • 业务含义:一位老人可有多份生效/历史护理计划。
  1. 护工 → 护理计划:一对多
  • user → care_plan
  • 外键:care_plan.user_id → user.id
  1. 护理计划 ↔ 护理项目:多对多(通过明细表)
  • care_plan 与 care_item(护理项目字典表)通过 care_plan_item 关联
  • 外键:care_plan_item.care_plan_id → care_plan.id,care_plan_item.care_item_id → care_shturl.
  • 业务含义:一份护理计划包含多项护理服务,同时配置执行时间、周期、频次。
  1. 护理计划 → 护理任务:一对多
  • care_plan → care_task(护理任务表)
  • 外键:care_task.care_plan_id → care_plan.id
  • 业务含义:系统根据计划中的周期规则,批量生成每日/每周执行任务;任务表冗余 care_item_name(项目名)采用快照设计,主数据修改不影响历史任务。
  • 补充关联:care_task.elder_id 关联老人,care_task.user_id 关联执行护工。

四、预约服务模块(4张表)

结构与护理模块高度一致:

  1. 预约项目字典:appointment_item 是基础服务项字典。
  1. 老人 → 预约计划:一对多:appointment_plan.elder_id → elder.id
  1. 预约计划 ↔ 预约项目:多对多:通过 appointment_plan_item 关联,配置执行时间与周期。
  1. 预约计划 → 预约任务:一对多

:

   appointment_task.appointment_plan_id
   

→

   appointment_plan.id
   
  • 任务表冗余 appointment_item_name 快照,保障历史数据独立。
  • 任务同时关联护工 user_id、老人 elder_id。

五、体检服务模块(5张表)

  1. 体检项目 ↔ 体检套餐:多对多
  • exam_item(体检项目字典)与 exam_package(体检套餐)通过 exam_package_item 关联
  • 外键:exam_package_item.package_id → exam_package.id,exam_package_item.exam_item_id → exam_shturl.
  1. 老人 → 体检预约:一对多
  • elder → exam_appointment(体检预约/记录表)
  • 外键:exam_appointment.elder_id → elder.id
  1. 体检套餐 → 体检预约:一对多
  • exam_package → exam_appointment
  • 外键:exam_appointment.package_id → exam_package.id
  • 快照设计:预约时冗余 price 套餐价格,后续套餐调价不影响历史预约记录。
  1. 体检预约 → 体检明细:一对多
  • exam_appointment → exam_appointment_item(体检结果明细表)
  • 外键:exam_appointment_item.appointment_id → exam_appointment.id
  • 业务含义:一次体检对应多条项目结果,记录数值、单位、异常判定。

六、合同管理模块(2张表)

  1. 老人/客户 → 合同:一对多
  • elder → contract(合同表)
  • customer → contract
  • 外键:contract.elder_id → elder.id,contract.customer_id → shturl.cc/S
  • 业务含义:一位老人可有多份入住、续签、退住合同,合同关联签约客户。
  1. 合同 → 附件:一对多
  • contract → contract_attachment(合同附件表)
  • 外键:contract_attachment.contract_id → contract.id
  • 业务含义:一份合同可挂载扫描件、身份证、体检报告等多个附件。

整体设计特点

整体遵循主从表+中间表的经典关系型设计,核心业务链路(老人→计划→任务→执行)全部打通;并通过字段冗余快照解决了“主数据修改影响历史记录”的问题,符合养老行业服务追溯、数据留痕的业务需求。

上一篇
下一篇