Files
Investidor-V2/database/sql/skills-education/01.sql
T
nala 3dc7c5c649
tests / ci (push) Canceled after 0s
commit 30/9
2026-09-30 09:05:43 +02:00

64 lines
3.1 KiB
SQL

CREATE TABLE skills_edu.skill_details (
id uuid PRIMARY KEY REFERENCES public.skills(id) ON DELETE RESTRICT,
name_en varchar(255),
description_pt text,
description_en text,
category varchar(30) NOT NULL CHECK (category IN ('technical','transversal','digital','management','language','other')),
skill_type varchar(30) NOT NULL DEFAULT 'competency',
default_level varchar(30),
source_name varchar(255),
source_version varchar(100),
status varchar(20) NOT NULL DEFAULT 'active' CHECK (status IN ('draft','active','inactive','archived')),
created_by bigint,
updated_by bigint,
created_at timestamptz NOT NULL DEFAULT now(),
updated_at timestamptz NOT NULL DEFAULT now(),
deleted_at timestamptz
);
CREATE TABLE skills_edu.occupation_details (
id uuid PRIMARY KEY REFERENCES public.occupations(id) ON DELETE RESTRICT,
name_en varchar(255),
description_pt text,
description_en text,
occupational_family varchar(150),
sector_master_id bigint,
qualification_level varchar(80),
minimum_experience_months integer CHECK (minimum_experience_months IS NULL OR minimum_experience_months >= 0),
status varchar(20) NOT NULL DEFAULT 'active' CHECK (status IN ('draft','active','inactive','archived')),
created_by bigint,
updated_by bigint,
created_at timestamptz NOT NULL DEFAULT now(),
updated_at timestamptz NOT NULL DEFAULT now(),
deleted_at timestamptz
);
CREATE TABLE skills_edu.occupation_skills (
occupation_id uuid NOT NULL REFERENCES public.occupations(id) ON DELETE CASCADE,
skill_id uuid NOT NULL REFERENCES public.skills(id) ON DELETE RESTRICT,
requirement_type varchar(20) NOT NULL DEFAULT 'required' CHECK (requirement_type IN ('required','desired')),
minimum_level varchar(30),
weight numeric(5,2) CHECK (weight IS NULL OR weight BETWEEN 0 AND 100),
approved_at timestamptz,
approved_by bigint,
created_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (occupation_id, skill_id, requirement_type)
);
CREATE INDEX idx_skills_category_status ON skills_edu.skill_details(category,status) WHERE deleted_at IS NULL;
CREATE INDEX idx_occupations_sector_status ON skills_edu.occupation_details(sector_master_id,status) WHERE deleted_at IS NULL;
CREATE TRIGGER trg_skills_updated_at BEFORE UPDATE ON skills_edu.skill_details FOR EACH ROW EXECUTE FUNCTION skills_edu.set_updated_at();
CREATE TRIGGER trg_occupations_updated_at BEFORE UPDATE ON skills_edu.occupation_details FOR EACH ROW EXECUTE FUNCTION skills_edu.set_updated_at();
ALTER TABLE skills_edu.skill_details ADD FOREIGN KEY (created_by) REFERENCES public.users(id) ON DELETE RESTRICT;
ALTER TABLE skills_edu.skill_details ADD FOREIGN KEY (updated_by) REFERENCES public.users(id) ON DELETE RESTRICT;
ALTER TABLE skills_edu.occupation_details ADD FOREIGN KEY (created_by) REFERENCES public.users(id) ON DELETE RESTRICT;
ALTER TABLE skills_edu.occupation_details ADD FOREIGN KEY (updated_by) REFERENCES public.users(id) ON DELETE RESTRICT;
ALTER TABLE skills_edu.occupation_details ADD FOREIGN KEY (sector_master_id) REFERENCES public.sectors(id) ON DELETE RESTRICT;
ALTER TABLE skills_edu.occupation_skills ADD FOREIGN KEY (approved_by) REFERENCES public.users(id) ON DELETE RESTRICT;