0%

Wanneer een bestand niet meer genoeg is

Wanneer de catalogus zichzelf tegenspreekt

Stel dat Riley een accuboormachine leent. Het uitleenprogramma voegt een rij toe aan zijn CSV-bestand en kopieert de naam en het e-mailadres van Riley naar die rij.

Een paar weken later verandert Riley het e-mailadres. Wanneer Riley een projector leent, krijgt de nieuwe uitlening het nieuwe adres. Bij de oude uitlening staat nog het oude adres.

Het bestand bevat nu dit:

loan_iditem_namemember_idmember_namemember_email
401Cordless drillM-17Riley Chenriley.old@example.com
402ProjectorM-17Riley Chenriley.new@example.com

Stel dat je Riley een herinnering moet sturen. Welk adres moet het programma gebruiken?

Het probleem zit tussen de rijen

Binnen elke afzonderlijke rij is niets duidelijk mis. Beide uitleennummers zijn aanwezig, elke cel heeft een waarde en beide e-mailadressen zien er geldig uit. Een controle die één rij tegelijk bekijkt, zou ze allebei kunnen accepteren.

De tegenspraak wordt pas zichtbaar wanneer je de rijen samen bekijkt. M-17 verwijst twee keer naar hetzelfde lid, maar de twee kopieën van het e-mailadres verschillen.

CSV heeft precies opgeslagen wat het programma aanleverde. Het probleem is dat één gegeven over Riley naar elke uitlening werd gekopieerd. Het wijzigen van één kopie veranderde de andere kopieën niet.

Hetzelfde kan met een voorwerp gebeuren. Als de naam naar elke eerdere uitlening wordt gekopieerd, moet je bij een naamswijziging elke kopie terugvinden en hopen dat je er geen mist.

Waarom kunnen beide rijen over Riley geldig lijken, terwijl de catalogus toch onbetrouwbaar is?

Geef elk gegeven één vaste plek

Wat als de huidige gegevens van Riley één keer werden opgeslagen, bij lid-ID M-17? Een uitlening kan dan naar dat lid verwijzen in plaats van opnieuw de naam en het e-mailadres te kopiëren. Ook gegevens over voorwerpen kunnen een eigen plek krijgen.

Voor dit soort werk is een relationele database gemaakt. Die kan leden, voorwerpen en uitleningen apart bewaren en toch de onderlinge verbanden behouden.

Dat maakt CSV geen slecht formaat. Een CSV-bestand blijft een goede keuze voor een momentopname, een export of een lijst die één programma van boven naar beneden leest. Het uitleenproject heeft iets anders nodig, omdat leden, voorwerpen en uitleningen afzonderlijk kunnen veranderen, maar wel met elkaar moeten blijven kloppen.

Je hebt de reden gevonden om een ander hulpmiddel te gebruiken: het probleem is niet langer één verkeerd ingevulde cel, maar meerdere gegevens die met elkaar verbonden moeten blijven. De database die we gaan gebruiken is SQLite. Misschien draag je al honderden SQLite-databases bij je zonder dat je het weet.