# End-to-End Database Design Example: E-Commerce Platform This reference demonstrates the exact structure and content required for `db/mcd.md` and `db/mld.md` in a project named `ECOMMERCE` (Database Trigram: `ECO`). --- ## 1. File: `db/mcd.md` (Conceptual Data Model) ```markdown # Modèle Conceptuel de Données (MCD) - E-Commerce Platform **Projet**: E-Commerce Platform **Trigramme Base de Données**: `ECO` **Dernière mise à jour**: 2026-09-12 **Version**: 1.0.0 --- ## 1. Dictionnaire des Données | Code Propriété | Libellé / Description | Type | Contraintes | Entité Source | | :--- | :--- | :--- | :--- | :--- | | `CUS_ID` | Identifiant unique du client | INT | PK, NOT NULL | CUSTOMER | | `CUS_FIRST_NAME` | Prénom du client | VARCHAR(50) | NOT NULL | CUSTOMER | | `CUS_LAST_NAME` | Nom de famille du client | VARCHAR(50) | NOT NULL | CUSTOMER | | `CUS_EMAIL` | Adresse e-mail du client | VARCHAR(150) | UNIQUE, NOT NULL | CUSTOMER | | `CUS_CREATED_AT` | Date d'inscription | TIMESTAMP | NOT NULL | CUSTOMER | | `ORD_ID` | Identifiant unique de la commande | INT | PK, NOT NULL | ORDER | | `ORD_DATE` | Date de la commande | TIMESTAMP | NOT NULL | ORDER | | `ORD_TOTAL_AMOUNT` | Montant total de la commande | DECIMAL(10,2) | NOT NULL, >= 0 | ORDER | | `ORD_STATUS` | Statut de la commande (PENDING, PAID, SHIPPED) | VARCHAR(20) | NOT NULL | ORDER | | `PRO_ID` | Identifiant unique du produit | INT | PK, NOT NULL | PRODUCT | | `PRO_NAME` | Nom du produit | VARCHAR(100) | NOT NULL | PRODUCT | | `PRO_PRICE` | Prix unitaire hors taxe | DECIMAL(10,2) | NOT NULL, >= 0 | PRODUCT | | `PRO_STOCK` | Quantité en stock | INT | NOT NULL, >= 0 | PRODUCT | | `CAT_ID` | Identifiant de la catégorie | INT | PK, NOT NULL | CATEGORY | | `CAT_NAME` | Nom de la catégorie | VARCHAR(50) | UNIQUE, NOT NULL | CATEGORY | | `ITE_QUANTITY` | Quantité commandée pour un produit | INT | NOT NULL, > 0 | CONTIENT (ASSOCIATION) | | `ITE_UNIT_PRICE` | Prix unitaire facturé au moment de l'achat | DECIMAL(10,2) | NOT NULL | CONTIENT (ASSOCIATION) | --- ## 2. Règles de Gestion & Associations 1. **PASSER (PLACE)** : - Un client peut passer 0 ou plusieurs commandes : `CUSTOMER (0,N)`. - Une commande est passée par exactement un client : `ORDER (1,1)`. 2. **CONTIENT (CONTAIN)** : - Une commande contient 1 ou plusieurs produits : `ORDER (1,N)`. - Un produit peut figurer dans 0 ou plusieurs commandes : `PRODUCT (0,N)`. - Propriétés de l'association : `ITE_QUANTITY`, `ITE_UNIT_PRICE`. 3. **CLASSIFIER (CLASSIFY)** : - Une catégorie peut contenir 0 ou plusieurs produits : `CATEGORY (0,N)`. - Un produit appartient obligatoirement à une et une seule catégorie : `PRODUCT (1,1)`. --- ## 3. Diagramme Conceptuel (MCD) ```mermaid flowchart LR %% ENTITIES CUSTOMER["CUSTOMER
-------------------
+ CUS_ID
- CUS_FIRST_NAME
- CUS_LAST_NAME
- CUS_EMAIL
- CUS_CREATED_AT"] ORDER["ORDER
-------------------
+ ORD_ID
- ORD_DATE
- ORD_TOTAL_AMOUNT
- ORD_STATUS"] PRODUCT["PRODUCT
-------------------
+ PRO_ID
- PRO_NAME
- PRO_PRICE
- PRO_STOCK"] CATEGORY["CATEGORY
-------------------
+ CAT_ID
- CAT_NAME"] %% ASSOCIATIONS ASSOC_PASSER(["PASSER"]) ASSOC_CONTIENT(["CONTIENT
-------------------
- ITE_QUANTITY
- ITE_UNIT_PRICE"]) ASSOC_CLASSIER(["CLASSIFIER"]) %% CARDINALITIES CUSTOMER ---|"0,N"| ASSOC_PASSER ASSOC_PASSER ---|"1,1"| ORDER ORDER ---|"1,N"| ASSOC_CONTIENT ASSOC_CONTIENT ---|"0,N"| PRODUCT PRODUCT ---|"1,1"| ASSOC_CLASSIER ASSOC_CLASSIER ---|"0,N"| CATEGORY %% STYLING classDef entity fill:#e1f5fe,stroke:#0288d1,stroke-width:2px,color:#01579b; classDef assoc fill:#fff3e0,stroke:#f57c00,stroke-width:2px,color:#e65100; class CUSTOMER,ORDER,PRODUCT,CATEGORY entity; class ASSOC_PASSER,ASSOC_CONTIENT,ASSOC_CLASSIER assoc; ``` --- ## 4. Historique des Modifications (Changelog) | Version | Date | Auteur | Description des modifications | | :--- | :--- | :--- | :--- | | 1.0.0 | 2026-09-12 | AI Assistant | Création initiale du MCD avec CUSTOMER, ORDER, PRODUCT, CATEGORY. | ``` --- ## 2. File: `db/mld.md` (Logical Data Model) ```markdown # Modèle Logique de Données (MLD) - E-Commerce Platform **Projet**: E-Commerce Platform **Trigramme Base de Données**: `ECO` **Dernière mise à jour**: 2026-09-12 **Version**: 1.0.0 --- ## 1. Schéma Relationnel Textuel - **ECO_CUSTOMER** (CUS_ID, CUS_FIRST_NAME, CUS_LAST_NAME, CUS_EMAIL, CUS_CREATED_AT) - **ECO_CATEGORY** (CAT_ID, CAT_NAME) - **ECO_PRODUCT** (PRO_ID, PRO_NAME, PRO_PRICE, PRO_STOCK, #PRO_CAT_ID) - **ECO_ORDER** (ORD_ID, ORD_DATE, ORD_TOTAL_AMOUNT, ORD_STATUS, #ORD_CUS_ID) - **ECO_ORDER_ITEM** (#ITE_ORD_ID, #ITE_PRO_ID, ITE_QUANTITY, ITE_UNIT_PRICE) *Note: Les clés primaires sont soulignées (PK) et les clés étrangères sont préfixées d'un dièse (#).* --- ## 2. Description des Tables & Contraintes ### 2.1 Table `ECO_CUSTOMER` - `CUS_ID`: INT, PRIMARY KEY, AUTO_INCREMENT - `CUS_FIRST_NAME`: VARCHAR(50), NOT NULL - `CUS_LAST_NAME`: VARCHAR(50), NOT NULL - `CUS_EMAIL`: VARCHAR(150), UNIQUE, NOT NULL - `CUS_CREATED_AT`: TIMESTAMP, DEFAULT CURRENT_TIMESTAMP ### 2.2 Table `ECO_CATEGORY` - `CAT_ID`: INT, PRIMARY KEY, AUTO_INCREMENT - `CAT_NAME`: VARCHAR(50), UNIQUE, NOT NULL ### 2.3 Table `ECO_PRODUCT` - `PRO_ID`: INT, PRIMARY KEY, AUTO_INCREMENT - `PRO_NAME`: VARCHAR(100), NOT NULL - `PRO_PRICE`: DECIMAL(10,2), NOT NULL, CHECK (PRO_PRICE >= 0) - `PRO_STOCK`: INT, NOT NULL, DEFAULT 0, CHECK (PRO_STOCK >= 0) - `PRO_CAT_ID`: INT, NOT NULL, FOREIGN KEY REFERENCES `ECO_CATEGORY(CAT_ID)` ### 2.4 Table `ECO_ORDER` - `ORD_ID`: INT, PRIMARY KEY, AUTO_INCREMENT - `ORD_DATE`: TIMESTAMP, NOT NULL, DEFAULT CURRENT_TIMESTAMP - `ORD_TOTAL_AMOUNT`: DECIMAL(10,2), NOT NULL, CHECK (ORD_TOTAL_AMOUNT >= 0) - `ORD_STATUS`: VARCHAR(20), NOT NULL, CHECK (ORD_STATUS IN ('PENDING', 'PAID', 'SHIPPED', 'CANCELLED')) - `ORD_CUS_ID`: INT, NOT NULL, FOREIGN KEY REFERENCES `ECO_CUSTOMER(CUS_ID)` ### 2.5 Table `ECO_ORDER_ITEM` (Junction Table) - `ITE_ORD_ID`: INT, NOT NULL, FOREIGN KEY REFERENCES `ECO_ORDER(ORD_ID)` ON DELETE CASCADE - `ITE_PRO_ID`: INT, NOT NULL, FOREIGN KEY REFERENCES `ECO_PRODUCT(PRO_ID)` - `ITE_QUANTITY`: INT, NOT NULL, CHECK (ITE_QUANTITY > 0) - `ITE_UNIT_PRICE`: DECIMAL(10,2), NOT NULL, CHECK (ITE_UNIT_PRICE >= 0) - **PRIMARY KEY**: `(ITE_ORD_ID, ITE_PRO_ID)` --- ## 3. Diagramme Logique (MLD) ```mermaid erDiagram ECO_CUSTOMER { INT CUS_ID PK VARCHAR CUS_FIRST_NAME VARCHAR CUS_LAST_NAME VARCHAR CUS_EMAIL TIMESTAMP CUS_CREATED_AT } ECO_CATEGORY { INT CAT_ID PK VARCHAR CAT_NAME } ECO_PRODUCT { INT PRO_ID PK VARCHAR PRO_NAME DECIMAL PRO_PRICE INT PRO_STOCK INT PRO_CAT_ID FK } ECO_ORDER { INT ORD_ID PK TIMESTAMP ORD_DATE DECIMAL ORD_TOTAL_AMOUNT VARCHAR ORD_STATUS INT ORD_CUS_ID FK } ECO_ORDER_ITEM { INT ITE_ORD_ID PK,FK INT ITE_PRO_ID PK,FK INT ITE_QUANTITY DECIMAL ITE_UNIT_PRICE } ECO_CUSTOMER ||--o{ ECO_ORDER : "places" ECO_CATEGORY ||--o{ ECO_PRODUCT : "classifies" ECO_ORDER ||--|{ ECO_ORDER_ITEM : "contains" ECO_PRODUCT ||--o{ ECO_ORDER_ITEM : "ordered_in" ``` --- ## 4. Historique des Modifications (Changelog) | Version | Date | Auteur | Description des modifications | | :--- | :--- | :--- | :--- | | 1.0.0 | 2026-09-12 | AI Assistant | Création initiale du MLD avec ECO_CUSTOMER, ECO_CATEGORY, ECO_PRODUCT, ECO_ORDER, ECO_ORDER_ITEM. | ```