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.
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.
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:
- 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"
select s.nazwisko, w.nazwa_wykładu from Studenci as s, s.zapisany_na as w
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