Een schemamigratie is een gecontroleerde, geversioneerde wijziging aan de structuur van een database: een kolom toevoegen, een tabel aanmaken, een veld hernoemen of een relatie aanpassen. In plaats van de database direct aan te passen, schrijf je een klein script dat de wijziging beschrijft, en dat script draait overal op dezelfde manier.

Zie het als een genummerde set verbouwingsinstructies voor een gebouw. Elke migratie is één stap (“voeg een raam toe aan kamer 3”), de stappen worden op volgorde uitgevoerd, en bij elke stap hoort een instructie om hem terug te draaien als dat nodig is. Doordat elke wijziging vastligt en geversioneerd is, blijven je testdatabase en live relationele database gelijk, en past de hele reeks netjes in een CI/CD-pijplijn. Dit is iets anders dan een datamigratie, die de echte records verplaatst in plaats van de structuur te herschikken.

Het lastige is het doen zonder een draaiende app te breken. Een kolom in één stap hernoemen kan de oude code platleggen op het moment dat hij live gaat, dus een veiliger aanpak is: voeg de nieuwe kolom toe, kopieer de data, zet de app over en verwijder de oude kolom pas in een latere migratie. Op een tabel met miljoenen rijen kan zelfs een index toevoegen alles op slot zetten, en daarom tellen timing en volgorde mee.

De echte waarde zit in veiligheid en herhaalbaarheid. Als vijf ontwikkelaars en drie servers allemaal dezelfde databasewijziging nodig hebben, garandeert een migratie dat ze die identiek krijgen, met een duidelijke geschiedenis van wat wanneer veranderde.

Bij TopDevs voeren we elke structuurwijziging aan een database uit als geversioneerde migratie, zodat updates voorspelbaar live gaan en teruggedraaid kunnen worden zodra er iets niet klopt.