Tweede Kamer via SQL nu inclusief alle verbanden tussen de gegevens

Het Gegevensmagazijn van de Tweede Kamer is raadpleegbaar met SQL via een nieuwe connector, TweedeKamerV2. Die gebruikt de OData v5-koppeling van de Kamer in plaats van de v2-koppeling. De v2-koppeling vervalt per 1 oktober 2026.

Deze nieuwe driver ontsluit voor het eerst ook de verbanden tussen de gegevens: welke stemming hoort bij welk besluit, welk document bij welk dossier, welke reservering bij welke zaal, etc.

Waarom een nieuwe connector

De Tweede Kamer trekt de koppeling OData/v4/2.0 in op 1 oktober 2026. De bestaande connector TweedeKamerNl leest die koppeling en stopt dan met werken. De nieuwe connector leest de opvolger OData/v5.

Beide connectoren bestaan naast elkaar tot 1 oktober 2026, zodat een bestaande rapportage kan worden omgezet zonder onderbreking.

Wat er verandert: de verbanden

De oude connector bood de tabellen aan, maar niet de verbanden ertussen. Een verwijzing naar een enkel ander record werd uitgeklapt tot kolommen van dat andere record, die vervolgens altijd leeg bleven; een verwijzing naar meerdere records verdween zonder melding. Dit maakte de driver voor veel scenario’s minder waardevol.

De nieuwe connector legt alle 132 verwijzingen die het model kent vast op twee manieren:

  • een verwijzing naar een enkel ander record wordt een gewone kolom met de sleutel erin, bijvoorbeeld Besluit_Id op een stemming. Daarop kan gefilterd en gekoppeld worden;
  • een verwijzing naar meerdere records krijgt een eigen koppeltabel van twee kolommen, bijvoorbeeld ZaalReserveringen tussen zalen en reserveringen.

Voorbeeld: tegenstemmen bij verworpen besluiten

Onderstaande query telt per fractie hoe vaak die tegen stemde bij een besluit dat werd verworpen. Dat vraagt om twee tabellen tegelijk: de soort van het besluit staat op het besluit, de stem op de stemming.

select   stg.fractienaam
,        count(*) as aantal_tegen
from     TweedeKamer..Stemmingen stg
join     TweedeKamer..Besluiten  bst
on       bst.id = stg.besluit_id
and      bst.soort = 'Stemmen - verworpen'
where    stg.soort = 'Tegen'
and      stg.GewijzigdOp >= trunc(sysdateutc) - 14
group
by       stg.fractienaam

Voorbeeld: hoe druk is elke zaal?

Het tweede soort verband, de koppeltabel, verbindt twee tabellen die geen sleutel naar elkaar dragen. Zalen en reserveringen zijn zo’n paar:

select   zal.naam     as zaal
,        count(*)     as aantal_reserveringen
from     TweedeKamer..ZaalReserveringen zrg
join     TweedeKamer..Zalen             zal
on       zal.id = zrg.zaal_id
group
by       zal.naam

Zo leren we dat de Throbeckezaal veel reservering kent, maar de “Oude zaal - Rooksalon” heel weinig.

Overstappen

De tabelnamen zijn grotendeels identiek tussen de tabellen.

Zie ook: