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-achtervoegsel | Doel | Schemaversie-optie |
|---|---|---|
as24_vehicles | Voertuigveldgegevens, ter vervanging van het grootste deel van het wp_postmeta-gebruik. | as24ci_vehicles_db_version |
as24ci_analytics | Analytics-gebeurtenissen voor voertuigpagina's en wereldwijde filteracties. | as24ci_analytics_db_version |
as24ci_search_agents | Zoekalert-abonnementen van bezoekers (Smart Stock Alerts). | as24ci_search_agent_db_version |
as24ci_content_studio_jobs | Content Studio-generatietaken (één rij per taak). | as24ci_content_studio_db_version |
as24ci_content_studio_assets | Content 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
| Kolom | Type | Opmerkingen |
|---|---|---|
id | bigint(20) unsigned | Primaire sleutel, auto-increment. |
post_id | bigint(20) unsigned | WordPress post-ID voor de gekoppelde as24ci_car. Uniek. |
as24_id | varchar(64) | AutoScout24 listing-identificatie. Uniek. Standaardwaarde is een lege string. |
seller_id | varchar(64) | AutoScout24 verkopersidentificatie. |
make | varchar(100) | |
model | varchar(100) | |
version_full_name | varchar(255) | Volledige uitvoering/versie-label zoals geleverd door de API. |
condition_type | varchar(50) | Bijv. new, used, demo (waarden spiegelen de bron-API). |
body_type | varchar(50) | |
fuel_type | varchar(50) | |
transmission_type | varchar(50) | |
drive_type | varchar(50) | |
color_exterior | varchar(100) | |
color_interior | varchar(100) | |
doors | tinyint(3) unsigned | Standaardwaarde is 0. |
seats | tinyint(3) unsigned | Standaardwaarde is 0. |
mileage | int(10) unsigned | Standaardwaarde is 0. |
cubic_capacity | int(10) unsigned | Motorinhoud. |
range_km | int(10) unsigned | Elektrische actieradius in kilometers. |
first_registration | date | Nullable. |
first_reg_year | smallint(5) unsigned | Jaarcomponent van first_registration. Standaardwaarde is 0. |
power_kw | smallint(5) unsigned | |
power_hp | smallint(5) unsigned | |
co2_emission | smallint(5) unsigned | g/km. |
price | decimal(10,2) | Verkoopprijs. |
list_price | decimal(10,2) | Catalogusprijs/consumentenadviesprijs (indien geleverd). |
currency | char(3) | ISO 4217-code; standaardwaarde is EUR. |
emission_standard | varchar(20) | Bijv. Euro 6. |
energy_label | char(5) | A-G energielabel. |
battery_capacity | decimal(6,2) | kWh. |
vin | varchar(20) | Voertuigidentificatienummer (chassisnummer). |
status | varchar(30) | Status van de listing zoals geleverd door de API. |
is_live | tinyint(1) | 1 als de listing momenteel live is, anders 0. |
had_accident | tinyint(1) | |
equipment_codes | longtext | JSON-array van uitrustingscodes. Nullable. |
equipment_standard | longtext | JSON-lijst van standaard uitrustingsitems. Nullable. |
equipment_optional | longtext | JSON-lijst van optionele uitrustingsitems. Nullable. |
images | longtext | JSON-lijst van afbeelding-URLs zoals geleverd door de API. |
raw_data | longtext | Volledige bron-payload bewaard voor diagnostische doeleinden. |
manual_overrides | longtext | JSON-object van door de beheerder bewerkte velden die geïmporteerde waarden overschrijven. |
content_hash | varchar(64) | Hash die wordt gebruikt om herimport van ongewijzigde listings over te slaan. |
imported_at | datetime | Standaardwaarde is CURRENT_TIMESTAMP. |
updated_at | datetime | Standaardwaarde is CURRENT_TIMESTAMP. Zie de onderstaande implementatie-opmerking. |
Implementatie-opmerking:
updated_atis aangemaakt met alleenDEFAULT CURRENT_TIMESTAMPbinnen dedbDeltaSQL, omdat het direct toevoegen vanON UPDATE CURRENT_TIMESTAMPervoor zorgt datdbDeltabij elke plugin-laadactie opnieuw eenALTERuitvoert. De semantiek vanON UPDATEwordt toegepast via een eenmaligeALTERnadatdbDeltais uitgevoerd.
Indexen
| Index | Type | Kolommen | Doel |
|---|---|---|---|
PRIMARY | Primary | id | Surrogaat primaire sleutel. |
uk_as24_id | Unique | as24_id | Eén rij per AutoScout24 listing. |
uk_post_id | Unique | post_id | Eén rij per WordPress voertuigpost. |
idx_make_model | Index | make, model | Stuurt de merk/model archieffilters aan. |
idx_price | Index | price | Prijs sortering/bereik filtering. |
idx_mileage | Index | mileage | Kilometerstand sortering/bereik filtering. |
idx_first_reg_year | Index | first_reg_year | Bouwjaar sortering/bereik filtering. |
idx_fuel_condition | Index | fuel_type, condition_type | Veelvoorkomend gecombineerd filter. |
idx_status_live | Index | status, is_live | Live-listing zoekopdrachten. |
idx_content_hash | Index | content_hash | Zoekacties 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
| Kolom | Type | Opmerkingen |
|---|---|---|
id | bigint(20) unsigned | Primaire sleutel, auto-increment. |
post_id | bigint(20) unsigned | Voertuig post-ID. 0 voor globale gebeurtenissen zoals filterzoekopdrachten. |
event_type | varchar(20) | Gebeurtenis-identificatie; standaardwaarde is view. Gevalideerd tegen ALLOWED_EVENTS. |
extra_data | longtext | Optionele JSON-gecodeerde payload. Nullable. |
created_at | datetime | Standaardwaarde is CURRENT_TIMESTAMP. |
Indexen
| Index | Type | Kolommen |
|---|---|---|
PRIMARY | Primary | id |
post_event_date | Index | post_id, event_type, created_at |
event_type | Index | event_type, created_at |
created_at | Index | created_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
| Kolom | Type | Opmerkingen |
|---|---|---|
id | BIGINT UNSIGNED | Primaire sleutel, auto-increment. |
name | VARCHAR(255) | Weergavenaam bezoeker; standaard een lege string. |
email | VARCHAR(255) | E-mailadres bezoeker. |
criteria | TEXT | Opgeslagen zoekcriteria (geserialiseerde weergave). |
token | VARCHAR(64) | Token voor bevestigings- en afmeldlinks. |
frequency | VARCHAR(20) | Meldingsfrequentie; standaard daily. |
status | VARCHAR(20) | Een van pending, active, inactive, paused. Standaard pending. |
created_at | DATETIME | Standaard CURRENT_TIMESTAMP. |
confirmed_at | DATETIME | Nullable; ingesteld wanneer de bezoeker bevestigt via Double-Opt-In. |
Indexen
| Index | Type | Kolommen |
|---|---|---|
PRIMARY | Primary | id |
idx_status | Index | status |
idx_token | Index | token |
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
| Kolom | Type | Opmerkingen |
|---|---|---|
id | bigint(20) unsigned | Primaire sleutel, auto-increment. |
vehicle_post_id | bigint(20) unsigned | Bronvoertuig-post. Standaard 0. |
vehicle_snapshot_hash | varchar(64) | Hash van de voertuig-snapshot gebruikt voor de taak. |
content_type | varchar(40) | Aangevraagd inhoudstype. |
platform_preset | varchar(40) | Doelplatform-preset. |
output_format | varchar(20) | Uitvoerformaat. |
preset_key | varchar(80) | Preset-catalogussleutel. |
status | varchar(20) | Standaard draft. |
prompt_payload | longtext | JSON-prompt payload. Nullable. |
provider | varchar(40) | Standaard google. |
model | varchar(80) | Provider-model. |
language | varchar(20) | Uitvoertaal. |
tone | varchar(40) | Tone of voice. |
attempts | smallint(5) unsigned | Verwerkingspogingen. Standaard 0. |
last_error | text | Laatste foutmelding. Nullable. |
created_by | bigint(20) unsigned | WordPress gebruikers-ID. Standaard 0. |
created_at | datetime | Standaard CURRENT_TIMESTAMP. |
updated_at | datetime | Standaard CURRENT_TIMESTAMP. |
started_at | datetime | Nullable. |
completed_at | datetime | Nullable. |
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
| Kolom | Type | Opmerkingen |
|---|---|---|
id | bigint(20) unsigned | Primaire sleutel, auto-increment. |
job_id | bigint(20) unsigned | Bovenliggende taak. Standaard 0. |
vehicle_post_id | bigint(20) unsigned | Bronvoertuig-post. Standaard 0. |
asset_type | varchar(40) | Asset-type. |
file_path | text | Lokaal bestandspad. Nullable. |
file_url | text | Openbare URL. Nullable. |
mime_type | varchar(120) | MIME-type. |
file_size | bigint(20) unsigned | Bytes. Standaard 0. |
width | int(10) unsigned | Afbeeldingsbreedte. Standaard 0. |
height | int(10) unsigned | Afbeeldingshoogte. Standaard 0. |
duration_seconds | decimal(8,2) | Media-duur. Standaard 0.00. |
caption | longtext | Nullable. |
hashtags | longtext | Nullable. |
alt_text | text | Nullable. |
thumbnail_path | text | Nullable. |
payload_json | longtext | Gestructureerde payload (bijv. tekstpakketten). Nullable. |
scheduled_at | datetime | Nullable. |
schedule_status | varchar(32) | Standaard unscheduled. |
created_at | datetime | Standaard 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— slaatas24ci_car(voertuigen) enas24ci_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 doorAS24CI\Taxonomies.wp_options— slaat alle plugin-instellingen op (sleutels gedefinieerd als constanten opAS24CI\Options) plus de schemaversie-markers en de ID's van de pagina's die bij activatie zijn aangemaakt.wp_usersenwp_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(enas24ci_vehicles_db_version){$wpdb->prefix}as24ci_analytics{$wpdb->prefix}as24ci_search_agents(enas24ci_search_agent_db_version){$wpdb->prefix}as24ci_content_studio_assets{$wpdb->prefix}as24ci_content_studio_jobs(enas24ci_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_*enimagesbevatten geserialiseerde gegevens. Behandel ze als ondoorzichtige blobs en benader ze via de repository-helpers wanneer mogelijk. - De kolom
manual_overridesis 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 ofdbDelta()geen fouten heeft gerapporteerd. De repository schrijft fouten naarerror_log()omdat deze wordt uitgevoerd voordat de plugin Logger beschikbaar is. Het opnieuw uitvoeren van de activatie (deactiveren, activeren) voertmaybe_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
dbDeltaopnieuw wordt uitgevoerd bij de volgende laadbeurt van een admin-pagina. De voertuigentabel heeft een explicietmanual_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.phpheeft uitgevoerd. Als alleendeactivate()is uitgevoerd (bijvoorbeeld omdat de plugin is gedeactiveerd maar niet verwijderd), wordt de tabel opzettelijk behouden tot de deïnstallatie.