:>uu 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ
W języku SQL3 można zdefiniować typ krotek, który w dużym uproszczeniu odpowiada pojęciu klasy obiektów. Deklaracja typu wierszy składa się z:
1. Słowa kluczowego CRF.ATF. ROW TYPE.
2. Nazwy typu.
3. Listy par atrybutów i ich typów, którą otacza się nawiasami.
A zatem można przedstawić postać tej deklaracji w następujący sposób: CRF.A7E ROW TYPE 7'(<deklaracja składowych>)
PRZYKŁAD 8.22
Utworzymy typ wiersza, który posłuży do reprezentowania gwiazd filmowych, o właściwościach podobnych do klasy Gwiazda opisanej w przykładzie użycia OQL na rys. 8.4. Jednakże w tym przypadku nie ma możliwości bezpośredniego reprezentowania zbioru filmów jako pola w krotce Gwiazda. Dlatego na początku krotka Gwiazda będzie zawierać tylko składowe opisujące na zwis ko i adres.
Zauważmy, że typ określający adres, przedstawiony na rys. 8.4, sam jest typem krotkowym, o składowych ulica oraz miasto. Czyli musimy określić dwa dodatkowe typy - jeden do reprezentowania adresu, a drugi do reprezentowania gwiazdy. W języku SQL3 dopuszcza się, aby w typie wiersza określać typ składowej, jako inny typ wiersza, albo relację. Na rysunku 8.11 przedstawiono omawiane definicje.
CREATE ROW TYPE TypAdres ( ulica CHAR (50), miasto CHAR(20)
);
CREATE ROW TYPE TypGwiazda ( nazwisko CHAR(30), adres TypAdres
);
RYSUNEK 8.11
Dwie definicje typu wiersza
Krotka typu TypAdres ma dwie składowe, atrybutami są tutaj ulica i adres. Typami tych atrybutów są ciągi znaków o długościach równych odpowiednio 50 i 20. Krotka typu TypGwiazda ma także dwie składowe. Pierwsza określa wartość atrybutu nazwisko, którego typ zdefiniowaono jako 30-znakowy tekst, a typem drugiego atrybutu jest TypAdres, tzn. krotka o składowych ul i ca oraz miasto.
□
Po zadeklarowaniu typu wiersza można określić jedną lub więcej relacji, których krotki mają taki typ. Postać deklaracji relacji jest podobna do postaci przedstawionej w p. 5.7.2, ale zamiast określanej w deklaracji tabel SQL listy atrybutów i ich typów, tutaj umieszcza się następującą frazę:
OF TYPE <nazwa typu wiersza>
PRZYKŁAD 8.23
Można zadeklarować relację Gwiazda Fi linowa w taki sposób, żeby jej krotkom przypisać typ TypGwiazda. Wygląda to następująco:
CREATE TA3LE Gwiazda Fi linowa CF TYPE TypGwiazda;
W efekcie tabela Gwiazda Filmowa ma dwa atrybuty: nazwisko i adres. Zauważmy, żc typ tego drugiego atrybutu jest typem wiersza, co w wersjach języka SQL wcześniej szych niż SQL3 nie było dopuszczalne.
□
Całkiem zrozumiałe wydaje się to, że dla każdego typu wiersza istnieje relacja, którą rozumie się tak samo jak jest rozumiany zasięg (w rozumieniu p. 8.1.3) klasy odpowiadającej temu typowi krotek, ale można także określić wiele relacji o jednym typie krotkowym albo nie zdefiniować żadnej relacji tego typu.
Ponieważ składowe w języku SQL3 mogą być strukturami, trzeba dysponować mechanizmami dostępu do składowych tych struktur. W SQL3 w tym celu korzysta się z notacji podwójnej kropki, która jest bliskim odpowiednikiem notacji kropkowej z języków OQL i C.
SELECT GwiazdaFilmowa.nazwisko,
gwiazdaFilmowa.adres.ulica FROM Gwia zda Filmowa
WHERE GwiazdaFilmowa.adres..miasto = 'Beverly Hills';
RYSUNEK 8.12 Dostęp do składowych
PRZYKŁAD 8.24
Zapytanie z rys. 8.12 służy do odszukania nazwiska oraz adresu tych gwiazd które mieszkają w Bcverly Hills. Użyjemy pełnego opisu kropkowego atty butów GwiazdaFilmowa.nazwisko i GwiazdaFilmowa.adres po tc