You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

现有用户、计划等数据库表结构中,如何合理引入预定义计划模板?

最优数据库架构扩展方案

这个需求太常见啦,我来给你梳理一套既能兼容现有结构,又能完美支撑计划模板功能的最优方案:

1. 新增PLAN_TEMPLATES表(存储计划模板的基础信息)

咱们首先需要一个表来存模板的核心信息,还要和你现有的PLAN_TYPES关联,保证模板和计划类型的一致性:

CREATE TABLE PLAN_TEMPLATES (
    Id INT PRIMARY KEY AUTO_INCREMENT,
    PlanTypeId INT NOT NULL,
    Name VARCHAR(255) NOT NULL,
    Description TEXT NULL, -- 可选,用来描述模板的适用场景
    FOREIGN KEY (PlanTypeId) REFERENCES PLAN_TYPES(Id)
);
  • PlanTypeId:绑定到你的PLAN_TYPES表,确保模板属于某个特定的计划类型(比如"健身"类型下的模板只能生成健身计划);
  • Name:模板的名称,比如"每周减脂入门模板"、"月度职场技能提升模板";
  • Description:可选字段,用来详细说明模板的用途、适用人群等,方便用户选择。

2. 新增TEMPLATE_ACTIONS表(存储模板对应的预定义操作)

每个模板必然包含一系列预定义的操作,这个表专门用来维护模板和操作的对应关系:

CREATE TABLE TEMPLATE_ACTIONS (
    Id INT PRIMARY KEY AUTO_INCREMENT,
    TemplateId INT NOT NULL,
    Description TEXT NOT NULL,
    SequenceOrder INT NOT NULL, -- *强烈建议加上*,用来指定操作的执行顺序
    FOREIGN KEY (TemplateId) REFERENCES PLAN_TEMPLATES(Id)
);
  • TemplateId:关联到PLAN_TEMPLATES,标记这个操作属于哪个模板;
  • Description:预定义的操作内容,比如"完成30分钟有氧慢跑"、"阅读《高效能人士的七个习惯》第2章";
  • SequenceOrder强烈建议加上,当模板有多个操作时,能保证复制到用户计划里的操作顺序和模板一致,符合业务逻辑。

3. 调整现有PLANS表(可选但推荐:添加模板溯源字段)

如果后续需要追踪计划的来源模板(比如模板更新后要不要同步已有计划),可以给PLANS表加一个可选的外键字段:

ALTER TABLE PLANS
ADD COLUMN TemplateId INT NULL,
ADD FOREIGN KEY (TemplateId) REFERENCES PLAN_TEMPLATES(Id);

要是暂时不需要溯源,这一步可以跳过,但我还是建议加上——对后续功能扩展太有用了,比如统计哪个模板最受欢迎之类的。

4. 基于模板创建用户计划的流程

当用户选择用模板创建计划时,应用层只要做两步操作就行:

  • 第一步:往PLANS表里插一条新记录:
    • PlanTypeId:直接从选中的模板里拿;
    • UserId:当前创建计划的用户Id;
    • Name:可以直接用模板的名字,也让用户自定义修改;
    • TemplateId:如果加了溯源字段,就填选中的模板Id;
  • 第二步:把该模板对应的所有TEMPLATE_ACTIONS复制到ACTIONS表:
    • PlanId:刚创建的那个计划的Id;
    • Description:直接复用模板里的操作描述;
    • TakeActionTime:按照你原来的业务逻辑(定期生成)后续填充就行,模板里不需要预定义时间;
    • 要是有SequenceOrder,也一起复制过去,保证操作顺序不乱。

额外的实用扩展建议

  • 可以给PLAN_TEMPLATES加个IsActive字段,用来标记模板是否可用,方便管理员下架旧模板;
  • 如果以后要支持用户自定义模板(不只是系统预定义的),可以给PLAN_TEMPLATES加个CreatorUserId字段,关联USERS.Id,区分系统模板和用户自制模板;
  • 要是模板更新后需要同步已有计划的操作,可以通过PLANS.TemplateId关联,批量更新对应的ACTIONS记录。

这套设计完全兼容你现有的表结构,模板功能独立清晰,扩展性也拉满,完美匹配你的需求~

内容的提问来源于stack exchange,提问作者Miguel Moura

火山引擎 最新活动