Co to jest QL?

Zakończone

QL to deklaratywny język zapytań zorientowany na obiekt, który jest zoptymalizowany pod kątem wydajnej analizy struktur danych hierarchicznych; w szczególności bazy danych reprezentujące artefakty oprogramowania.

Baza danych to zorganizowana kolekcja danych. Najczęściej używany model bazy danych to model relacyjny, który przechowuje dane w tabelach. SQL (ustrukturyzowany język zapytań) jest najczęściej używanym językiem zapytań dla relacyjnych baz danych.

Celem języka zapytań jest zapewnienie platformy programowania, na której można zadawać pytania dotyczące informacji przechowywanych w bazie danych. System zarządzania bazami danych zarządza magazynem i administrowaniem danymi oraz udostępnia mechanizm wykonywania zapytań. Zapytanie zazwyczaj odwołuje się do odpowiednich jednostek bazy danych i określa różne warunki (nazywane predykatami), które muszą być spełnione przez wyniki. Ocena zapytań obejmuje sprawdzenie tych predykatów i wygenerowanie wyników. Niektóre z pożądanych właściwości dobrego języka zapytań i jego implementacji obejmują:

  • Specyfikacje deklaratywne: specyfikacja deklaratywna opisuje właściwości, które wynik musi spełniać, zamiast dostarczać procedurę obliczania wyniku. W kontekście języków zapytań bazy danych specyfikacje deklaratywne oddzielają szczegóły podstawowego systemu zarządzania bazami danych i technik przetwarzania zapytań. Znacznie upraszcza to pisanie zapytań.
  • Expressiveness: Zaawansowany język zapytań umożliwia pisanie złożonych zapytań. Dzięki temu język jest powszechnie stosowany.
  • Wydajne wykonywanie: zapytania mogą być złożone, a bazy danych mogą być bardzo duże, dlatego ważne jest, aby implementacja języka zapytań przetwarzała i efektywnie wykonywać zapytania.

W tej lekcji dowiesz się więcej o podstawowych funkcjach języka programowania QL, dzięki czemu możesz pisać własne zapytania niestandardowe lub lepiej zrozumieć istniejące zapytania typu open source dostępne.

Składnia języka QL

Składnia języka QL jest podobna do języka SQL. Jednak semantyka języka QL jest oparta na dzienniku danych, deklaratywnego języka programowania logiki, który jest często używany jako język zapytań. Dzięki temu język QL jest przede wszystkim językiem logiki, a wszystkie operacje w języku QL są operacjami logicznymi. Ponadto język QL dziedziczy rekursywne predykaty z usługi Datalog i dodaje obsługę agregacji, dzięki czemu nawet złożone zapytania są zwięzłe i proste. Rozważmy na przykład bazę danych zawierającą relacje nadrzędny-podrzędny dla osób. Jeśli chcesz znaleźć liczbę potomków osoby, zazwyczaj:

  1. Znajdź potomka danej osoby; czyli element podrzędny lub element potomny dziecka.
  2. Zlicz liczbę elementów potomnych znalezionych przy użyciu poprzedniego kroku.

Podczas pisania tego procesu w języku QL dokładnie przypomina to opisaną strukturę. Zwróć uwagę, że w przykładzie użyto rekursji w celu znalezienia wszystkich elementów potomnych danej osoby oraz agregacji w celu zliczenia liczby elementów potomnych. Tłumaczenie tych kroków na końcowe zapytanie bez dodawania żadnych szczegółów proceduralnych jest możliwe ze względu na deklaratywny charakter języka. Kod QL będzie wyglądać mniej więcej tak:

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

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

Orientacja obiektu

Orientacja obiektu jest ważną cechą języka QL. Zalety orientacji obiektu są dobrze znane. Zwiększa modułowość, umożliwia ukrywanie informacji i umożliwia ponowne użycie kodu. QL oferuje wszystkie te korzyści bez naruszania jego logicznej podstawy. Jest to osiągane przez zdefiniowanie prostego modelu obiektów, w którym klasy są modelowane jako predykaty i dziedziczenie jako implikacja. Biblioteki udostępnione dla wszystkich obsługiwanych języków umożliwiają szerokie wykorzystanie klas i dziedziczenia.

Języki programowania QL i ogólnego przeznaczenia

Poniżej przedstawiono kilka znaczących różnic koncepcyjnych i funkcjonalnych między językami programowania ogólnego przeznaczenia a językiem QL:

  • Język QL nie ma żadnych funkcji imperatywnych, takich jak przypisania do zmiennych lub operacji systemu plików.
  • QL działa na zestawach krotek, a zapytanie może być postrzegane jako złożona sekwencja operacji na zbiorach, które definiują wynik zapytania.
  • Semantyka oparta na zestawie QL sprawia, że bardzo naturalne jest przetwarzanie kolekcji wartości bez konieczności wydajnego przechowywania, indeksowania i przechodzenia przez nie.

W językach programowania zorientowanych na obiekty utworzenie wystąpienia klasy polega na utworzeniu obiektu przez przydzielenie pamięci fizycznej do przechowywania stanu tego wystąpienia klasy. W języku QL klasy to tylko właściwości logiczne opisujące zestawy już istniejących wartości.