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
Sécurité : Le fichier config.properties contient les identifiants de base de données et ne doit jamais être versionné.

🔧 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
Note : Copiez config.properties.example vers config.properties et modifiez avec vos paramètres.

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

Relations clés :
  • 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
Avantage : Garantit la cohérence des données au niveau de la base, indépendamment de l'application.
🧹

Maintenance automatique

  • CASCADE - Suppression en cascade
  • Archivage - Messages anciens
  • Nettoyage - Sessions expirées
  • Statistiques - Mise à jour auto
Résultat : Base de données auto-entretenue avec performance constante.