Een database voor beginners: waar je gegevens wonen
Een database is de plek waar je platform bijhoudt wat mensen doen, geordend in tabellen met rijen en kolommen. Voor een klein platform op je eigen server is SQLite meestal genoeg: een database in één bestand, zonder apart programma dat je moet bijhouden. Maak er elke nacht een nette kopie van met de backup-functie van SQLite, want een gewone kopie tijdens het schrijven kan onbruikbaar zijn.
Een database is de plek waar je platform bijhoudt wat er gebeurt, bijvoorbeeld wie er een afspraak maakte en of die al betaald is. Code kun je opnieuw laten schrijven, maar gegevens die weg zijn, krijg je niet terug. Daarom is de database het deel van je platform waar je het meest van moet snappen, ook als Claude het bouwt. Voor een klein platform op je eigen server is SQLite meestal de beste keuze: een database die in één bestand past. Hieronder lees je hoe zo’n database in elkaar zit en hoe je je gegevens heel houdt.
Tabellen en rijen
Een database bestaat uit tabellen. Elke tabel bevat één soort gegevens en ziet eruit als een lijst met vaste kolommen. Een rij is één geval, bijvoorbeeld één klant.
Een voorbeeld. Lotte is fotograaf. Na een bruiloft mag het bruidspaar online zijn favoriete foto’s aanwijzen, en die bewerkt ze daarna. Haar platform houdt dat bij in onder meer deze twee tabellen:
bruidsparen
id namen mail
1 Eva en Tom eva@voorbeeld.nl
2 Noor en Daan noor@voorbeeld.nl
favorieten
id bruidspaar foto gekozen op
31 1 IMG_0412.jpg 12 juni
32 1 IMG_0590.jpg 12 juni
33 2 IMG_1107.jpg 3 juli
De tabel met favorieten noemt het bruidspaar niet bij naam, maar met het nummer uit de eerste tabel. Dat is de kern van hoe een database werkt: elk gegeven staat op één plek, en de rest verwijst ernaar. Geven Eva en Tom een nieuw mailadres door, dan pas je één rij aan, en klopt het overal.
Om iets uit de database te halen, gebruikt je programma een eigen taal, SQL. Een vraag kan zijn: welke foto’s koos bruidspaar 1? Die vragen schrijft Claude, niet jij. Wat jij wel wilt weten, is welke tabellen er bestaan en wat ze bevatten. Vraag Claude daarom om een overzicht van de tabellen, met bij elke kolom een zin uitleg.
SQLite: één bestand, geen extra programma
Bekende databases als PostgreSQL en MySQL zijn op zichzelf staande programma’s. Ze draaien naast je platform, en ook die moet je installeren en bijhouden. SQLite zit anders in elkaar. Het is een bibliotheek die je programma zelf gebruikt, en de hele database is één bestand, bijvoorbeeld data/fotos.db. Er hoeft geen apart programma te draaien, en je server hoeft voor de database niets open te zetten naar buiten.
Voor de meeste kleine platforms volstaat dat ruimschoots. Op hun pagina over wanneer SQLite past schrijven de makers dat websites tot zo’n honderdduizend verzoeken per dag er doorgaans goed mee uit de voeten kunnen. Ze noemen dat getal zelf een voorzichtige schatting, geen bovengrens. Een fotograaf met een paar honderd bruidsparen per jaar komt daar bij lange na niet aan. Een prettig bijeffect van één bestand: het werkt op elke computer. Een kopie die je naar je laptop haalt, kun je daar gewoon openen met een gratis programma voor SQLite, als je wilt zien wat erin staat.
Komt Claude toch met een aparte databaseserver, vraag dan wat de reden is. Een platform dat op meerdere servers tegelijk draait, heeft er bijvoorbeeld wel baat bij. Zonder zo’n reden is het vooral een extra programma om te onderhouden.
Een back-up die je kunt terugzetten
Juist bij een database gaat een gewone kopie weleens mis. De makers van SQLite beschrijven het op hun pagina over beschadigde databases: wie het bestand kopieert terwijl het platform er net iets in wegschrijft, kan een kopie krijgen die half oud en half nieuw is, en daarmee onbruikbaar. Een nachtelijke back-up van je hele server neemt het bestand mee in de toestand van dat moment, wat die ook is. Daar loop je dat risico dus ook.
Er zijn veilige manieren om een kopie te maken terwijl je platform gewoon doordraait. SQLite heeft er een eigen backup-functie voor, en het commando VACUUM INTO doet iets vergelijkbaars. Laat Claude een nachtelijke taak maken die op die manier een kopie in een aparte map zet, ruim voordat de back-up van je server draait. Dan neemt die back-up de nette kopie vanzelf mee. Laat oude kopieën automatisch opruimen, en houd zowel de database als de kopieën buiten git; waarom, lees je in Terugdraaien met git.
Een back-up is pas iets waard als hij ook ergens anders staat en als je weet dat hij werkt. Haal daarom geregeld een kopie naar een andere plek, zoals je laptop. Gaat je server verloren, dan zijn de kopieën die erop stonden namelijk ook weg. Behandel die kopie zorgvuldig, want er staan gegevens van klanten in. Probeer ook eens een kopie terug te zetten in een aparte testomgeving, los van de echte database, en kijk of alles erin staat. Pas dan weet je dat het werkt. Meer over back-ups van je hele server lees je in Back-ups van je eigen server.
Niet zelf in de echte database sleutelen
Soms wil je snel iets rechtzetten, zoals een verkeerd gespeld mailadres. Doe dat niet met een losse opdracht in de database waar je platform op draait. Vergeet je in zo’n opdracht te zeggen om welke rij het gaat, dan verandert hij alle rijen tegelijk, en terugdraaien kan niet. Je omzeilt daarmee ook de controles die je platform zelf uitvoert, zoals dat een foto maar één keer als favoriet telt.
Komt iets vaker voor, laat Claude er dan een knop of formulier voor maken in je beheerscherm. Gaat het om iets eenmaligs, werk dan met een script dat Claude schrijft en dat je eerst loslaat op een verse kopie. Pas als het daar goed gaat, draai je het op de echte database. Verandert de opbouw van een tabel, bijvoorbeeld omdat er een kolom bij moet, laat Claude dat dan vastleggen als migratie: een script met een volgnummer waarin precies staat wat er aan de tabellen verandert. Zo gaat de wijziging op je server op dezelfde manier als bij het testen.
Je database en Claude
Voor Claude Code is je database gewoon een bestand in je projectmap. Zoekt Claude een fout, dan kan hij er ook in kijken, bijvoorbeeld met een commando dat de tabellen uitleest. Wat hij daar ziet, gaat mee naar de servers van Anthropic. Bouw daarom met een testdatabase waarin alleen verzonnen mensen staan, en leg in je CLAUDE.md vast dat de echte database verboden terrein is. Regel het liefst ook op je server dat alleen het platform zelf erbij kan, en niet je eigen account, waaronder Claude werkt. Welke gegevens je verder beter niet aan AI geeft, lees je in Persoonsgegevens en AI op het werk.
Bouw je een platform, vraag Claude dan om twee dingen: een overzicht van je tabellen in gewone taal, en een nachtelijke kopie met de backup-functie van SQLite. Zet daarna met Claude één kopie terug in een testomgeving. Lukt dat, dan ben je beschermd tegen de gewone ongelukken. Wat een platform verder nodig heeft, staat in Zelf een app of platform bouwen zonder programmeerervaring.
Foto bovenaan: Tima Miroshnichenko via Pexels