Files
akmon/doc_zhipao/create_training_projects_tables.sql
2026-01-20 08:04:15 +08:00

96 lines
5.4 KiB
PL/PgSQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 创建训练项目表 (Training Projects)
-- 这是训练活动的模板/项目定义,不同于训练计划(training_plans)
CREATE TABLE public.training_projects (
id SERIAL PRIMARY KEY, -- 项目ID使用SERIAL自增
name VARCHAR(128) NOT NULL, -- 项目名称
description TEXT, -- 项目描述
category VARCHAR(64) NOT NULL DEFAULT 'general', -- 项目分类
difficulty INTEGER NOT NULL DEFAULT 1 CHECK (difficulty >= 1 AND difficulty <= 5), -- 难度等级 1-5
difficulty_level INTEGER, -- 备用难度等级字段
duration INTEGER NOT NULL DEFAULT 30, -- 持续时间(分钟)
duration_minutes INTEGER, -- 备用时长字段
equipment_needed TEXT, -- 所需设备
instructions TEXT, -- 训练指导
training_points TEXT, -- 训练要点
scoring_criteria TEXT, -- 评分标准
image_url VARCHAR(512), -- 项目图片URL
status VARCHAR(16) DEFAULT 'active' CHECK (status IN ('active', 'inactive')), -- 状态
usage_count INTEGER DEFAULT 0, -- 使用次数统计
created_at TIMESTAMP WITH TIME ZONE DEFAULT now(), -- 创建时间
updated_at TIMESTAMP WITH TIME ZONE DEFAULT now() -- 更新时间
);
-- 添加表注释
COMMENT ON TABLE public.training_projects IS '训练项目表 - 定义可复用的训练活动模板';
-- 创建索引
CREATE INDEX idx_training_projects_category ON public.training_projects(category);
CREATE INDEX idx_training_projects_difficulty ON public.training_projects(difficulty);
CREATE INDEX idx_training_projects_status ON public.training_projects(status);
CREATE INDEX idx_training_projects_created_at ON public.training_projects(created_at);
-- 插入一些示例数据
INSERT INTO public.training_projects (name, description, category, difficulty, duration, training_points, scoring_criteria, status) VALUES
('5公里跑步', '标准5公里长跑训练', 'running', 2, 30, '保持匀速,注意呼吸节奏', '时间、心率、配速', 'active'),
('俯卧撑训练', '标准俯卧撑力量训练', 'strength', 1, 15, '动作标准,控制节奏', '数量、动作质量', 'active'),
('篮球基础', '篮球基本技能训练', 'basketball', 2, 45, '运球、投篮、传球基础', '技术动作、配合意识', 'active'),
('游泳训练', '自由泳技术训练', 'swimming', 3, 60, '动作协调,呼吸配合', '距离、技术、时间', 'active'),
('瑜伽基础', '基础瑜伽体式练习', 'yoga', 1, 30, '动作缓慢,保持呼吸', '柔韧性、平衡性', 'active');
-- 创建ak_training_projects表与现有naming convention保持一致
CREATE TABLE public.ak_training_projects (
id SERIAL PRIMARY KEY, -- 项目ID使用SERIAL自增
name VARCHAR(128) NOT NULL, -- 项目名称
description TEXT, -- 项目描述
category VARCHAR(64) NOT NULL DEFAULT 'general', -- 项目分类
difficulty INTEGER NOT NULL DEFAULT 1 CHECK (difficulty >= 1 AND difficulty <= 5), -- 难度等级 1-5
difficulty_level INTEGER, -- 备用难度等级字段
duration INTEGER NOT NULL DEFAULT 30, -- 持续时间(分钟)
duration_minutes INTEGER, -- 备用时长字段
equipment_needed TEXT, -- 所需设备
instructions TEXT, -- 训练指导
training_points TEXT, -- 训练要点
scoring_criteria TEXT, -- 评分标准
image_url VARCHAR(512), -- 项目图片URL
status VARCHAR(16) DEFAULT 'active' CHECK (status IN ('active', 'inactive')), -- 状态
usage_count INTEGER DEFAULT 0, -- 使用次数统计
created_at TIMESTAMP WITH TIME ZONE DEFAULT now(), -- 创建时间
updated_at TIMESTAMP WITH TIME ZONE DEFAULT now() -- 更新时间
);
-- 添加表注释
COMMENT ON TABLE public.ak_training_projects IS '训练项目表 - 定义可复用的训练活动模板';
-- 创建索引
CREATE INDEX idx_ak_training_projects_category ON public.ak_training_projects(category);
CREATE INDEX idx_ak_training_projects_difficulty ON public.ak_training_projects(difficulty);
CREATE INDEX idx_ak_training_projects_status ON public.ak_training_projects(status);
CREATE INDEX idx_ak_training_projects_created_at ON public.ak_training_projects(created_at);
-- 插入一些示例数据到ak_training_projects
INSERT INTO public.ak_training_projects (name, description, category, difficulty, duration, training_points, scoring_criteria, status) VALUES
('5公里跑步', '标准5公里长跑训练', 'running', 2, 30, '保持匀速,注意呼吸节奏', '时间、心率、配速', 'active'),
('俯卧撑训练', '标准俯卧撑力量训练', 'strength', 1, 15, '动作标准,控制节奏', '数量、动作质量', 'active'),
('篮球基础', '篮球基本技能训练', 'basketball', 2, 45, '运球、投篮、传球基础', '技术动作、配合意识', 'active'),
('游泳训练', '自由泳技术训练', 'swimming', 3, 60, '动作协调,呼吸配合', '距离、技术、时间', 'active'),
('瑜伽基础', '基础瑜伽体式练习', 'yoga', 1, 30, '动作缓慢,保持呼吸', '柔韧性、平衡性', 'active');
-- 更新触发器函数
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ language 'plpgsql';
-- 为两个表创建更新触发器
CREATE TRIGGER update_training_projects_updated_at
BEFORE UPDATE ON public.training_projects
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_ak_training_projects_updated_at
BEFORE UPDATE ON public.ak_training_projects
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();