Documentation · Documentation technique

Schéma de la base de données

Ce document décrit les tables de base de données personnalisées créées par le plugin ADP Car Market Hub. Toutes les tables sont gérées avec l'assistant dbDelta() de WordPress et sont créées lors de l'activation du plugin. Leurs versions de schéma sont suivies dans wp_options afin que dbDelta puisse appliquer les modifications de colonnes en toute sécurité lors d'une mise à jour.

Quand utiliser ce document

Lisez ce document si vous devez :

  • Planifier des sauvegardes, de la rétention ou des travaux de conformité pour les données du plugin.
  • Créer des rapports personnalisés basés sur les tables du plugin.
  • Diagnostiquer des échecs de mise à jour de schéma ou des colonnes manquantes.
  • Comprendre quelles tables sont supprimées lors de la désinstallation et lesquelles ne le sont pas.

Pour le modèle d'entité logique qui utilise ces tables, voir le Modèle de données.

Aperçu

Le plugin crée cinq tables personnalisées :

Suffixe de tableObjectifOption de version de schéma
as24_vehiclesDonnées de champs de véhicules, remplaçant la majeure partie de l'utilisation de wp_postmeta.as24ci_vehicles_db_version
as24ci_analyticsÉvénements analytiques pour les pages de véhicules et les actions de filtre globales.as24ci_analytics_db_version
as24ci_search_agentsAbonnements aux alertes de recherche des visiteurs (Smart Stock Alerts).as24ci_search_agent_db_version
as24ci_content_studio_jobsTâches de génération du Content Studio (une ligne par tâche).as24ci_content_studio_db_version
as24ci_content_studio_assetsRessources générées par le Content Studio, liées à une tâche par job_id.as24ci_content_studio_db_version

Les noms réels des tables utilisent le préfixe {$wpdb->prefix} de WordPress (généralement wp_). La version du schéma de la table d'analyse est stockée dans as24ci_analytics_db_version (constante AS24CI\Analytics::DB_VERSION_KEY). Les deux tables du Content Studio partagent une seule option de version de schéma (as24ci_content_studio_db_version, valeur actuelle 1.3.0) définie sur AS24CI\Content_Studio_Options::DB_VERSION et gérée par AS24CI\Content_Studio_Repository::maybe_create_tables().

Le plugin s'appuie également sur les tables de base de WordPress wp_posts, wp_postmeta, wp_term_relationships, wp_term_taxonomy et wp_terms pour les types de publication as24ci_car et as24ci_lead ainsi que pour les 15 taxonomies de véhicules. Ces tables suivent le schéma standard de WordPress et ne sont pas redéfinies par le plugin.

Les cinq tables personnalisées sont supprimées automatiquement lors de la désinstallation (voir la section Comportement lors de la désinstallation ci-dessous), quel que soit le réglage as24ci_delete_data_on_uninstall.



Table : {$wpdb->prefix}as24_vehicles

Propriétaire : AS24CI\Vehicle_Repository. Créée via Vehicle_Repository::maybe_create_table() lors de l'activation et vérifiée à nouveau lors des exécutions ultérieures. La constante de version actuelle du schéma est 1.1, stockée dans l'option as24ci_vehicles_db_version.

La table contient une ligne par véhicule, liée à sa publication as24ci_car par la colonne post_id. La colonne as24_id contient l'identifiant d'annonce AutoScout24. Les deux colonnes ont des index uniques.

Colonnes

ColonneTypeNotes
idbigint(20) unsignedClé primaire, auto-incrémentation.
post_idbigint(20) unsignedID de publication WordPress pour le as24ci_car lié. Unique.
as24_idvarchar(64)Identifiant d'annonce AutoScout24. Unique. Valeur par défaut : chaîne vide.
seller_idvarchar(64)Identifiant de vendeur AutoScout24.
makevarchar(100)
modelvarchar(100)
version_full_namevarchar(255)Libellé complet de la finition/version tel que fourni par l'API.
condition_typevarchar(50)Par ex. new, used, demo (les valeurs reflètent l'API source).
body_typevarchar(50)
fuel_typevarchar(50)
transmission_typevarchar(50)
drive_typevarchar(50)
color_exteriorvarchar(100)
color_interiorvarchar(100)
doorstinyint(3) unsignedValeur par défaut : 0.
seatstinyint(3) unsignedValeur par défaut : 0.
mileageint(10) unsignedValeur par défaut : 0.
cubic_capacityint(10) unsignedCylindrée du moteur.
range_kmint(10) unsignedAutonomie électrique en kilomètres.
first_registrationdateAutorise la valeur Null.
first_reg_yearsmallint(5) unsignedComposante année de first_registration. Valeur par défaut : 0.
power_kwsmallint(5) unsigned
power_hpsmallint(5) unsigned
co2_emissionsmallint(5) unsignedg/km.
pricedecimal(10,2)Prix de vente.
list_pricedecimal(10,2)Prix catalogue/MSRP (si fourni).
currencychar(3)Code ISO 4217 ; valeur par défaut : EUR.
emission_standardvarchar(20)Par ex. Euro 6.
energy_labelchar(5)Étiquette énergétique A-G.
battery_capacitydecimal(6,2)kWh.
vinvarchar(20)Numéro d'identification du véhicule (VIN).
statusvarchar(30)Statut de l'annonce tel que fourni par l'API.
is_livetinyint(1)1 si l'annonce est actuellement en ligne, 0 sinon.
had_accidenttinyint(1)
equipment_codeslongtextTableau JSON de codes d'équipement. Autorise la valeur Null.
equipment_standardlongtextListe JSON d'équipements de série. Autorise la valeur Null.
equipment_optionallongtextListe JSON d'équipements optionnels. Autorise la valeur Null.
imageslongtextListe JSON d'URL d'images telles que fournies par l'API.
raw_datalongtextCharge utile source complète conservée pour le diagnostic.
manual_overrideslongtextObjet JSON des champs modifiés par l'administrateur qui surchargent les valeurs importées.
content_hashvarchar(64)Hash utilisé pour ignorer les réimportations d'annonces inchangées.
imported_atdatetimeValeur par défaut : CURRENT_TIMESTAMP.
updated_atdatetimeValeur par défaut : CURRENT_TIMESTAMP. Voir la note d'implémentation ci-dessous.

Note d'implémentation : updated_at est créé avec uniquement DEFAULT CURRENT_TIMESTAMP à l'intérieur du SQL dbDelta car l'ajout direct de ON UPDATE CURRENT_TIMESTAMP amène dbDelta à réémettre un ALTER à chaque chargement du plugin. La sémantique de ON UPDATE est appliquée via un ALTER unique après l'exécution de dbDelta.

Index

IndexTypeColonnesObjectif
PRIMARYPrimaryidClé primaire de substitution.
uk_as24_idUniqueas24_idUne ligne par annonce AutoScout24.
uk_post_idUniquepost_idUne ligne par publication de véhicule WordPress.
idx_make_modelIndexmake, modelGère les filtres d'archive marque/modèle.
idx_priceIndexpriceTri des prix / filtrage par plage.
idx_mileageIndexmileageTri du kilométrage / filtrage par plage.
idx_first_reg_yearIndexfirst_reg_yearTri de l'année / filtrage par plage.
idx_fuel_conditionIndexfuel_type, condition_typeFiltre combiné commun.
idx_status_liveIndexstatus, is_liveRequêtes d'annonces en ligne.
idx_content_hashIndexcontent_hashRecherches lors de la détection de changements.

Filet de sécurité pour manual_overrides

Après l'exécution de dbDelta, le dépôt effectue une vérification SHOW COLUMNS ... LIKE 'manual_overrides' et, si la colonne est manquante, émet un ALTER TABLE ... ADD COLUMN manual_overrides longtext DEFAULT NULL AFTER raw_data explicite. Cela compense les problèmes occasionnels de détection de colonnes dans certaines combinaisons MySQL/MariaDB et garantit que la couche de surcharge manuelle dispose toujours d'un emplacement pour stocker les données.

Table : {$wpdb->prefix}as24ci_analytics

Propriétaire : AS24CI\Analytics. Créée via Analytics::maybe_create_table() lors de l'activation et vérifiée à chaque chargement de page d'administration (la méthode est également liée à admin_init afin que les installations existantes récupèrent les nouvelles colonnes sans réactivation manuelle).

Colonnes

ColonneTypeNotes
idbigint(20) unsignedClé primaire, auto-incrémentation.
post_idbigint(20) unsignedID de publication du véhicule. 0 pour les événements globaux tels que les recherches par filtre.
event_typevarchar(20)Identifiant d'événement ; valeur par défaut : view. Validé par rapport à ALLOWED_EVENTS.
extra_datalongtextCharge utile facultative encodée en JSON. Autorise la valeur Null.
created_atdatetimeValeur par défaut : CURRENT_TIMESTAMP.

Index

IndexTypeColonnes
PRIMARYPrimaryid
post_event_dateIndexpost_id, event_type, created_at
event_typeIndexevent_type, created_at
created_atIndexcreated_at

Rétention

Les insertions ne se produisent que lorsque Options::ANALYTICS_ENABLED est 1. Une tâche de rétention quotidienne s'exécute via le hook cron as24ci_daily_cleanup (planifié lors de l'activation, supprimé lors de la désactivation). La fenêtre de rétention est configurée via l'onglet d'administration de l'analyse.



Table : {$wpdb->prefix}as24ci_search_agents

Propriétaire : AS24CI\Search_Agent. Créée via Search_Agent::maybe_create_table() sur init (priorité 1) afin qu'elle soit disponible à la fois pour les gestionnaires AJAX de l'administration et du frontend. La version actuelle du schéma est 1.1, stockée dans l'option as24ci_search_agent_db_version. La création est conditionnée par le basculement Options::FEATURE_SEARCH_AGENT, mais le schéma est enregistré sans condition lorsque la classe de fonctionnalité est chargée.

Colonnes

ColonneTypeNotes
idBIGINT UNSIGNEDClé primaire, auto-incrémentation.
nameVARCHAR(255)Nom d'affichage du visiteur ; chaîne vide par défaut.
emailVARCHAR(255)Adresse e-mail du visiteur.
criteriaTEXTCritères de recherche enregistrés (représentation sérialisée).
tokenVARCHAR(64)Jeton pour les liens de confirmation et de désinscription.
frequencyVARCHAR(20)Fréquence de notification ; daily par défaut.
statusVARCHAR(20)L'un des éléments suivants : pending, active, inactive, paused. Valeur par défaut : pending.
created_atDATETIMEValeur par défaut : CURRENT_TIMESTAMP.
confirmed_atDATETIMEPeut être nul ; défini lorsque le visiteur confirme via le Double-Opt-In.

Index

IndexTypeColonnes
PRIMARYPrimaryid
idx_statusIndexstatus
idx_tokenIndextoken

Confidentialité

Comme la table contient des données personnelles (nom, e-mail, préférences de recherche), elle est supprimée lors de la désinstallation, quel que soit le réglage de as24ci_delete_data_on_uninstall. Les exploitants du site sont responsables des outils de conservation ou d'exportation supplémentaires requis par les réglementations locales en matière de confidentialité.

Table : {$wpdb->prefix}as24ci_content_studio_jobs

Propriétaire : AS24CI\Content_Studio_Repository. Créée via Content_Studio_Repository::maybe_create_tables() (enregistré comme son propre hook d'activation dans le fichier principal du plugin et également appelé de manière paresseuse par la plupart des méthodes de dépôt). Contient une ligne par tâche de génération du Content Studio. Les valeurs de statut sont draft, queued, processing, ready et failed.

Colonnes

ColonneTypeNotes
idbigint(20) unsignedClé primaire, auto-incrémentation.
vehicle_post_idbigint(20) unsignedPublication du véhicule source. Valeur par défaut : 0.
vehicle_snapshot_hashvarchar(64)Empreinte (hash) de l'instantané du véhicule utilisé pour la tâche.
content_typevarchar(40)Type de contenu demandé.
platform_presetvarchar(40)Préréglage de la plateforme cible.
output_formatvarchar(20)Format de sortie.
preset_keyvarchar(80)Clé du catalogue de préréglages.
statusvarchar(20)Valeur par défaut : draft.
prompt_payloadlongtextCharge utile du prompt JSON. Peut être nul.
providervarchar(40)Valeur par défaut : google.
modelvarchar(80)Modèle du fournisseur.
languagevarchar(20)Langue de sortie.
tonevarchar(40)Ton de voix.
attemptssmallint(5) unsignedTentatives de traitement. Valeur par défaut : 0.
last_errortextDernier message d'erreur. Peut être nul.
created_bybigint(20) unsignedID utilisateur WordPress. Valeur par défaut : 0.
created_atdatetimeValeur par défaut : CURRENT_TIMESTAMP.
updated_atdatetimeValeur par défaut : CURRENT_TIMESTAMP.
started_atdatetimePeut être nul.
completed_atdatetimePeut être nul.

Index : PRIMARY (id), vehicle_post_id, status_created (status, created_at), platform_preset, content_type.

Table : {$wpdb->prefix}as24ci_content_studio_assets

Propriétaire : AS24CI\Content_Studio_Repository. Contient les ressources générées (texte, images, packs de rédaction) appartenant à une tâche, liées par job_id.

Colonnes

ColonneTypeNotes
idbigint(20) unsignedClé primaire, auto-incrémentation.
job_idbigint(20) unsignedTâche parente. Valeur par défaut : 0.
vehicle_post_idbigint(20) unsignedPublication du véhicule source. Valeur par défaut : 0.
asset_typevarchar(40)Type de ressource.
file_pathtextChemin du fichier local. Peut être nul.
file_urltextURL publique. Peut être nul.
mime_typevarchar(120)Type MIME.
file_sizebigint(20) unsignedOctets. Valeur par défaut : 0.
widthint(10) unsignedLargeur de l'image. Valeur par défaut : 0.
heightint(10) unsignedHauteur de l'image. Valeur par défaut : 0.
duration_secondsdecimal(8,2)Durée du média. Valeur par défaut : 0.00.
captionlongtextPeut être nul.
hashtagslongtextPeut être nul.
alt_texttextPeut être nul.
thumbnail_pathtextPeut être nul.
payload_jsonlongtextCharge utile structurée (ex. packs de rédaction). Peut être nul.
scheduled_atdatetimePeut être nul.
schedule_statusvarchar(32)Valeur par défaut : unscheduled.
created_atdatetimeValeur par défaut : CURRENT_TIMESTAMP.

Index : PRIMARY (id), job_id, vehicle_post_id, asset_type, created_at, schedule_status, scheduled_at.

Tables de cœur WordPress utilisées par le plugin

Le plugin ne modifie pas le schéma des tables de cœur WordPress. Il s'appuie sur elles de la manière suivante :

  • wp_posts — stocke les publications de as24ci_car (véhicules) et de as24ci_lead (leads).
  • wp_postmeta — stocke les métadonnées de publication (postmeta) de compatibilité descendante pour les publications de véhicules (_as24ci_listing_id, _as24ci_content_hash, _as24ci_images_hash, _as24ci_image_ids, _as24ci_manual_image_ids) et le statut du lead (_as24ci_lead_status).
  • wp_terms, wp_term_taxonomy, wp_term_relationships — stockent les 15 taxonomies de véhicules enregistrées par AS24CI\Taxonomies.
  • wp_options — stocke tous les réglages du plugin (clés définies comme constantes sur AS24CI\Options), ainsi que les marqueurs de version de schéma et les ID des pages créées lors de l'activation.
  • wp_users et wp_usermeta — utilisés indirectement via les capacités WordPress ; aucune écriture spécifique au plugin.

Les rôles et capacités personnalisés créés par le plugin (as24ci_editor, l'ensemble de capacités as24ci_car/as24ci_cars et manage_as24_imports) sont stockés via l'option standard des rôles WordPress (wp_user_roles).

Comportement lors de la désinstallation

Le script uninstall.php émet toujours DROP TABLE IF EXISTS pour les cinq tables personnalisées et supprime les options de version de schéma correspondantes :

  • {$wpdb->prefix}as24_vehicles (et as24ci_vehicles_db_version)
  • {$wpdb->prefix}as24ci_analytics
  • {$wpdb->prefix}as24ci_search_agents (et as24ci_search_agent_db_version)
  • {$wpdb->prefix}as24ci_content_studio_assets
  • {$wpdb->prefix}as24ci_content_studio_jobs (et as24ci_content_studio_db_version)

Sur les installations multisites, le script bascule sur chaque site et répète le nettoyage. Les publications, les pièces jointes et les pages créées lors de l'activation ne sont supprimées que lorsque l'administrateur a défini as24ci_delete_data_on_uninstall sur 1.

Notes opérationnelles

  • Les mises à niveau de schéma sont idempotentes. Chaque classe propriétaire vérifie son option de version de schéma et quitte rapidement lorsque la table correspond déjà à la version attendue. Le dépôt de véhicules vérifie en outre que la table existe physiquement avant de quitter rapidement.
  • Des requêtes directes wpdb sur ces tables existent dans les chemins de code du dépôt, de l'analyse, de l'agent de recherche et de la désinstallation. Elles sont protégées par des commentaires d'ignorance PHPCS le cas échéant. Le code personnalisé qui contourne le dépôt doit traiter le schéma comme faisant partie du contrat interne du plugin et se préparer à des modifications de colonnes entre les versions.
  • Les colonnes raw_data, equipment_* et images contiennent des données sérialisées. Traitez-les comme des blocs opaques (blobs) et accédez-y via les assistants du dépôt lorsque cela est possible.
  • La colonne manual_overrides est le seul endroit qui mélange l'état contrôlé par l'administrateur et l'état contrôlé par l'importateur. Évitez d'y écrire directement sans passer par la couche de surcharge.

Dépannage

  • maybe_create_table() n'a pas créé la table des véhicules. Confirmez que dbDelta() n'a signalé aucune erreur. Le dépôt écrit les erreurs dans error_log() car il s'exécute avant que le Logger du plugin ne soit disponible. Réexécuter l'activation (désactiver, activer) réexécute maybe_create_table().
  • Une nouvelle colonne est manquante après une mise à niveau du plugin. Vérifiez l'option de version de schéma pour la table concernée. Si elle est égale à la valeur actuelle mais que la colonne est manquante, supprimez l'option pour forcer la réexécution de dbDelta lors du prochain chargement de page d'administration. La table des véhicules dispose d'un filet de sécurité explicite manual_overrides pour ce cas.
  • La table d'analyse grandit rapidement. Réduisez la fenêtre de conservation ou désactivez l'analyse via Options::ANALYTICS_ENABLED. La tâche de nettoyage quotidienne est requise pour maintenir la table dans des limites raisonnables.
  • Les lignes de l'agent de recherche persistent après la désinstallation. Vérifiez que WordPress a exécuté uninstall.php. Si seul deactivate() s'est exécuté (par exemple parce que le plugin a été désactivé mais pas supprimé), la table est intentionnellement conservée jusqu'à la désinstallation.

Documents connexes