Ik zit met een databasemigratie waarbij ik op zoek ben naar een goeie manier om data van het oude schema naar het nieuwe te krijgen, met name omdat de indeling in het nieuwe schema niet hetzefde is als de oude.
Hier een pseudo tabel 'Cursussen' zoals die in het oude scheme voor kan komen:
En hier twee pseudo tabellen 'Cursussen' en 'Vertalingen' zoals die in het nieuwe schema voor kunnen komen:
Ja, deze manier van vertalingen managen is superslecht... maar het is ff ter illustratie.
Anyway, nu is mijn issue dus dat ik me afvraag hoe ik dergelijke migraties het beste aan kan pakken. Als het een kleinschalig database modelletje is dan zou je bijvoorbeeld een PHP script kunnen laten draaien wat in de kern het volgende doet:
Dit gaat natuurlijk performancewijs nogal extreem problematisch worden wanneer je tabellen wat complexer worden, laat staan wanneer je het moet herhalen voor tientallen andere use cases met tabellen die in sommige gevallen miljoenen records bevatten.
Mijn vraag is dus: Hoe kan ik dit zo efficient mogelijk aanpakken?
Ik heb dus niet te maken met simpelweg 1:1 overzetten van data, d'r moet dus data naar verschillende tabellen verplaatst worden wat dan weer gekoppeld moet worden aan elkaar. Ook zullen er soms datatypes omgezet moeten worden, bijv van float/decimal naar integer.
Ben ik nu 'gedoemd' tot een custom conversiescript in iets als PHP (of wat werkt er beter voor zoiets?) of kan ik het ook in SQL zelf oplossen?
Hier een pseudo tabel 'Cursussen' zoals die in het oude scheme voor kan komen:
code:
1
2
3
| | id | title | start_date | price | | 1 | Some course title 1 | 2019-10-09 | 100.00 | | 2 | Some course title 2 | 2019-10-09 | 100.00 | |
En hier twee pseudo tabellen 'Cursussen' en 'Vertalingen' zoals die in het nieuwe schema voor kunnen komen:
code:
1
2
3
4
5
6
7
| | id | title_tid | start_date | price | | 1 | 1 | 2019-10-09 | 10000 | | 2 | 2 | 2019-10-09 | 10000 | | id | content_en | content_nl | | 1 | Some course title 1 | null | | 2 | Some course title 2 | null | |
Ja, deze manier van vertalingen managen is superslecht... maar het is ff ter illustratie.
Anyway, nu is mijn issue dus dat ik me afvraag hoe ik dergelijke migraties het beste aan kan pakken. Als het een kleinschalig database modelletje is dan zou je bijvoorbeeld een PHP script kunnen laten draaien wat in de kern het volgende doet:
code:
1
2
3
4
5
6
7
| #1 Haal alle cursussen op uit het oude schema foreach($courses as $course) { #2 Maak een vertaling aan en sla daarin de cursustitel op #3 Haal het ID van die vertaling op #4 Maak een nieuw cursusrecord aan en gebruik hierbij de vertaling ID als title_tid in het nieuwe schema #5 Sla het record in het nieuwe schema op } |
Dit gaat natuurlijk performancewijs nogal extreem problematisch worden wanneer je tabellen wat complexer worden, laat staan wanneer je het moet herhalen voor tientallen andere use cases met tabellen die in sommige gevallen miljoenen records bevatten.
Mijn vraag is dus: Hoe kan ik dit zo efficient mogelijk aanpakken?
Ik heb dus niet te maken met simpelweg 1:1 overzetten van data, d'r moet dus data naar verschillende tabellen verplaatst worden wat dan weer gekoppeld moet worden aan elkaar. Ook zullen er soms datatypes omgezet moeten worden, bijv van float/decimal naar integer.
Ben ik nu 'gedoemd' tot een custom conversiescript in iets als PHP (of wat werkt er beter voor zoiets?) of kan ik het ook in SQL zelf oplossen?
Bevalt mijn schrijfsel je niet? www.korrelatie.nl