Reklama
Dzisiaj jest 10 stycznia 2025 r.
Chcę dodać własny artykuł
Reklama
Reklama
Reklama

Object Query Language

Object Query Language (OQL)

Object Query Language (OQL) to obiektowy język zapytań zgodny ze standardem Object Data Management Group (ODMG). Jego składnia jest wzorowana na SQL, jednak wprowadza istotne różnice w semantyce oraz kontrolach typów, co czyni go bardziej restrykcyjnym niż SQL. OQL wprowadza nowe operatory, takie jak zależne złączenie, oraz umożliwia konstruowanie złożonych wyników. Mimo że OQL jest bardziej zaawansowany w zakresie wyszukiwania niż SQL, to jednak obie te technologie różnią się znacznie pod względem modelu danych i semantyki.

Reklama

Wady OQL

OQL ma kilka istotnych wad, które ograniczają jego zastosowanie:

  • Luźna integracja z interfejsami i konstrukcjami programistycznymi.
  • Niezbyt precyzyjna semantyka oraz brak istotnego podejścia do jej specyfikacji.
  • Brak uniwersalności oraz możliwości definiowania widoków, klas i metod.
  • Brak pełnej implementacji zgodnej ze specyfikacją OQL.

Mimo tych ograniczeń, OQL stanowi wzorzec obiektowego języka zapytań, podważając przekonanie, że języki zapytań są ograniczone do relacyjnych baz danych. Przykładem narzędzia, które zbliża się do idei OQL, jest interfejs Hibernate dla języka Java.

Reklama

Przyszłość OQL

Po rozwiązaniu konsorcjum ODMG, dalszy rozwój OQL nie jest możliwy w jego dotychczasowej formie. Istnieją jednak propozycje kontynuacji standardu w ramach Object Management Group (OMG) pod nazwą „obiektowe bazy danych 4. generacji”.

Wpływ OQL na społeczność baz danych

OQL przełamał pewne stereotypy w społeczności baz danych, m.in. że hermetyzacja i języki zapytań są sprzeczne. Oprócz tego, OQL pokazał, że programowanie obiektowe nie ogranicza dostępu do obiektów wyłącznie do metod zdefiniowanych przez programistów. Wskazuje to na to, że ograniczenia te wynikają bardziej z ideologicznych przesłanek niż realnych możliwości technologicznych.

Przykłady zapytań w OQL

Poniżej kilka przykładów zastosowania OQL:

Reklama
  • Operator select wewnątrz from:
  • select struct( w: x.wiek, p: x.płeć ) 
    from (select y from Pracownicy as y where y.gr_zawodowa = 10) as x 
    where x.nazwisko = "Nowak"
  • Zależne złączenie:
  • select s.nazwisko, w.nazwa_wykładu from Studenci as s, s.zapisany_na as w
  • Złożone warunki i złączenia:
  • select d.adres from Osoby as x, x.dzieci as d 
    where x.adres.ulica = "Chrobrego" and count(x.dzieci) >= 2 and d.adres.miasto != x.adres.miasto
Reklama