Objectifs de la formation
- Maîtriser le langage SurrealQL pour manipuler des données complexes.
- Concevoir une architecture de données performante utilisant les Record Links et les relations Graphes.
- Sécuriser l'accès direct à la base depuis le Frontend via les Scopes et les Permissions.
- Implémenter des fonctionnalités avancées : recherche phonétique, Géo-spatial et Full-Text.
- Déployer et administrer une instance SurrealDB sur le Surreal Cloud.
Programme de la formation
Introduction et Écosystème
- Architecture Rust
- binaire unique
- modes d'exécution (In-memory, TiKV, RocksDB).
- Présentation de Surrealist (GUI) et du CLI.
Travaux pratiques
Installation, lancement d'une instance locale et exécution de commandes CRUD basiques (CREATE, SELECT, UPDATE, DELETE).
Modélisation Document et Record IDs
- Flexibilité du Schéma-less vs rigueur du Schéma-full.
- Types de données étendus (Durations, Datetimes, Géométries).
- La puissance des Record IDs : IDs numériques, textes (user:georges), ou complexes (object:['Paris', 2026]).
Travaux pratiques
Création d'une table lieu structurée avec des IDs sémantiques et gestion de données imbriquées pour les équipements.
Record Links (Relations 1-N)
- Remplacer les JOINs par des pointeurs directs.
- Performance des liens de records.
- Navigation "Dot-notation" pour traverser les tables à l'infini.
Travaux pratiques
Création d'une table evenement liée à un lieu. Requête de récupération des informations du lieu directement depuis la table événement sans jointure.
Relations Graphes (Relations N-N)
- Syntaxe RELATE.
- Les tables de relations (Edges).
- Stocker des propriétés sur les arcs (ex: date d'amitié, rôle dans un groupe).
- Traversée bidirectionnelle (-> et <-).
Travaux pratiques
Modélisation du plan de table : lier les invités aux tables avec une table de relation affectation contenant le choix du menu.
Scripting et Fonctions JavaScript
- DEFINE FUNCTION pour centraliser la logique.
- Utilisation du moteur V8 embarqué pour écrire des fonctions complexes en JavaScript.
- Passage de paramètres et typage de retour.
Travaux pratiques
Écrire une fonction fn::salutation($nom) en JS qui gère les cas particuliers d'affichage et de civilité.
Événements et Automatisation
- Les EVENTS (Triggers) sur CREATE, UPDATE ou DELETE.
- Utilisation de $before et $after.
- Champs calculés dynamiquement avec la clause VALUE.
Travaux pratiques
Création d'un trigger qui met à jour automatiquement le nombre de places restantes sur une table dès qu'un nouvel invité y est lié.
Sécurité, Authentification et Scopes
- Architecture "No-Backend".
- Définition des SCOPES pour l'inscription et la connexion.
- Variables $auth et $session.
- Sécurité granulaire avec PERMISSIONS au niveau des tables et des champs.
Travaux pratiques
Créer un portail où un invité se connecte avec son email/pass et ne peut modifier que sa propre fiche (nom, menu) mais pas celle des autres.
Full-Text Search et Phonétique
- Configuration des ANALYZERS (tokenizers, filters).
- Indexation FULLTEXT.
- Recherche floue avec l'opérateur @@.
- Introduction à la phonétique (Phonex/Soundex).
Travaux pratiques
Mise en place d'une barre de recherche capable de trouver "Lefebvre" même si l'utilisateur tape "Lefevre" ou "Luvr".
Géolocalisation et Indexation Spatiale
- Géométries GeoJSON.
- Index MTREE 2D.
- Fonctions de distance et opérateurs d'inclusion (INSIDE).
Travaux pratiques
Implémenter une recherche de proximité pour lister les parkings disponibles dans un rayon de 2km.
Temps Réel et Déploiement Cloud
- LIVE SELECT et WebSockets.
- Architecture distribuée.
- Découverte de Surreal Cloud.
- Stratégies de backup et migration.
Travaux pratiques
Déploiement de la base finale sur le Cloud et test d'une Live Query : voir les confirmations d'invités s'afficher instantanément sur un tableau de bord sans rafraîchir la page.