2.4 KiB
2.4 KiB
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 :
productslie les snapshots ;scrape_runspeut être lié aux snapshots si on enregistrescrape_run_id. Commentaire : les indexesproduct_id,scraped_atetasinservent à accélérer les historiques et recherches.
Schéma base de données (SQLite)
Proposer un schéma minimal + extensible.
Tables
products
id(PK)store(ex: amazon_fr)urlasintitleimage_urlcategorytypeis_active(bool)created_at,updated_at
scrape_runs
id(PK)started_at,ended_atstatus(success/partial/failed)items_total,items_ok,items_failedlog_path(option)
product_snapshots
id(PK)product_id(FK → products.id)scraped_atprice_currentprice_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)
- (option)
tags
id,name
- (option)
product_tags
product_id,tag_id