Hvad er QL?

Fuldført

QL er et deklarativt, objektorienteret forespørgselssprog, der er optimeret til at muliggøre effektiv analyse af hierarkiske datastrukturer. databaser, der repræsenterer softwareartefakter.

En database er en organiseret samling af data. Den mest anvendte databasemodel er en relationsmodel, der gemmer data i tabeller. SQL (Structured Query Language) er det mest anvendte forespørgselssprog til relationsdatabaser.

Formålet med et forespørgselssprog er at levere en programmeringsplatform, hvor du kan stille spørgsmål om oplysninger, der er gemt i en database. Et databasestyringssystem administrerer lagring og administration af data og leverer forespørgselsmekanismen. En forespørgsel refererer typisk til de relevante databaseobjekter og angiver forskellige betingelser (kaldet prædikater), der skal opfyldes af resultaterne. Forespørgselsevaluering omfatter kontrol af disse prædikater og generering af resultaterne. Nogle af de ønskede egenskaber for et godt forespørgselssprog og dets implementering omfatter:

  • deklarative specifikationer: En deklarativ specifikation beskriver egenskaber, som resultatet skal opfylde, i stedet for at angive proceduren til beregning af resultatet. I forbindelse med sprog til databaseforespørgsler uddrager deklarative specifikationer detaljerne om det underliggende databasestyringssystem og teknikker til behandling af forespørgsler. Dette forenkler forespørgselsskrivning betydeligt.
  • Expressiveness: Et effektivt forespørgselssprog giver dig mulighed for at skrive komplekse forespørgsler. Dette gør sproget bredt anvendeligt.
  • Effektiv udførelse: Forespørgsler kan være komplekse, og databaser kan være meget store, så det er afgørende for en implementering af et forespørgselssprog, at forespørgsler kan behandles og udføres effektivt.

I dette undermodul får du mere at vide om de grundlæggende funktioner i QL-programmeringssproget, så du kan skrive dine egne brugerdefinerede forespørgsler eller bedre forstå de eksisterende tilgængelige open source-forespørgsler.

QL-syntaksen

QL-syntaksen ligner SQL. Semantikken i QL er dog baseret på Datalog, som er et deklarativt programmeringssprog til logik, der ofte bruges som et forespørgselssprog. Dette gør QL primært til et logisk sprog, og alle handlinger i QL er logiske handlinger. Desuden arver QL rekursive prædikater fra Datalog og tilføjer understøttelse af aggregeringer, hvilket gør selv komplekse forespørgsler præcise og enkle. Overvej f.eks. en database, der indeholder overordnede/underordnede relationer for personer. Hvis du vil finde antallet af underordnede elementer til en person, skal du som regel gøre følgende:

  1. Find en underordnet til den givne person. dvs. et barn eller en underordnet til et barn.
  2. Tæl antallet af underordnede elementer, der blev fundet ved hjælp af det forrige trin.

Når du skriver denne proces i QL, ligner den denne beskrevne struktur. Bemærk, at eksemplet brugte rekursion til at finde alle underordnede for den angivne person og en aggregering til at tælle antallet af underordnede. Det er muligt at oversætte disse trin til den endelige forespørgsel uden at tilføje procedureoplysninger på grund af sprogets deklarative karakter. QL-koden ser nogenlunde sådan ud:

Person getADescendant(Person p) {
  result = p.getAChild() or
  result = getADescendant(p.getAChild())
}

int getNumberOfDescendants(Person p) {
  result = count(getADescendant(p))
}

Objektretning

Objektretning er en vigtig funktion i QL. Fordelene ved objektretning er velkendte. Det øger modulariteten, gør det muligt at skjule oplysninger og tillader genbrug af kode. QL tilbyder alle disse fordele uden at gå på kompromis med det logiske grundlag. Dette opnås ved at definere en simpel objektmodel, hvor klasser modelleres som prædikater og nedarvning som implikation. De biblioteker, der er gjort tilgængelige for alle understøttede sprog, bruger i høj grad klasser og nedarvning.

QL og generelle programmeringssprog

Her er nogle få fremtrædende konceptuelle og funktionelle forskelle mellem generelle programmeringssprog og QL:

  • QL har ingen essentielle funktioner, f.eks. tildelinger til variabler eller filsystemhandlinger.
  • QL fungerer på sæt af tuples, og en forespørgsel kan ses som en kompleks sekvens af sæthandlinger, der definerer resultatet af forespørgslen.
  • QL's set-baserede semantik gør det meget naturligt at behandle samlinger af værdier uden at skulle bekymre sig om effektivt at gemme, indeksere og gennemgå dem.

I objektorienterede programmeringssprog omfatter instantiering af en klasse oprettelse af et objekt ved at tildele fysisk hukommelse til at holde tilstanden for den pågældende forekomst af klassen. I QL er klasser blot logiske egenskaber, der beskriver sæt af allerede eksisterende værdier.