--- title: Conception de la Base de Données description: MCD, MLD et MPD de MemeGoat. --- ## Modèle Conceptuel des Données (MCD) Le MCD définit les entités et leurs relations. ```mermaid erDiagram UTILISATEUR ||--o{ MEME : "crée" UTILISATEUR ||--o{ COMMENTAIRE : "écrit" MEME ||--o{ COMMENTAIRE : "reçoit" MEME }o--o{ TAG : "possède" UTILISATEUR { string pseudo string email string mot_de_passe datetime date_creation } MEME { string titre string url_image datetime date_creation } TAG { string nom } COMMENTAIRE { string contenu datetime date_creation } ``` ## Modèle Logique des Données (MLD) Le MLD traduit le MCD en tables avec les clés étrangères. ```mermaid erDiagram users ||--o{ memes : "user_id" users ||--o{ comments : "user_id" memes ||--o{ comments : "meme_id" memes ||--o{ meme_tags : "meme_id" tags ||--o{ meme_tags : "tag_id" users { uuid id PK varchar username varchar email text password_hash timestamp created_at } memes { uuid id PK varchar title text image_url uuid user_id FK timestamp created_at } tags { uuid id PK varchar name } meme_tags { uuid meme_id FK uuid tag_id FK } comments { uuid id PK text content uuid user_id FK uuid meme_id FK timestamp created_at } ``` ## Modèle Physique des Données (MPD) Implémentation SQL pour PostgreSQL. ```sql CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, password_hash TEXT NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE memes ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), title VARCHAR(255) NOT NULL, image_url TEXT NOT NULL, user_id UUID REFERENCES users(id) ON DELETE SET NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE tags ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(50) UNIQUE NOT NULL ); CREATE TABLE meme_tags ( meme_id UUID REFERENCES memes(id) ON DELETE CASCADE, tag_id UUID REFERENCES tags(id) ON DELETE CASCADE, PRIMARY KEY (meme_id, tag_id) ); CREATE TABLE comments ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), content TEXT NOT NULL, user_id UUID REFERENCES users(id) ON DELETE SET NULL, meme_id UUID REFERENCES memes(id) ON DELETE CASCADE, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); ```