83 lines
2.4 KiB
Markdown
83 lines
2.4 KiB
Markdown
# Structure base de données
|
|
|
|
## Vue d'ensemble
|
|
- `products` : produit suivi (URL canonique, store, catégories, statut).
|
|
- `scrape_runs` : trace des runs pour mesurer taux réussite / blocages.
|
|
- `product_snapshots` : historique des données extraites (prix, stock, badges, raw JSON).
|
|
|
|
## Diagramme
|
|
|
|
```
|
|
┌─────────────┐ ┌──────────────┐
|
|
│ products │ 1 N │ product_ │
|
|
│ (stores) │──────>│ snapshots │
|
|
│ id PK │ │ id PK │
|
|
│ store │ │ product_id FK│
|
|
│ url │ │ scraped_at │
|
|
│ asin │ │ price_current│
|
|
│ ... │ │ stock_text │
|
|
└─────────────┘ │ ... │
|
|
└──────────────┘
|
|
|
|
┌──────────────┐
|
|
│ scrape_runs │
|
|
│ id PK │
|
|
│ started_at │
|
|
│ ended_at │
|
|
│ status │
|
|
│ items_ok │
|
|
│ items_failed │
|
|
│ items_total │
|
|
└──────────────┘
|
|
```
|
|
|
|
> Commentaire : `products` lie les snapshots ; `scrape_runs` peut être lié aux snapshots si on enregistre `scrape_run_id`.
|
|
> Commentaire : les indexes `product_id`, `scraped_at` et `asin` servent à accélérer les historiques et recherches.
|
|
|
|
## Schéma base de données (SQLite)
|
|
Proposer un schéma minimal + extensible.
|
|
|
|
### Tables
|
|
1) `products`
|
|
- `id` (PK)
|
|
- `store` (ex: amazon_fr)
|
|
- `url`
|
|
- `asin`
|
|
- `title`
|
|
- `image_url`
|
|
- `category`
|
|
- `type`
|
|
- `is_active` (bool)
|
|
- `created_at`, `updated_at`
|
|
|
|
2) `scrape_runs`
|
|
- `id` (PK)
|
|
- `started_at`, `ended_at`
|
|
- `status` (success/partial/failed)
|
|
- `items_total`, `items_ok`, `items_failed`
|
|
- `log_path` (option)
|
|
|
|
3) `product_snapshots`
|
|
- `id` (PK)
|
|
- `product_id` (FK → products.id)
|
|
- `scraped_at`
|
|
- `price_current`
|
|
- `price_list` (nullable)
|
|
- `lowest_30d_price` (nullable)
|
|
- `stock_text` (nullable)
|
|
- `in_stock` (nullable)
|
|
- `rating_value` (nullable)
|
|
- `rating_count` (nullable)
|
|
- `prime_eligible` (nullable)
|
|
- `amazon_choice` (nullable)
|
|
- `limited_time_deal` (nullable)
|
|
- `amazon_exclusive` (nullable)
|
|
- `raw_json_path` (nullable)
|
|
- `scrape_status` (ok/blocked/missing_fields/error)
|
|
- `error_message` (nullable)
|
|
|
|
4) (option) `tags`
|
|
- `id`, `name`
|
|
|
|
5) (option) `product_tags`
|
|
- `product_id`, `tag_id` |