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

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

Relations clés :
  • 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
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.