-- 1) Crear la base de datos (solo si no existe) DO $$ BEGIN IF NOT EXISTS ( SELECT FROM pg_database WHERE datname = 'churn_predictor_db' ) THEN CREATE DATABASE churn_predictor_db WITH OWNER = postgres ENCODING = 'UTF8' TEMPLATE template1; END IF; END$$; -- 3) Crear el rol de la aplicación si no existe DO $$ BEGIN IF NOT EXISTS ( SELECT FROM pg_catalog.pg_roles WHERE rolname = 'churn_app' ) THEN CREATE ROLE churn_app LOGIN PASSWORD 'secure_password_123'; END IF; END$$; -- 4) Crear tablas DROP TABLE IF EXISTS employees CASCADE; CREATE TABLE employees ( id SERIAL PRIMARY KEY, age INTEGER NOT NULL, genre VARCHAR(20) NOT NULL, etat_civil VARCHAR(20) NOT NULL, salaire NUMERIC(10,2) NOT NULL, distance NUMERIC(6,2) NOT NULL, departement VARCHAR(50) NOT NULL, domaine_etude VARCHAR(50) NOT NULL, niveau_hierarchique INTEGER NOT NULL, poste_freq_deplacement VARCHAR(20) NOT NULL, emplois_precedents INTEGER NOT NULL, experience_totale NUMERIC(5,2) NOT NULL, annees_entreprise NUMERIC(5,2) NOT NULL, annees_poste NUMERIC(5,2) NOT NULL, annees_derniere_promotion NUMERIC(5,2) NOT NULL, annees_responsable_actuel NUMERIC(5,2) NOT NULL, heures_semaine NUMERIC(5,2) NOT NULL, heures_supplementaires BOOLEAN NOT NULL, employes_supervision INTEGER NOT NULL, evaluation_precedente INTEGER NOT NULL, evaluation_actuelle INTEGER NOT NULL, satisfaction_environnement INTEGER NOT NULL, satisfaction_travail INTEGER NOT NULL, satisfaction_equipe INTEGER NOT NULL, satisfaction_balance INTEGER NOT NULL, augmentation_salaire NUMERIC(5,2) NOT NULL, participation_pee INTEGER NOT NULL, formations_completees INTEGER NOT NULL, turnover BOOLEAN NOT NULL, created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() ); CREATE TABLE IF NOT EXISTS predictions ( id SERIAL PRIMARY KEY, emp_id INTEGER NOT NULL REFERENCES employees(id), prediction VARCHAR(20) NOT NULL, probability NUMERIC(5,4) NOT NULL, created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() ); CREATE TABLE IF NOT EXISTS audit_log ( id SERIAL PRIMARY KEY, prediction_id INTEGER REFERENCES predictions(id), status VARCHAR(20) NOT NULL, created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(), action VARCHAR(50) NOT NULL ); -- 5) Índices CREATE INDEX IF NOT EXISTS idx_predictions_emp_id ON predictions(emp_id); CREATE INDEX IF NOT EXISTS idx_audit_log_prediction_id ON audit_log(prediction_id); -- 6) Permisos para churn_app GRANT CONNECT ON DATABASE churn_predictor_db TO churn_app; GRANT USAGE ON SCHEMA public TO churn_app; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO churn_app; GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO churn_app; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO churn_app; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO churn_app;