in SQL is het concept foreign keys een belangrijk concept dat kan worden gevonden in alle professionele databases die in de industrie worden gebruikt. Het kernidee is om te voorkomen dat uw PostgreSQL database inconsistente gegevens opslaat door beperkingen op te leggen die de juistheid van uw tabellen garanderen (ten minste voor zover het relaties tussen objecten betreft). Referentiële integriteit is daarom een van de belangrijkste concepten ooit uitgevonden in het.

buitenlandse sleutels zullen echter enkele problemen introduceren die u moet oplossen bij het schrijven van applicaties. Als er geen buitenlandse sleutels zijn, kunt u gegevens in elke tabel in elke volgorde invoegen. PostgreSQL geeft er niet om. Echter, als een buitenlandse sleutel is op zijn plaats, orde begint te tellen (ten minste in een typisch scenario, maar meer daarover later).

buitenlandse sleutels en volgorde

om het belang van orde aan te tonen, moeten we eerst een gegevensmodel maken:

we willen valuta ‘ s, producten en productbeschrijvingen opslaan. In principe is het een zeer eenvoudig datamodel. Laten we eens kijken of we toevallig in de producttabel invoegen:

logischerwijs zal de eerste invoeging mislukken omdat valutanummer 1 nog niet bestaat. Als we willen invoegen, moeten we een NULL waarde gebruiken (= Onbekende valuta). In volgorde woorden: we moeten eerst de valutatabel vullen, vervolgens locaties invoegen, enzovoort. De volgorde doet er wel toe in het standaard geval.

het bepalen van de juiste invoegvolgorde voor buitenlandse sleutels

Als u een bestaand gegevensmodel moet gebruiken, kan het een beetje moeilijk zijn om dit te begrijpen. Het invullen van een leeg gegevensmodel kan een beetje lastig zijn. Dus waarom schrijf je geen query die ons vertelt in welke volgorde we gegevens moeten invoegen?

wel, hier is die magische query …

de query is niet triviaal om te lezen, maar ik heb mijn best gedaan om het een beetje te documenteren. In principe hebben de systeemtabellen van PostgreSQL alle informatie die we nodig hebben om de juiste volgorde te bepalen. Hier is de output:

 table_name | level-----------------+------- t_currency | 1 t_location | 1 t_product | 2 t_product_desc | 3 t_product_stock | 3(5 rows)

zoals u kunt zien, heeft de query ons de tabellen in de gewenste volgorde gegeven. Ten eerste moeten we in alle tabellen op niveau één en ga zo maar door invoegen. Als we ons houden aan deze volgorde, zal de referentiële integriteit altijd worden gewaarborgd (ervan uitgaande dat de gegevens correct zijn).

door gebruik te maken van” aanvankelijk uitgestelde ” beperkingen

in sommige gevallen kan de invoegopdracht een vervelende zaak zijn om mee om te gaan. Wat als we de middelen hadden om PostgreSQL te vertellen om de order te negeren en de integriteit op commit te controleren? Dit is precies wat “aanvankelijk uitgesteld” doet. Dit is hoe het werkt:

In dit geval kunnen we gegevens in elke gewenste volgorde wijzigen. Zolang de integriteit gegarandeerd intact is aan het einde van de transactie, is PostgreSQL prima in orde. PostgreSQL zal de beperking controle uit te stellen en nemen wat last van de ontwikkelaar.

tot slot …

Als u meer wilt weten over geavanceerde SQL, wilt u misschien een kijkje nemen op mijn blog over een aantal meer geavanceerde vensterfuncties (met ties). Dus trek je Das aan en Lees voor meer informatie.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.