I.
Wprowadzenie do  języków zapytań (1)
  Wstęp
  1. Co to są języki zapytań?
  2. Znaczenie języków zapytań
  3. Zastosowania języków zapytań
  4. Własności języków zapytań
  Podsumowanie
  Zadania
II.
Wprowadzenie do  języków zapytań (2)
III.
Pojęcia obiektowości w bazach danych (1)
IV.
Pojęcia obiektowości w bazach danych (2)
V.
Podstawy semantyczne języków zapytań
VI.
Modele składu obiektów
VII.
Stos środowisk, rezultaty zapytań, funkcja nested
VIII.
Język SBQL (Stack-Based Query Language) (1)
IX.
X.
Dalsze własności SBQL
XI.
Operatory order by i group by
XII.
Przetwarzanie struktur nieregularnych
XIII.
Rozszerzenie języków zapytań o konstrukcje imperatywne
XIV.
Procedury, procedury funkcyjne, metody, reguły zakresu
XV.
Parametry procedur i metod, procedury rekurencyjne, optymalizacja poprzez modyfikację zapytań

 

4. Własności języków zapytań

Uważa się, że języki zapytań powinny mieć następujące własności:

  • Wysoki poziom konceptualizacji i abstrakcji, niezależność danych (data independence), wyrażająca się m.in. w braku odwołań do elementów fizycznej organizacji danych (takich jak np. indeksy, tablice pointerów, organizacja plików itp.). Użytkownik lub programista formułuje zapytanie znając wyłącznie pojęciowy lub logiczny schemat bazy danych.

  • Nieproceduralność lub deklaracyjność, wyrażająca się w zorientowaniu języka na formułowanie bezpośrednio celu wyszukiwania, a nie środków prowadzących do tego celu. W klasycznych językach programowania programista formułuje cel przetwarzania poprzez podanie sekwencji akcji komputera, które mają do tego celu doprowadzić. Języki zapytań odchodzą od tej filozofii - zapytanie formułuje bezpośrednio cel przetwarzania, zaś akcje komputera są wyznaczane automatycznie przez procesor zapytań.

  • Makroskopowość, czyli jednoczesne działanie (z punktu widzenia użytkownika, a nie komputera) na kolekcjach danych o nieograniczonych i nieznanych rozmiarach.

  • Naturalność, czyli wspomaganie naturalnych schematów myślenia użytkownika, wspomaganie modelowania pojęciowego, łatwość nauczania, uczenia się i użycia.

  • Efektywność, czyli akceptowalne czasy wykonania zapytań. Z reguły oznacza to umożliwienie zastosowania automatycznych metod optymalizacyjnych. Dla pewnej skali problemu automatyczna optymalizacja zapytań jest z reguły bardziej skuteczna od manualnego zakodowania tego samego zadania w języku niskiego poziomu. Nawet jeżeli programista dysponuje nieograniczonym czasem, nie jest on w stanie myślowo opanować złożonych zależności semantycznych, które należałoby uwzględnić podczas manualnej optymalizacji.

  • Uniwersalność, czyli zdolność języka zapytań do praktycznie dowolnych operacji wyszukiwania i kojarzenia danych, przy zadanych założeniach dotyczących organizacji struktur danych. Kryteria, które stworzono dla określenia stopnia uniwersalności języków zapytań, są jednak ułomne i oparte na wątłych podstawach formalnych. Tzw. "relacyjna kompletność" (relational completeness) jest przypadkowym, słabo umotywowanym punktem na wielo-wymiarowej skali uniwersalności. Podobnie, totalnie nieadekwatną miarą praktycznej uniwersalności języków zapytań jest moc równoważna maszynie Turinga. Miary uniwersalności języka zapytań, jak większość miar w inżynierii oprogramowania, powinny być oparte na kryteriach empirycznych i pragmatycznych.

  • Niezależność od dziedziny zastosowań, czyli brak przypisania do jednej dziedziny aplikacyjnej, umożliwienie realizacji wszystkich potencjalnych zastosowań danego systemu zarządzania bazą danych.

  • Wykonywanie zapytań w trybie interpretacyjnym, późne (dynamiczne) wiązanie, brak fazy kompilacji i konsolidacji zapytań z całością aplikacji. Umożliwia to zapytania ad hoc, dynamiczne tworzenie i usuwanie perspektyw, zapamiętywanie procedur i reguł w bazie danych, dynamiczne tworzenie i usuwanie indeksów itd.


Do podanych cech możemy dołączyć te, których brak lub niepełna realizacja w istniejących teoriach i językach były bezpośrednim motywem prac nad podejściem stosowym:

  • Koncepcyjna prostota, czysta i precyzyjna semantyka języka zapytań,
  • Minimalizacja zestawu pojęć niezbędnych do opisu semantyki,
  • Uniwersalność podejścia i tworzonych na jego podstawie języków,
  • Kompozycyjność i ortogonalność; minimalizacja konstrukcji gramatyczno-semantycznych tworzonych języków,
  • Jednorodne podejście do wszystkich pojęć modelu obiektowego (złożone obiekty, tożsamość, klasy, dziedziczenie, hermetyzacja, role itd.),
  • Jednorodne podejście do konstrukcji programistycznych bazujących na języku zapytań (perspektywy, procedury, metody, parametry procedur i metod itd.),
  • Modularność definicji języka (możliwość dowolnej hermetyzacji jego konstrukcji),
  • Niezaniedbywanie jakiegokolwiek istotnego problemu semantycznego,
  • Wysoki potencjał dla optymalizacji zapytań.


Podejście stosowe oferuje zuniformizowany sposób myślenia o wszystkich wymienionych wyżej zagadnieniach. Stało się to możliwe dopiero po odrzuceniu teorii, ich pochodnych i rozszerzeń, które miały swoje źródło w koncepcjach modelu relacyjnego, włączając w to algebrę relacji, rachunek relacyjny i różne warianty logiki matematycznej. Zamiast tego, poprawna i uniwersalna semantyka obiektowych języków zapytań została zbudowana poprzez modyfikację powszechnie znanych i dobrze sformalizowanych mechanizmów języków programowania.

Copyrights © 2006 PJWSTK
Materiały zostały opracowane w PJWSTK w projekcie współfinansowanym ze środków EFS.