这是一套养老管理系统的数据库设计,整体分为权限体系、老人客户档案、护理服务、预约服务、体检服务、合同管理六大业务模块,表之间通过外键与中间表建立关联,同时大量采用快照式冗余设计保障历史数据独立性。各表关系梳理如下:
一、权限与用户体系(5张表)
- 用户 ↔ 角色:多对多
user(用户/护工/管理员表)与role(角色表)通过中间表user_role关联- 外键:
user_role.user_id→user.id,user_role.role_id→role.id - 业务含义:一个用户可分配多个角色,一个角色可赋予多个用户。
- 角色 ↔ 权限:多对多
role(角色表)与permission(权限表)通过中间表role_permission关联- 外键:
role_permission.role_id→role.id,role_permission.permission_id→permission.id - 业务含义:一个角色绑定多个权限点,一个权限可分配给多个角色。
- 权限自关联:树形一对多
permission表通过parent_id字段自关联permission.id- 业务含义:实现「目录-菜单-按钮」三级权限层级结构,父权限下包含多个子权限。
二、老人与客户档案(4张表)
- 客户 → 老人:一对多
customer(客户表)→elder(老人表)- 外键:
elder.customer_id→shturl.cc/S - 业务含义:一个客户(家属/签约人)可对应多位老人,一位老人归属一个签约客户。
- 老人 ↔ 标签:多对多
elder(老人表)与tag(标签表)通过中间表elder_tag关联- 外键:
elder_tag.elder_id→elder.id,elder_tag.tag_id→tag.id - 业务含义:一位老人可打多个特征标签(独居、高血压等),一个标签可匹配多位老人。
三、护理服务模块(5张表)
- 护理等级 → 护理计划:一对多
care_level(护理等级表)→care_plan(护理计划表)- 外键:
care_plan.care_level_id→care_level.id
- 老人 → 护理计划:一对多
elder→care_plan- 外键:
care_plan.elder_id→elder.id - 业务含义:一位老人可有多份生效/历史护理计划。
- 护工 → 护理计划:一对多
user→care_plan- 外键:
care_plan.user_id→user.id
- 护理计划 ↔ 护理项目:多对多(通过明细表)
care_plan与care_item(护理项目字典表)通过care_plan_item关联- 外键:
care_plan_item.care_plan_id→care_plan.id,care_plan_item.care_item_id→care_shturl. - 业务含义:一份护理计划包含多项护理服务,同时配置执行时间、周期、频次。
- 护理计划 → 护理任务:一对多
care_plan→care_task(护理任务表)- 外键:
care_task.care_plan_id→care_plan.id - 业务含义:系统根据计划中的周期规则,批量生成每日/每周执行任务;任务表冗余
care_item_name(项目名)采用快照设计,主数据修改不影响历史任务。 - 补充关联:
care_task.elder_id关联老人,care_task.user_id关联执行护工。
四、预约服务模块(4张表)
结构与护理模块高度一致:
- 预约项目字典:
appointment_item是基础服务项字典。
- 老人 → 预约计划:一对多:
appointment_plan.elder_id→elder.id
- 预约计划 ↔ 预约项目:多对多:通过
appointment_plan_item关联,配置执行时间与周期。
- 预约计划 → 预约任务:一对多
:
appointment_task.appointment_plan_id
→
appointment_plan.id
- 任务表冗余
appointment_item_name快照,保障历史数据独立。 - 任务同时关联护工
user_id、老人elder_id。
五、体检服务模块(5张表)
- 体检项目 ↔ 体检套餐:多对多
exam_item(体检项目字典)与exam_package(体检套餐)通过exam_package_item关联- 外键:
exam_package_item.package_id→exam_package.id,exam_package_item.exam_item_id→exam_shturl.
- 老人 → 体检预约:一对多
elder→exam_appointment(体检预约/记录表)- 外键:
exam_appointment.elder_id→elder.id
- 体检套餐 → 体检预约:一对多
exam_package→exam_appointment- 外键:
exam_appointment.package_id→exam_package.id - 快照设计:预约时冗余
price套餐价格,后续套餐调价不影响历史预约记录。
- 体检预约 → 体检明细:一对多
exam_appointment→exam_appointment_item(体检结果明细表)- 外键:
exam_appointment_item.appointment_id→exam_appointment.id - 业务含义:一次体检对应多条项目结果,记录数值、单位、异常判定。
六、合同管理模块(2张表)
- 老人/客户 → 合同:一对多
elder→contract(合同表)customer→contract- 外键:
contract.elder_id→elder.id,contract.customer_id→shturl.cc/S - 业务含义:一位老人可有多份入住、续签、退住合同,合同关联签约客户。
- 合同 → 附件:一对多
contract→contract_attachment(合同附件表)- 外键:
contract_attachment.contract_id→contract.id - 业务含义:一份合同可挂载扫描件、身份证、体检报告等多个附件。
整体设计特点
整体遵循主从表+中间表的经典关系型设计,核心业务链路(老人→计划→任务→执行)全部打通;并通过字段冗余快照解决了“主数据修改影响历史记录”的问题,符合养老行业服务追溯、数据留痕的业务需求。