- Structure complète: utilisateurs, parents, assmat, enfants, contrats - Migrations SQL avec enums et contraintes - Seed: 1 super_admin (admin@ptits-pas.fr) - Mot de passe: 4dm1n1strateur (hash bcrypt)
158 lines
4.5 KiB
SQL
158 lines
4.5 KiB
SQL
-- =============================================
|
|
-- 02_indexes.sql : Index FK + colonnes critiques
|
|
-- =============================================
|
|
|
|
-- Recommandation : exécuter après 01_init.sql
|
|
|
|
-- ===========
|
|
-- UTILISATEURS
|
|
-- ===========
|
|
-- Recherche par email (insensibilité à la casse pour lookup)
|
|
CREATE INDEX IF NOT EXISTS idx_utilisateurs_lower_courriel
|
|
ON utilisateurs (LOWER(courriel));
|
|
|
|
-- ===========
|
|
-- ASSISTANTES_MATERNELLES
|
|
-- ===========
|
|
-- FK -> utilisateurs(id)
|
|
CREATE INDEX IF NOT EXISTS idx_am_id_utilisateur
|
|
ON assistantes_maternelles (id_utilisateur);
|
|
|
|
-- =======
|
|
-- PARENTS
|
|
-- =======
|
|
-- FK -> utilisateurs(id)
|
|
CREATE INDEX IF NOT EXISTS idx_parents_id_utilisateur
|
|
ON parents (id_utilisateur);
|
|
|
|
-- Co-parent (nullable)
|
|
CREATE INDEX IF NOT EXISTS idx_parents_id_co_parent
|
|
ON parents (id_co_parent);
|
|
|
|
-- =======
|
|
-- ENFANTS
|
|
-- =======
|
|
-- (souvent filtrés par statut / date_naissance ? à activer si besoin)
|
|
-- CREATE INDEX IF NOT EXISTS idx_enfants_statut ON enfants (statut);
|
|
-- CREATE INDEX IF NOT EXISTS idx_enfants_date_naissance ON enfants (date_naissance);
|
|
|
|
-- ================
|
|
-- ENFANTS_PARENTS (N:N)
|
|
-- ================
|
|
-- PK composite déjà en place (id_parent, id_enfant), ajouter index individuels si jointures unilatérales fréquentes
|
|
CREATE INDEX IF NOT EXISTS idx_enfants_parents_id_parent
|
|
ON enfants_parents (id_parent);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_enfants_parents_id_enfant
|
|
ON enfants_parents (id_enfant);
|
|
|
|
-- ========
|
|
-- DOSSIERS
|
|
-- ========
|
|
-- FK -> parent / enfant
|
|
CREATE INDEX IF NOT EXISTS idx_dossiers_id_parent
|
|
ON dossiers (id_parent);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_dossiers_id_enfant
|
|
ON dossiers (id_enfant);
|
|
|
|
-- Statut (filtrages "à traiter", "envoyé", etc.)
|
|
CREATE INDEX IF NOT EXISTS idx_dossiers_statut
|
|
ON dossiers (statut);
|
|
|
|
-- JSONB : si on fait des requêtes @> sur le planning souhaité
|
|
-- CREATE INDEX IF NOT EXISTS idx_dossiers_planning_souhaite_gin
|
|
-- ON dossiers USING GIN (planning_souhaite);
|
|
|
|
-- ========
|
|
-- MESSAGES
|
|
-- ========
|
|
-- Filtrage par dossier + tri chronologique
|
|
CREATE INDEX IF NOT EXISTS idx_messages_id_dossier_cree_le
|
|
ON messages (id_dossier, cree_le);
|
|
|
|
-- Recherche par expéditeur
|
|
CREATE INDEX IF NOT EXISTS idx_messages_id_expediteur_cree_le
|
|
ON messages (id_expediteur, cree_le);
|
|
|
|
-- =========
|
|
-- CONTRATS
|
|
-- =========
|
|
-- UNIQUE(id_dossier) existe déjà -> index implicite
|
|
-- Tri / filtres fréquents
|
|
CREATE INDEX IF NOT EXISTS idx_contrats_statut
|
|
ON contrats (statut);
|
|
|
|
-- JSONB planning : activer si on requête par clé
|
|
-- CREATE INDEX IF NOT EXISTS idx_contrats_planning_gin
|
|
-- ON contrats USING GIN (planning);
|
|
|
|
-- ==================
|
|
-- AVENANTS_CONTRATS
|
|
-- ==================
|
|
CREATE INDEX IF NOT EXISTS idx_avenants_contrats_id_contrat_cree_le
|
|
ON avenants_contrats (id_contrat, cree_le);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_avenants_contrats_initie_par
|
|
ON avenants_contrats (initie_par);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_avenants_contrats_statut
|
|
ON avenants_contrats (statut);
|
|
|
|
-- =========
|
|
-- EVENEMENTS
|
|
-- =========
|
|
-- Accès par enfant + période
|
|
CREATE INDEX IF NOT EXISTS idx_evenements_id_enfant_date_debut
|
|
ON evenements (id_enfant, date_debut);
|
|
|
|
-- Filtrage par auteur / AM / parent
|
|
CREATE INDEX IF NOT EXISTS idx_evenements_cree_par
|
|
ON evenements (cree_par);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_evenements_id_am
|
|
ON evenements (id_am);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_evenements_id_parent
|
|
ON evenements (id_parent);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_evenements_type
|
|
ON evenements (type);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_evenements_statut
|
|
ON evenements (statut);
|
|
|
|
-- =================
|
|
-- SIGNALEMENTS_BUGS
|
|
-- =================
|
|
CREATE INDEX IF NOT EXISTS idx_signalements_bugs_id_utilisateur_cree_le
|
|
ON signalements_bugs (id_utilisateur, cree_le);
|
|
|
|
-- =======
|
|
-- UPLOADS
|
|
-- =======
|
|
CREATE INDEX IF NOT EXISTS idx_uploads_id_utilisateur_cree_le
|
|
ON uploads (id_utilisateur, cree_le);
|
|
|
|
-- =============
|
|
-- NOTIFICATIONS
|
|
-- =============
|
|
-- Requêtes fréquentes : non lues + ordre chrono
|
|
CREATE INDEX IF NOT EXISTS idx_notifications_user_lu_cree_le
|
|
ON notifications (id_utilisateur, lu, cree_le);
|
|
|
|
-- Option : index partiel pour "non lues"
|
|
-- CREATE INDEX IF NOT EXISTS idx_notifications_non_lues
|
|
-- ON notifications (id_utilisateur, cree_le)
|
|
-- WHERE lu = false;
|
|
|
|
-- ===========
|
|
-- VALIDATIONS
|
|
-- ===========
|
|
-- Requêtes par utilisateur validé, par statut et par date
|
|
CREATE INDEX IF NOT EXISTS idx_validations_id_utilisateur_cree_le
|
|
ON validations (id_utilisateur, cree_le);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_validations_statut
|
|
ON validations (statut);
|