Google+ Followers

woensdag 24 oktober 2012

De kip, het ei en de forkeign-key constriant.

Dit is min of meer onder het motto "weet u het nog?".

Tabellen die zichzelf refereren via een FK kunnen in de loop der tijd in een kip-en-ei situatie komen, een eerder gemaakt record kan verwijzen naar een later gemaakt record. Gevolg: bij het restoren of kopieren van de data zal de database klagen dat het id waarnaar wordt verwezen niet bestaat. Logisch, want dat record komt pas later. Sorteren heeft in deze situaties geen zin want er is geen volgorde te bedenken waarin en record tegelijk nu en pas later wordt gemaakt.

De oplossing is een "ohja" momentje; je kunt tijdelijk de FK constraints uitzetten. Sommige databases kunnen dat met een SET commando, anderen kunnen FK's disablen met een ALTER statement.

Vlak voor het importeren zet je de FK's van de tabel uit, en er vlak na weer aan.

zondag 7 oktober 2012

Ontbrekende datums aanvullen.

Het aloude probleem van  het spoofen van records die er niet zijn.

In PostgreSQL kan dat met generate_series()

SELECT '2012-01-01'::date + (i * INTERVAL '1 day')
FROM GENERATE_SERIES(1,5) AS i;

Dat genereert vijf records beginnend op 2012-01-01.


In MySQL kan hetzelfde met een hulptabel die gewoon een serie getallen bevat;

CREATE TABLE help_numbers (i integer);
INSERT INTO help_numbers (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);

..en dat dan tot zoveel nummers als je nodig denkt te gaan hebben, zo'n tabel kost niets dus schroom niet om er een paar duizend nummers in te zetten.

Dan kun je praktisch hetzelfde geintje uithalen als in PostgreSQL:

SELECT '2012-01-01' + INTERVAL i DAY
FROM help_numbers WHERE i<5;