Documentatie · Technische documentatie

Databaseschema

Dit document beschrijft de aangepaste databasetabellen die zijn gemaakt door de ADP Car Market Hub-plugin. Alle tabellen worden beheerd met de WordPress-helper dbDelta() en worden gemaakt bij de activering van de plugin. Hun schemaversies worden bijgehouden in wp_options zodat dbDelta kolomwijzigingen veilig kan toepassen bij een upgrade.

Wanneer u dit document moet gebruiken

Lees dit document als u het volgende moet doen:

  • Back-ups, retentie of nalevingswerkzaamheden plannen voor plugingegevens.
  • Aangepaste rapporten bouwen op basis van de tabellen van de plugin.
  • Mislukte schemagerelateerde upgrades of ontbrekende kolommen diagnosticeren.
  • Begrijpen welke tabellen worden verwijderd bij de-installatie en welke niet.

Voor het logische entiteitsmodel dat deze tabellen gebruikt, raadpleegt u het Datamodel.

Overzicht

De plugin maakt vijf aangepaste tabellen aan:

Tabel-achtervoegselDoelSchemaversie-optie
as24_vehiclesVoertuigveldgegevens, ter vervanging van het grootste deel van het wp_postmeta-gebruik.as24ci_vehicles_db_version
as24ci_analyticsAnalytics-gebeurtenissen voor voertuigpagina's en wereldwijde filteracties.as24ci_analytics_db_version
as24ci_search_agentsZoekalert-abonnementen van bezoekers (Smart Stock Alerts).as24ci_search_agent_db_version
as24ci_content_studio_jobsContent Studio-generatietaken (één rij per taak).as24ci_content_studio_db_version
as24ci_content_studio_assetsContent Studio-gegenereerde assets, gekoppeld aan een taak via job_id.as24ci_content_studio_db_version

Echte tabelnamen gebruiken het WordPress-voorvoegsel {$wpdb->prefix} (meestal wp_). De schemaversie van de analytics-tabel wordt opgeslagen in as24ci_analytics_db_version (constante AS24CI\Analytics::DB_VERSION_KEY). De twee Content Studio-tabellen delen één schemaversie-optie (as24ci_content_studio_db_version, huidige waarde 1.3.0) gedefinieerd op AS24CI\Content_Studio_Options::DB_VERSION en beheerd door AS24CI\Content_Studio_Repository::maybe_create_tables().

De plugin is ook afhankelijk van de WordPress-kerntabellen wp_posts, wp_postmeta, wp_term_relationships, wp_term_taxonomy en wp_terms voor de posttypes as24ci_car en as24ci_lead en de 15 voertuigtaxonomieën. Die tabellen volgen het standaard WordPress-schema en worden niet opnieuw gedefinieerd door de plugin.

Alle vijf aangepaste tabellen worden automatisch verwijderd bij de-installatie (zie de sectie Gedrag bij de-installatie hieronder), ongeacht de as24ci_delete_data_on_uninstall-instelling.



Tabel: {$wpdb->prefix}as24_vehicles

Eigenaar: AS24CI\Vehicle_Repository. Aangemaakt via Vehicle_Repository::maybe_create_table() bij activering en opnieuw gecontroleerd bij volgende uitvoeringen. De huidige constante voor de schemaversie is 1.1, opgeslagen in de optie as24ci_vehicles_db_version.

De tabel bevat één rij per voertuig, gekoppeld aan de bijbehorende as24ci_car post via de kolom post_id. De kolom as24_id bevat de AutoScout24 listing-identificatie. Beide kolommen hebben unieke indexen.

Kolommen

KolomTypeOpmerkingen
idbigint(20) unsignedPrimaire sleutel, auto-increment.
post_idbigint(20) unsignedWordPress post-ID voor de gekoppelde as24ci_car. Uniek.
as24_idvarchar(64)AutoScout24 listing-identificatie. Uniek. Standaardwaarde is een lege string.
seller_idvarchar(64)AutoScout24 verkopersidentificatie.
makevarchar(100)
modelvarchar(100)
version_full_namevarchar(255)Volledige uitvoering/versie-label zoals geleverd door de API.
condition_typevarchar(50)Bijv. new, used, demo (waarden spiegelen de bron-API).
body_typevarchar(50)
fuel_typevarchar(50)
transmission_typevarchar(50)
drive_typevarchar(50)
color_exteriorvarchar(100)
color_interiorvarchar(100)
doorstinyint(3) unsignedStandaardwaarde is 0.
seatstinyint(3) unsignedStandaardwaarde is 0.
mileageint(10) unsignedStandaardwaarde is 0.
cubic_capacityint(10) unsignedMotorinhoud.
range_kmint(10) unsignedElektrische actieradius in kilometers.
first_registrationdateNullable.
first_reg_yearsmallint(5) unsignedJaarcomponent van first_registration. Standaardwaarde is 0.
power_kwsmallint(5) unsigned
power_hpsmallint(5) unsigned
co2_emissionsmallint(5) unsignedg/km.
pricedecimal(10,2)Verkoopprijs.
list_pricedecimal(10,2)Catalogusprijs/consumentenadviesprijs (indien geleverd).
currencychar(3)ISO 4217-code; standaardwaarde is EUR.
emission_standardvarchar(20)Bijv. Euro 6.
energy_labelchar(5)A-G energielabel.
battery_capacitydecimal(6,2)kWh.
vinvarchar(20)Voertuigidentificatienummer (chassisnummer).
statusvarchar(30)Status van de listing zoals geleverd door de API.
is_livetinyint(1)1 als de listing momenteel live is, anders 0.
had_accidenttinyint(1)
equipment_codeslongtextJSON-array van uitrustingscodes. Nullable.
equipment_standardlongtextJSON-lijst van standaard uitrustingsitems. Nullable.
equipment_optionallongtextJSON-lijst van optionele uitrustingsitems. Nullable.
imageslongtextJSON-lijst van afbeelding-URLs zoals geleverd door de API.
raw_datalongtextVolledige bron-payload bewaard voor diagnostische doeleinden.
manual_overrideslongtextJSON-object van door de beheerder bewerkte velden die geïmporteerde waarden overschrijven.
content_hashvarchar(64)Hash die wordt gebruikt om herimport van ongewijzigde listings over te slaan.
imported_atdatetimeStandaardwaarde is CURRENT_TIMESTAMP.
updated_atdatetimeStandaardwaarde is CURRENT_TIMESTAMP. Zie de onderstaande implementatie-opmerking.

Implementatie-opmerking: updated_at is aangemaakt met alleen DEFAULT CURRENT_TIMESTAMP binnen de dbDelta SQL, omdat het direct toevoegen van ON UPDATE CURRENT_TIMESTAMP ervoor zorgt dat dbDelta bij elke plugin-laadactie opnieuw een ALTER uitvoert. De semantiek van ON UPDATE wordt toegepast via een eenmalige ALTER nadat dbDelta is uitgevoerd.

Indexen

IndexTypeKolommenDoel
PRIMARYPrimaryidSurrogaat primaire sleutel.
uk_as24_idUniqueas24_idEén rij per AutoScout24 listing.
uk_post_idUniquepost_idEén rij per WordPress voertuigpost.
idx_make_modelIndexmake, modelStuurt de merk/model archieffilters aan.
idx_priceIndexpricePrijs sortering/bereik filtering.
idx_mileageIndexmileageKilometerstand sortering/bereik filtering.
idx_first_reg_yearIndexfirst_reg_yearBouwjaar sortering/bereik filtering.
idx_fuel_conditionIndexfuel_type, condition_typeVeelvoorkomend gecombineerd filter.
idx_status_liveIndexstatus, is_liveLive-listing zoekopdrachten.
idx_content_hashIndexcontent_hashZoekacties tijdens wijzigingsdetectie.

Veiligheidsnet voor manual_overrides

Nadat dbDelta is uitgevoerd, voert de repository een SHOW COLUMNS ... LIKE 'manual_overrides' controle uit en voert, als de kolom ontbreekt, een expliciete ALTER TABLE ... ADD COLUMN manual_overrides longtext DEFAULT NULL AFTER raw_data uit. Dit compenseert voor incidentele problemen met kolomdetectie in sommige MySQL/MariaDB-combinaties en zorgt ervoor dat de handmatige overschrijvingslaag altijd een plek heeft om gegevens op te slaan.

Tabel: {$wpdb->prefix}as24ci_analytics

Eigenaar: AS24CI\Analytics. Aangemaakt via Analytics::maybe_create_table() tijdens activering en opnieuw gecontroleerd bij elke laadactie van een beheerpagina (de methode is ook gekoppeld aan admin_init zodat bestaande installaties nieuwe kolommen oppikken zonder een handmatige heractivering).

Kolommen

KolomTypeOpmerkingen
idbigint(20) unsignedPrimaire sleutel, auto-increment.
post_idbigint(20) unsignedVoertuig post-ID. 0 voor globale gebeurtenissen zoals filterzoekopdrachten.
event_typevarchar(20)Gebeurtenis-identificatie; standaardwaarde is view. Gevalideerd tegen ALLOWED_EVENTS.
extra_datalongtextOptionele JSON-gecodeerde payload. Nullable.
created_atdatetimeStandaardwaarde is CURRENT_TIMESTAMP.

Indexen

IndexTypeKolommen
PRIMARYPrimaryid
post_event_dateIndexpost_id, event_type, created_at
event_typeIndexevent_type, created_at
created_atIndexcreated_at

Bewaartermijn

Toevoegingen vinden alleen plaats wanneer Options::ANALYTICS_ENABLED op 1 staat. Een dagelijkse schoonmaaktaak (retention job) wordt uitgevoerd via de as24ci_daily_cleanup cron-hook (ingepland bij activering, verwijderd bij deactivering). De bewaartermijn wordt geconfigureerd via het tabblad voor analytics-beheer.


Tabel: {$wpdb->prefix}as24ci_search_agents

Eigenaar: AS24CI\Search_Agent. Aangemaakt via Search_Agent::maybe_create_table() op init (prioriteit 1) zodat deze beschikbaar is voor zowel admin- als frontend AJAX-handlers. De huidige schemaversie is 1.1, opgeslagen in de as24ci_search_agent_db_version-optie. Aanmaak wordt gereguleerd door de Options::FEATURE_SEARCH_AGENT-schakelaar, maar het schema wordt onvoorwaardelijk geregistreerd wanneer de feature-klasse wordt geladen.

Kolommen

KolomTypeOpmerkingen
idBIGINT UNSIGNEDPrimaire sleutel, auto-increment.
nameVARCHAR(255)Weergavenaam bezoeker; standaard een lege string.
emailVARCHAR(255)E-mailadres bezoeker.
criteriaTEXTOpgeslagen zoekcriteria (geserialiseerde weergave).
tokenVARCHAR(64)Token voor bevestigings- en afmeldlinks.
frequencyVARCHAR(20)Meldingsfrequentie; standaard daily.
statusVARCHAR(20)Een van pending, active, inactive, paused. Standaard pending.
created_atDATETIMEStandaard CURRENT_TIMESTAMP.
confirmed_atDATETIMENullable; ingesteld wanneer de bezoeker bevestigt via Double-Opt-In.

Indexen

IndexTypeKolommen
PRIMARYPrimaryid
idx_statusIndexstatus
idx_tokenIndextoken

Privacy

Omdat de tabel persoonlijke gegevens bevat (naam, e-mail, zoekvoorkeuren), wordt deze verwijderd tijdens het deïnstalleren, ongeacht de as24ci_delete_data_on_uninstall-instelling. Sitebeheerders zijn verantwoordelijk voor aanvullende bewaar- of exporttools die vereist zijn door lokale privacywetgeving.

Tabel: {$wpdb->prefix}as24ci_content_studio_jobs

Eigenaar: AS24CI\Content_Studio_Repository. Aangemaakt via Content_Studio_Repository::maybe_create_tables() (geregistreerd als eigen activatie-hook in het hoofdpluginbestand en ook lazy aangeroepen door de meeste repository-methoden). Bevat één rij per Content Studio-generatietaak. Statuswaarden zijn draft, queued, processing, ready en failed.

Kolommen

KolomTypeOpmerkingen
idbigint(20) unsignedPrimaire sleutel, auto-increment.
vehicle_post_idbigint(20) unsignedBronvoertuig-post. Standaard 0.
vehicle_snapshot_hashvarchar(64)Hash van de voertuig-snapshot gebruikt voor de taak.
content_typevarchar(40)Aangevraagd inhoudstype.
platform_presetvarchar(40)Doelplatform-preset.
output_formatvarchar(20)Uitvoerformaat.
preset_keyvarchar(80)Preset-catalogussleutel.
statusvarchar(20)Standaard draft.
prompt_payloadlongtextJSON-prompt payload. Nullable.
providervarchar(40)Standaard google.
modelvarchar(80)Provider-model.
languagevarchar(20)Uitvoertaal.
tonevarchar(40)Tone of voice.
attemptssmallint(5) unsignedVerwerkingspogingen. Standaard 0.
last_errortextLaatste foutmelding. Nullable.
created_bybigint(20) unsignedWordPress gebruikers-ID. Standaard 0.
created_atdatetimeStandaard CURRENT_TIMESTAMP.
updated_atdatetimeStandaard CURRENT_TIMESTAMP.
started_atdatetimeNullable.
completed_atdatetimeNullable.

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

Tabel: {$wpdb->prefix}as24ci_content_studio_assets

Eigenaar: AS24CI\Content_Studio_Repository. Bevat de gegenereerde assets (tekst, afbeeldingen, tekstpakketten) die bij een taak horen, gekoppeld via job_id.

Kolommen

KolomTypeOpmerkingen
idbigint(20) unsignedPrimaire sleutel, auto-increment.
job_idbigint(20) unsignedBovenliggende taak. Standaard 0.
vehicle_post_idbigint(20) unsignedBronvoertuig-post. Standaard 0.
asset_typevarchar(40)Asset-type.
file_pathtextLokaal bestandspad. Nullable.
file_urltextOpenbare URL. Nullable.
mime_typevarchar(120)MIME-type.
file_sizebigint(20) unsignedBytes. Standaard 0.
widthint(10) unsignedAfbeeldingsbreedte. Standaard 0.
heightint(10) unsignedAfbeeldingshoogte. Standaard 0.
duration_secondsdecimal(8,2)Media-duur. Standaard 0.00.
captionlongtextNullable.
hashtagslongtextNullable.
alt_texttextNullable.
thumbnail_pathtextNullable.
payload_jsonlongtextGestructureerde payload (bijv. tekstpakketten). Nullable.
scheduled_atdatetimeNullable.
schedule_statusvarchar(32)Standaard unscheduled.
created_atdatetimeStandaard CURRENT_TIMESTAMP.

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

WordPress-kerntabellen gebruikt door de plugin

De plugin wijzigt het schema van de WordPress-kerntabellen niet. Hij is er als volgt van afhankelijk:

  • wp_posts — slaat as24ci_car (voertuigen) en as24ci_lead (leads) posts op.
  • wp_postmeta — slaat backwards-compatibility postmeta op voor voertuig-posts (_as24ci_listing_id, _as24ci_content_hash, _as24ci_images_hash, _as24ci_image_ids, _as24ci_manual_image_ids) en de lead-status (_as24ci_lead_status).
  • wp_terms, wp_term_taxonomy, wp_term_relationships — slaan de 15 voertuigtaxonomieën op die zijn geregistreerd door AS24CI\Taxonomies.
  • wp_options — slaat alle plugin-instellingen op (sleutels gedefinieerd als constanten op AS24CI\Options) plus de schemaversie-markers en de ID's van de pagina's die bij activatie zijn aangemaakt.
  • wp_users en wp_usermeta — indirect gebruikt via WordPress capabilities; geen plugin-specifieke schrijfacties.

De aangepaste rollen en capabilities die door de plugin zijn aangemaakt (as24ci_editor, de as24ci_car/as24ci_cars capability-set en manage_as24_imports) worden opgeslagen via de standaard WordPress rollenoptie (wp_user_roles).

Deïnstallatiegedrag

Het uninstall.php-script voert altijd DROP TABLE IF EXISTS uit voor de vijf aangepaste tabellen en verwijdert de bijbehorende schemaversie-opties:

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

Op multisite-installaties schakelt het script over naar elke site en herhaalt het opschonen. Posts, bijlagen en pagina's die bij activatie zijn aangemaakt worden alleen verwijderd wanneer de beheerder as24ci_delete_data_on_uninstall heeft ingesteld op 1.

Operationele opmerkingen

  • Schema-upgrades zijn idempotent. Elke eigenaarklasse controleert haar schemaversie-optie en sluit snel af wanneer de tabel al overeenkomt met de verwachte versie. De voertuigen-repository controleert bovendien of de tabel fysiek bestaat alvorens snel af te sluiten.
  • Directe wpdb-query's op deze tabellen bestaan in de repository-, analytics-, search-agent- en deïnstallatie-codepaden. Ze zijn beveiligd met PHPCS-ignore-opmerkingen waar van toepassing. Aangepaste code die de repository omzeilt, moet het schema behandelen als onderdeel van het interne contract van de plugin en voorbereid zijn op kolomwijzigingen tussen releases.
  • De kolommen raw_data, equipment_* en images bevatten geserialiseerde gegevens. Behandel ze als ondoorzichtige blobs en benader ze via de repository-helpers wanneer mogelijk.
  • De kolom manual_overrides is de enige plek die door de beheerder gestuurde en door de importeur gestuurde status combineert. Vermijd het rechtstreeks schrijven hiernaar zonder de override-laag te gebruiken.

Probleemoplossing

  • maybe_create_table() heeft de voertuigantabel niet aangemaakt. Controleer of dbDelta() geen fouten heeft gerapporteerd. De repository schrijft fouten naar error_log() omdat deze wordt uitgevoerd voordat de plugin Logger beschikbaar is. Het opnieuw uitvoeren van de activatie (deactiveren, activeren) voert maybe_create_table() opnieuw uit.
  • Een nieuwe kolom ontbreekt na een plugin-upgrade. Controleer de schemaversie-optie voor de betreffende tabel. Als deze gelijk is aan de huidige waarde maar de kolom ontbreekt, verwijder dan de optie om te dwingen dat dbDelta opnieuw wordt uitgevoerd bij de volgende laadbeurt van een admin-pagina. De voertuigentabel heeft een expliciet manual_overrides-vangnet voor dit geval.
  • De analytics-tabel groeit snel. Verklein het bewaarvenster of schakel analytics uit via Options::ANALYTICS_ENABLED. De dagelijkse opschoontaak is vereist om de tabel binnen de grenzen te houden.
  • Search-agent-rijen blijven bestaan na deïnstallatie. Controleer of WordPress uninstall.php heeft uitgevoerd. Als alleen deactivate() is uitgevoerd (bijvoorbeeld omdat de plugin is gedeactiveerd maar niet verwijderd), wordt de tabel opzettelijk behouden tot de deïnstallatie.

Gerelateerde documenten