Modèle de données
THE HIVE s’appuie sur PostgreSQL 16. Les entités centrales sontUser, Candidat, Recruteur, Entreprise, Offre, Candidature, Vivier, AlerteEmploi, Article (blog).
Diagramme global (ER)
Grandes familles
Cardinalités clefs
| Entité A | Relation | Entité B | Cardinalité |
|---|---|---|---|
| Entreprise | publie | Offre | 1 → N |
| Entreprise | emploie | Recruteur | 1 → N |
| Recruteur | poste | Offre | 1 → N |
| Offre | reçoit | Candidature | 1 → N |
| Candidat | postule | Candidature | 1 → N |
| Candidat | upload | CV | 1 → N (historique) |
| Candidature | attache | CV | N → 1 |
| Recruteur | crée | Vivier | 1 → N |
| Vivier | contient | Candidat | N ↔ N (via VivierCandidat) |
| Candidat | s’abonne | AlerteEmploi | 1 → N |
| Région | contient | Ville | 1 → N |
Contraintes d’intégrité
Tables techniques
| Table | Rôle |
|---|---|
refresh_tokens | Rotation refresh JWT |
offres_status_history | Audit transitions d’état offre |
recruiter_status_history | Audit transitions recruteur |
candidature_events | Timeline candidature (statuts, messages) |
files_metadata | Métadonnées fichiers R2 |
email_queue | File d’attente envois batch |
audit_log | Actions admins sensibles |
Indexes critiques
| Index | Cible | Type |
|---|---|---|
idx_offres_search_vector | offres.search_vector | GIN |
idx_offres_status_pub | offres(status, published_at DESC) | BTREE composite |
idx_candidatures_offre | candidatures(offre_id, status) | BTREE composite |
idx_users_email | users.email | BTREE unique |
idx_entreprises_rccm | entreprises.rccm | BTREE unique |
idx_offres_titre_trgm | offres.titre | GIN trigram (autocomplete) |
Versioning du schéma
Les migrations suivent le format FlywayV{YYYYMMDDHHMMSS}__{NNN}_{description}.sql. Dernière migration : 023 (_023_fulltext_search_vector.sql).