Duplicaten in Databases
Uit Yapf
Hoe voorkom je dubbelen
Er zijn grofweg twee methoden, de goede en de foute. De foute is populair maar fout in elk opzicht waarin ik het uit kan drukken.
De juiste methode.
Databases kunnen zelf controleren op dubbele waardes, via een zogenaamde unique-constraint of unique-index. Hiermee kun je aangeven date een kolom, of een combinatie van kolommen, altijd een unieke waarde of combinatie van waardes moet bevatten. Komt er een INSERT of UPDATE query die een dubbele wil maken dan mislukt die query simpelweg.
De foute methode.
De voor de hand liggende maar foute methode is die van het vooraf selecteren of de waarde al bestaat.
Dit is fout om twee redenen,.
- je voert een extra query uit om te bepalen of je een andere query wel of niet moet uitvoeren, da's onzin.
- er zit tijd tussen het moment waarop je het record ophaalt en het moment waarop je de data wel of niet invoert. Ookal is dat meestal een paar milliseconden, dat *IS* tijd genoeg voor een ander proces om dat record in te voeren. Wanneer jij dan dat record alsnog probeert toe te voegen heb je een dubbele. De enige manier om dat te voorkomen is de hele tabel exclusief te locken zodat andere processen niet bij de tabel kunnen zolang jij ermee bezig bent, en dat is iets wat je niet wilt doen in een normale database handeling.