ProgrammatieBackend ontwikkelaar

Leg de verschillen uit tussen datatypes in SQL. Welke valkuilen kunnen er ontstaan bij type-inconsistentie, en hoe beïnvloedt dit de prestaties en de juiste werking van queries? Geef voorbeelden.

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

In SQL zijn er verschillende basisdatatypen — tekenreeksen (bijvoorbeeld VARCHAR, CHAR, TEXT), numeriek (INT, DECIMAL, FLOAT), data en tijd (DATE, TIMESTAMP). Het is cruciaal om het kleinste geschikte type voor specifieke gegevens te kiezen om ruimte te besparen en de indexering te optimaliseren. Een veelgemaakte fout is het kiezen van een type met overmatige lengte (bijvoorbeeld VARCHAR(255) in plaats van VARCHAR(50)), wat kan leiden tot onnodige hulpbronnenverliezen.

Een ander belangrijk verschil zijn de numerieke types: FLOAT slaat benaderde waarden op, terwijl DECIMAL exacte waarden opslaat, wat nuttig is voor financiële transacties. Het vergelijken van strings met verschillende coderingen kan onverwachte resultaten opleveren, als COLLATE niet in acht wordt genomen.

Voorbeeld:

-- Voorbeeld van type-inconsistentie declare @price varchar(10) = '100.99'; select @price + 1; -- Fout: kan geen string en nummer optellen -- Zonder expliciete typeconversie werkt het niet

Valkuilvraag.

Vraag: Wat gebeurt er als je een veld van het type VARCHAR vergelijkt met een nummer? Bijvoorbeeld: WHERE code = 123? Zal de index snel werken?

Antwoord: SQL zal proberen het nummer naar een string te converteren en als strings vergelijken. Echter, als er een numerieke index op dat veld is, zal deze niet gebruikt worden bij een stringvergelijking, en zal de query vertragen. Het wordt altijd aanbevolen om strikte datatypes te gebruiken en expliciete conversie toe te passen indien nodig.

Voorbeeld:

SELECT * FROM products WHERE code = '123'; -- Index kan gebruikt worden SELECT * FROM products WHERE code = 123; -- Index WORDT NIET gebruikt, mogelijk full scan

Geschiedenis

In een webshop werd het veld "prijs" als VARCHAR opgeslagen om verschillende valutaformaten te ondersteunen. Na enkele jaren was het nodig om producten op prijs te sorteren: de sorteringen werkten niet correct en indexering was onmogelijk. Er was een complexe migratie en typeconversie nodig, wat weken duurde.

Geschiedenis

In een van de banken gebruikte een ontwikkelaar het type FLOAT voor het opslaan van bedragen. Bij rapportages ontstonden er verschillen door afrondingen, wat na een jaar leidde tot aanzienlijke fouten in de toewijzing van bonussen.

Geschiedenis

In de logs van een startup werden datum en tijd als tekst (VARCHAR) opgeslagen. Toen het nodig was om intervallen te berekenen, bleek dat de tijd overal in verschillende formaten was, en vereiste de berekening arbeidsintensieve normaliserende parsing, wat een negatieve impact had op de prestaties.