502 S. /.ORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ
bv zilustrować różnicę między pojedynczą a podwójną kropką. Ale ponieważ nazwy adres i nazwisko w tym miejscu są jednoznaczne, więc tak naprawdę Gwiazda Filmowa i kropka nie $ą potrzebne.
□
Identyczność obiektów z języków obiektowych w języku SQL3 jest zapewniona dzięki pojęciu referencji (odniesienia). Typem składowej w typie wiersza może być referencja do innego typu wiersza. Jeśli 7“jest typem wiersza, to REF(7) oznacza typ, który jest referencją do krotki typu T. Gdy traktujemy krotkę jako obiekt, wówczas referencją do tego obiektu jest jego ID.
PRZYKŁAD 8.25
Nadal nie ma sposobu na zapisanie w tabeli Gwiazda Filmowa zbioru wszystkich filmów, w których dana gwiazda brała udział, ale spróbujmy tam umieścić jej najlepszy film. Najpierw jednak trzeba zdefiniować relację Film, a jednocześnie można zdefiniować typ wiersza tej relacji. Najprostszy typ dla filmów, bez uwzględniania teraz związków z gwiazdami, studiami i producentami, definiuje się w następujący sposób:
CREATE ROW TYPE TypFilm( tytuł CHAR(30),
.rok INTEGER, czyKolor BIT(l)
>;
Relację krotek tego typu definiuje sic następująco:
CREATE TABLE Film OF TYPE TypFilm;
Potem trzeba zmodyfikować typ krotek Gwiazda Filmowa tak, aby obejmował referencję do najlepszego filmu danej gwiazdy*. Nowa definicja typu TypGwiazća wygląda następująco:
CREATE ROW TYPS TypGwiazda{ nazwisko CHAR(30), adres TypA.dres, najlepszyFiim REF(TypFilm)
' W języku SQL3 nic występuje operator ALTER TABLE ani żadna podobna instrukcja. która umożliwiłaby zmianę istniejącej definicji typu. Dlatego w praktyce gdybyśmy chcieli zmieniać definicję typu wiersza, trzeba by usuwać definicje zmienianego typu oraz tabele z nim związane, a potem powtórnie zdefiniować ten typ oraz zrekonstruować tabele.
IłRZYKŁAD 8.26
Teraz spróbujmy określić standardowy związek typu wiele do wiele między gwiazdami a filmami: jedna gwiazda występuje w wielu filmach, a w jednym filmie może brać udział wiele gwiazd. W języku ODL można określić jako składową filmu cały zbiór gwiazd i odwrotnie, jednak w języku SQL3 nadal obowiązuje mechanizm związków, który przewija się przez cały nasz podręcznik*. A więc związki wiele do wiele można reprezentować jako oddzielne relacje, złożone z par wielkości tworzących ten związek.
CREATE ROW TYPE TypFilm{ tytuł CHAR(30)
rok INTEGER,
czyKolor RTT(l)
);
CREATE ROW TYPE TypAcires ( ulica CHAR (50), miasto CHAR(20)
);
CREATE ROW TYPE TypGwiazda ( nazwisko CHAR(30), adres TypAdres
CREATE ROW TYPE TypGwiazdyW( awiazda REF(TypGwiazda), film REF(TypFilm)
) ;
CREATE TABLE Film OF TYPE TypFilm;
CREATE TABLE GwiazdaFilinowa OF TYPE TypGwiazda
CREATE TABLE Gwi&zdyW OF TYPE TypGwiazdyW;
RYSUNEK 8.13
Gwiazdy, filmy i związki między nimi
Na rysunku 8.13 przedstawiono jeden ze sposobów określenia związku gwiazdy-w między filmami a gwiazdami. W standardach wcześniejszych niż SQL3 związki wiele do wicie reprezentuje się przez pary kluczy klas tworzących związek, natomiast w języku $QL3 można bezpośrednio odwoływać się do obiektów (a dokładnie krotek) przez atrybuty, których typ jest określony
' W niektórych projektach SQL3 dopuszcza się kolekcje (tzn. zbiory lub relacje) występujące w charakterze typu atrybutu, jednakże jest bardziej prawdopodobne, że stosowanie typów kolekcji zostanie odłożone do następnego standardu SQL4.