Base de données MateZone
Découvrez la structure de données MySQL qui alimente MateZone, avec moteur InnoDB et encodage utf8mb4 pour la performance et la fiabilité.
Vue d'ensemble de la base de données
MateZone utilise MySQL pour stocker de manière fiable les utilisateurs, messages et informations de session
Gestion des utilisateurs
Stockage sécurisé des comptes utilisateur avec authentification et profils personnalisables.
- Identifiants uniques
- Mots de passe sécurisés
- Informations de profil
- Statuts de connexion
Historique des messages
Conservation complète de l'historique des conversations avec métadonnées détaillées.
- Messages horodatés
- Association aux canaux
- Gestion des auteurs
- Persistance des échanges
Organisation par canaux
Structure flexible permettant l'organisation des conversations en différents espaces thématiques.
- Canaux multiples
- Permissions d'accès
- Métadonnées de canal
- Gestion des membres
Configuration et connexion
Comment configurer et se connecter à la base de données MySQL
⚙️ Configuration requise
| SGBD | MySQL 8.0+ |
| Encodage | UTF-8 (utf8mb4) |
| Moteur | InnoDB |
| Port par défaut | 3306 |
🔧 Fichier de configuration
Structure du fichier config.properties :
# Configuration de la base de données db.url=jdbc:mysql://localhost:3306/matezone db.username=votre_username db.password=votre_password # Paramètres de connexion db.maxConnections=10 db.connectionTimeout=30000
Structure des tables
Structure réelle de la base de données MateZone telle que définie dans le script SQL.
🖼️ Table default_images
Stocke les images de profil par défaut. Une seule copie binaire est conservée par image.
| Champ | Type | Contraintes | Description |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Identifiant de l'image |
| nom | VARCHAR(50) | UNIQUE, NOT NULL | Nom de l'image |
| img_data | MEDIUMBLOB | NOT NULL | Données binaires de l'image |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Date de création de l'enregistrement |
👤 Table clients
Stocke les comptes utilisateurs, leur mot de passe hashé et leur image (personnalisée ou par défaut).
| Champ | Type | Contraintes | Description |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Identifiant unique du client |
| pseudo | VARCHAR(255) | UNIQUE, NOT NULL | Pseudo de connexion |
| mdp | VARCHAR(255) | NOT NULL | Mot de passe hashé |
| custom_img_data | MEDIUMBLOB | NULL | Image de profil personnalisée |
| default_image_id | INT | DEFAULT 1, FK default_images(id) | Image de profil par défaut associée |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Date de création du compte |
🏢 Table groupes
Gère les groupes de discussion créés par les clients.
| Champ | Type | Contraintes | Description |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Identifiant unique du groupe |
| nom | VARCHAR(150) | UNIQUE, NOT NULL | Nom du groupe |
| type | VARCHAR(20) | NOT NULL, DEFAULT 'groupe' | Type de groupe (groupe / prive) |
| cree_par | INT | FK clients(id) | Créateur du groupe |
| cree_le | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Date de création du groupe |
💬 Table messages
Stocke tous les messages envoyés dans chaque groupe.
| Champ | Type | Contraintes | Description |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Identifiant unique du message |
| groupe_id | INT | FK groupes(id), NOT NULL | Groupe destinataire |
| expediteur_id | INT | FK clients(id), NOT NULL | Client ayant envoyé le message |
| contenu | TEXT | NOT NULL | Contenu du message |
| envoye_le | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Date/heure d'envoi |
🔗 Table membres_groupes
Fait le lien entre les clients et les groupes (relation N:N) avec un rôle.
| Champ | Type | Contraintes | Description |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Identifiant de l'enregistrement |
| groupe_id | INT | FK groupes(id), NOT NULL | Groupe concerné |
| client_id | INT | FK clients(id), NOT NULL | Client membre du groupe |
| role | VARCHAR(50) | DEFAULT 'membre' | Rôle dans le groupe |
| date_adhesion | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Date d'adhésion |
Diagramme relationnel
Visualisation des relations entre les tables principales de MateZone
👤 CLIENTS
id (PK), pseudo (UNIQUE), mdp, custom_img_data, default_image_id (FK), created_at
🏢 GROUPES
id (PK), nom (UNIQUE), type, cree_par (FK client), cree_le
🔗 MEMBRES_GROUPES
groupe_id (FK), client_id (FK), role, date_adhesion
💬 MESSAGES
id (PK), groupe_id (FK), expediteur_id (FK client), contenu, envoye_le
🖼️ DEFAULT_IMAGES
id (PK), nom (UNIQUE), img_data, created_at
- Un client peut créer plusieurs groupes (1:N via groupes.cree_par)
- Un client peut appartenir à plusieurs groupes (N:M via membres_groupes)
- Un groupe contient plusieurs messages (1:N via messages.groupe_id)
- Un client peut envoyer plusieurs messages (1:N via messages.expediteur_id)
- Plusieurs clients peuvent partager la même image par défaut (1:N via default_image_id)
Opérations principales
Exemples de requêtes SQL typiques utilisées par MateZone sur les tables réelles.
👤 Gestion des clients
Inscription d'un nouveau client :
INSERT INTO clients (pseudo, mdp, default_image_id)
VALUES ('nouveau_user', 'hash_password', 1);
Authentification (récupération du hash) :
SELECT id, mdp FROM clients WHERE pseudo = ?;
Changer l'image de profil personnalisée :
UPDATE clients SET custom_img_data = ? WHERE id = ?;
💬 Gestion des messages
Envoi d'un nouveau message :
INSERT INTO messages (groupe_id, expediteur_id, contenu) VALUES (?, ?, ?);
Récupération de l'historique :
SELECT m.contenu, m.envoye_le, c.pseudo FROM messages m JOIN clients c ON m.expediteur_id = c.id WHERE m.groupe_id = ? ORDER BY m.envoye_le DESC LIMIT 50;
Recherche de messages :
SELECT m.*, c.pseudo FROM messages m JOIN clients c ON m.expediteur_id = c.id WHERE m.contenu LIKE ? AND m.groupe_id = ?;
🏢 Gestion des groupes
Création d'un groupe :
INSERT INTO groupes (nom, type, cree_par) VALUES (?, 'groupe', ?);
Liste des groupes d'un client :
SELECT g.id, g.nom, g.type, mg.role FROM groupes g JOIN membres_groupes mg ON g.id = mg.groupe_id WHERE mg.client_id = ?;
Ajout d'un membre dans un groupe :
INSERT INTO membres_groupes (groupe_id, client_id, role) VALUES (?, ?, 'membre');
📊 Statistiques et rapports
Nombre de messages par canal :
SELECT g.nom, COUNT(m.id) AS nb_messages FROM groupes g LEFT JOIN messages m ON g.id = m.groupe_id GROUP BY g.id, g.nom;
Utilisateurs les plus actifs :
SELECT c.pseudo, COUNT(m.id) AS nb_messages FROM clients c JOIN messages m ON c.id = m.expediteur_id GROUP BY c.id, c.pseudo ORDER BY nb_messages DESC LIMIT 10;
Activité récente :
SELECT DATE(envoye_le) AS jour, COUNT(*) AS nb_messages FROM messages WHERE envoye_le >= DATE_SUB(NOW(), INTERVAL 7 DAY) GROUP BY DATE(envoye_le) ORDER BY jour;
Performance et optimisation
Stratégies mises en place pour optimiser les performances et garantir la cohérence des données.
Index optimisés
- messages.groupe_id (idx_messages_groupe) - Récupération rapide par groupe
- messages.expediteur_id (idx_messages_expediteur) - Récupération par expéditeur
- clients.pseudo - Index implicite via contrainte UNIQUE
- membres_groupes(groupe_id, client_id) - Index implicite via contrainte UNIQUE
-- Index explicites définis dans MateZone.sql CREATE INDEX idx_messages_groupe ON messages(groupe_id); CREATE INDEX idx_messages_expediteur ON messages(expediteur_id); -- Index implicites créés par les contraintes UNIQUE -- UNIQUE(pseudo) sur clients.pseudo -- UNIQUE(groupe_id, client_id) sur membres_groupes
Contraintes d'intégrité
- Clés étrangères - Cohérence référentielle
- Contraintes UNIQUE - Pas de doublons
- Contraintes NOT NULL - Données obligatoires
- Contraintes CHECK - Validation métier
Maintenance automatique
- CASCADE - Suppression en cascade
- Archivage - Messages anciens
- Nettoyage - Sessions expirées
- Statistiques - Mise à jour auto