218 lines
7.6 KiB
Markdown
218 lines
7.6 KiB
Markdown
# 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<br/>-------------------<br/>+ CUS_ID<br/>- CUS_FIRST_NAME<br/>- CUS_LAST_NAME<br/>- CUS_EMAIL<br/>- CUS_CREATED_AT"]
|
|
|
|
ORDER["ORDER<br/>-------------------<br/>+ ORD_ID<br/>- ORD_DATE<br/>- ORD_TOTAL_AMOUNT<br/>- ORD_STATUS"]
|
|
|
|
PRODUCT["PRODUCT<br/>-------------------<br/>+ PRO_ID<br/>- PRO_NAME<br/>- PRO_PRICE<br/>- PRO_STOCK"]
|
|
|
|
CATEGORY["CATEGORY<br/>-------------------<br/>+ CAT_ID<br/>- CAT_NAME"]
|
|
|
|
%% ASSOCIATIONS
|
|
ASSOC_PASSER(["PASSER"])
|
|
ASSOC_CONTIENT(["CONTIENT<br/>-------------------<br/>- ITE_QUANTITY<br/>- 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** (<u>CUS_ID</u>, CUS_FIRST_NAME, CUS_LAST_NAME, CUS_EMAIL, CUS_CREATED_AT)
|
|
- **ECO_CATEGORY** (<u>CAT_ID</u>, CAT_NAME)
|
|
- **ECO_PRODUCT** (<u>PRO_ID</u>, PRO_NAME, PRO_PRICE, PRO_STOCK, #PRO_CAT_ID)
|
|
- **ECO_ORDER** (<u>ORD_ID</u>, ORD_DATE, ORD_TOTAL_AMOUNT, ORD_STATUS, #ORD_CUS_ID)
|
|
- **ECO_ORDER_ITEM** (<u>#ITE_ORD_ID</u>, <u>#ITE_PRO_ID</u>, ITE_QUANTITY, ITE_UNIT_PRICE)
|
|
|
|
*Note: Les clés primaires sont soulignées (<u>PK</u>) 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. |
|
|
```
|