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
Détail des tables principales de la base de données MateZone
👤 Table clients
Stockage des comptes utilisateur avec leurs informations d'authentification et image de profil.
| Champ | Type | Contraintes | Description |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Identifiant unique du client |
| pseudo | VARCHAR | NOT NULL, UNIQUE | Nom d'utilisateur pour la connexion |
| mdp | VARCHAR | NOT NULL | Mot de passe (hashé) |
| img_data | MEDIUMBLOB | NULL | Image de profil (données binaires) |
CREATE TABLE IF NOT EXISTS clients
(
id INT AUTO_INCREMENT PRIMARY KEY,
pseudo VARCHAR(...) NOT NULL UNIQUE,
mdp VARCHAR(...) NOT NULL,
img_data MEDIUMBLOB
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
🏢 Table groupes
Gestion des groupes/canaux de discussion avec leurs créateurs et métadonnées.
| Champ | Type | Contraintes | Description |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Identifiant unique du groupe |
| nom | VARCHAR | NOT NULL | Nom du groupe/canal |
| description | TEXT | NULL | Description du groupe |
| cree_par | INT | FOREIGN KEY | Référence vers le client créateur |
| date_creation | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Date de création du groupe |
CREATE TABLE IF NOT EXISTS groupes
(
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(...) NOT NULL,
description TEXT,
cree_par INT,
date_creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (cree_par) REFERENCES clients(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
💬 Table messages
Conservation de l'historique complet des messages avec support des images et fichiers.
| Champ | Type | Contraintes | Description |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Identifiant unique du message |
| auteur_id | INT | FOREIGN KEY, NOT NULL | Référence vers l'utilisateur auteur |
| canal_id | INT | FOREIGN KEY, NOT NULL | Référence vers le canal de discussion |
| contenu | TEXT | NOT NULL | Contenu textuel du message |
| timestamp | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Date et heure d'envoi du message |
| type_message | ENUM | 'text', 'system', 'notification' | Type de message |
| modifie | BOOLEAN | DEFAULT FALSE | Indique si le message a été modifié |
CREATE TABLE messages (
id INT PRIMARY KEY AUTO_INCREMENT,
auteur_id INT NOT NULL,
canal_id INT NOT NULL,
contenu TEXT NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
type_message ENUM('text', 'system', 'notification') DEFAULT 'text',
modifie BOOLEAN DEFAULT FALSE,
FOREIGN KEY (auteur_id) REFERENCES utilisateurs(id) ON DELETE CASCADE,
FOREIGN KEY (canal_id) REFERENCES canaux(id) ON DELETE CASCADE
);
🏷️ Table Canaux
Organisation des discussions en canaux thématiques avec gestion des permissions.
| Champ | Type | Contraintes | Description |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Identifiant unique du canal |
| nom | VARCHAR(100) | NOT NULL, UNIQUE | Nom du canal de discussion |
| description | TEXT | NULL | Description du canal |
| createur_id | INT | FOREIGN KEY, NOT NULL | Référence vers l'utilisateur créateur |
| date_creation | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Date de création du canal |
| type_canal | ENUM | 'public', 'prive', 'direct' | Type de canal |
| actif | BOOLEAN | DEFAULT TRUE | Indique si le canal est actif |
CREATE TABLE canaux (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(100) NOT NULL UNIQUE,
description TEXT,
createur_id INT NOT NULL,
date_creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
type_canal ENUM('public', 'prive', 'direct') DEFAULT 'public',
actif BOOLEAN DEFAULT TRUE,
FOREIGN KEY (createur_id) REFERENCES utilisateurs(id) ON DELETE CASCADE
);
🔗 Table membres_groupes
Table d'association pour gérer l'appartenance des clients aux groupes de discussion.
| Champ | Type | Contraintes | Description |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Identifiant unique de l'association |
| client_id | INT | FOREIGN KEY, NOT NULL | Référence vers le client |
| groupe_id | INT | FOREIGN KEY, NOT NULL | Référence vers le groupe |
| date_adhesion | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Date d'adhésion au groupe |
| role | VARCHAR | DEFAULT 'membre' | Rôle du client dans le groupe |
CREATE TABLE IF NOT EXISTS membres_groupes
(
id INT AUTO_INCREMENT PRIMARY KEY,
client_id INT NOT NULL,
groupe_id INT NOT NULL,
date_adhesion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
role VARCHAR(50) DEFAULT 'membre',
FOREIGN KEY (groupe_id) REFERENCES groupes(id) ON DELETE CASCADE,
FOREIGN KEY (client_id) REFERENCES clients(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Diagramme relationnel
Visualisation des relations entre les tables de la base de données
👤 UTILISATEURS
id (PK), pseudo, mot_de_passe, email, date_creation, derniere_connexion, statut
🏷️ CANAUX
id (PK), nom, description, createur_id (FK), date_creation, type_canal, actif
🔗 MEMBRES_CANAUX
utilisateur_id (FK), canal_id (FK), date_adhesion, role
💬 MESSAGES
id (PK), auteur_id (FK), canal_id (FK), contenu, timestamp, type_message, modifie
- Un utilisateur peut créer plusieurs canaux (1:N)
- Un utilisateur peut appartenir à plusieurs canaux (N:M via membres_canaux)
- Un canal contient plusieurs messages (1:N)
- Un utilisateur peut écrire plusieurs messages (1:N)
Opérations principales
Exemples de requêtes SQL typiques utilisées par MateZone
👤 Gestion des utilisateurs
Inscription d'un nouvel utilisateur :
INSERT INTO utilisateurs (pseudo, mot_de_passe, email)
VALUES ('nouveau_user', 'hash_password', 'user@example.com');
Authentification :
SELECT id, pseudo, statut FROM utilisateurs WHERE pseudo = ? AND mot_de_passe = ?;
Mise à jour de la dernière connexion :
UPDATE utilisateurs SET derniere_connexion = CURRENT_TIMESTAMP WHERE id = ?;
💬 Gestion des messages
Envoi d'un nouveau message :
INSERT INTO messages (auteur_id, canal_id, contenu) VALUES (?, ?, ?);
Récupération de l'historique :
SELECT m.contenu, m.timestamp, u.pseudo FROM messages m JOIN utilisateurs u ON m.auteur_id = u.id WHERE m.canal_id = ? ORDER BY m.timestamp DESC LIMIT 50;
Recherche de messages :
SELECT m.*, u.pseudo FROM messages m JOIN utilisateurs u ON m.auteur_id = u.id WHERE m.contenu LIKE ? AND m.canal_id = ?;
🏷️ Gestion des canaux
Création d'un canal :
INSERT INTO canaux (nom, description, createur_id, type_canal) VALUES (?, ?, ?, ?);
Liste des canaux d'un utilisateur :
SELECT c.id, c.nom, c.description, mc.role FROM canaux c JOIN membres_canaux mc ON c.id = mc.canal_id WHERE mc.utilisateur_id = ? AND c.actif = TRUE;
Ajout d'un membre au canal :
INSERT INTO membres_canaux (utilisateur_id, canal_id, role) VALUES (?, ?, 'membre');
📊 Statistiques et rapports
Nombre de messages par canal :
SELECT c.nom, COUNT(m.id) as nb_messages FROM canaux c LEFT JOIN messages m ON c.id = m.canal_id GROUP BY c.id, c.nom;
Utilisateurs les plus actifs :
SELECT u.pseudo, COUNT(m.id) as nb_messages FROM utilisateurs u JOIN messages m ON u.id = m.auteur_id GROUP BY u.id, u.pseudo ORDER BY nb_messages DESC LIMIT 10;
Activité récente :
SELECT DATE(timestamp) as jour, COUNT(*) as nb_messages FROM messages WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 7 DAY) GROUP BY DATE(timestamp) ORDER BY jour;
Performance et optimisation
Stratégies mises en place pour optimiser les performances de la base de données
Index optimisés
- utilisateurs.pseudo - Connexion rapide
- messages.canal_id - Récupération des messages
- messages.timestamp - Tri chronologique
- membres_canaux(utilisateur_id, canal_id) - Jointures
CREATE INDEX idx_messages_canal_timestamp ON messages(canal_id, timestamp DESC); CREATE INDEX idx_utilisateurs_pseudo ON utilisateurs(pseudo); CREATE INDEX idx_messages_auteur ON messages(auteur_id);
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