118 RELACYJNY MODEL DANYCH
właściwości. Każdy atrybut ma określony typ atomowy: tytuł jest napisem, rok i długość są typu całkowitego, a typFilmu może przyjmować jedną z. dwóch wartości.
Tworzymy relację o takiej samej nazwie jak nazwa klasy, w tym przypadku “i Im. Relacja ma cztery atrybuty, po jednym odpowiedniku dla każdego atrybutu klasy. Nazwy atrybutów relacji mogą być takie same jak nazwy odpowiednich atrybutów klasy. Zatem otrzymujemy następujący schemat dla tej relacji:
Film (tytuł, rok, długość, typFilmu) taki sam jak w p. 3.1.1.
W obiektach klasy są określone wartości dla każdego atrybutu klasy. Każdemu obiektowi może odpowiadać krotka, której składowe są równe wartościom poszczególnych atrybutów obiektu. Wynik takiego przekształcenia już widzieliśmy. Na rysunku 3.1 przedstawiono bowiem przykład przekształcenia obiektów klasy Film do postaci krotek.
□
Niestety, nawet jeśli wszystkie właściwości klasy są atrybutami, to przy przekształcaniu klasy do postaci relacji mogą pojawić się problemy. Ich powodem może być złożony typ atrybutów w języku ODL, które bywają opisywane strukturami, zbiorami, wielozbiorami lub listami. Natomiast podstawowe założenie modelu relacyjnego stanowi o tym, że typy atrybutów mogą być wyłącznic atomowe, takie jak liczby lub napisy. Stąd też istnieje potrzeba określenia sposobu przedstawiania nieatomowych typów atry butów w postaci relacji.
Reprezentowanie typów wyliczeniowych i dat W modelu ODL istnieją pewne typy atomowe, w praktyce daty i typy wyliczeniowe, które nic mają odpowiedników w typach atomowych standardowego modelu relacyjnego. Na przykład typ wyliczeniowy, to jest to tak naprawdę zbiór odpowiedników dla pierwszych kilku liczb całkowitych. Zatem na przykład pole typu wyliczeniowego dla dni tygodnia można zastąpić atrybutem typu integer, a korzystać w krotkach tylko z wartości całkowitych od 1 do 6. W alternatywny sposób można korzystać z atrybutu typu string, a dni tygodnia przedstawiać wartościami „Pon”, „wt” itd. W podobny sposób można w modelu relacyjnym stosować typ string do reprezentow ania atrybutów, które w modelu ODI. mają określony typ jako data. W rozdziale 5 przy omawianiu relacyjnego języka zapytań SQL okaże się. że tak samo jak w języku ODL można tam używać atrybutów, które są typu wyliczeniowego i typu daty.
Struktury takie jak rekordy, których pola są z założenia typu atomowe-go, obsługuje się najłatwiej. Po prostu rozszerza się wówczas definicję struktury, dodając do relacji po jednym atrybucie dla każdego pola struktury. Jedyny kłopot może wynikać wówczas, gdy dwie struktur}' w klasie mają jednakowe nazwy pól, i w takim przypadku trzeba wymyślić dla jednego z powstających w tej parze atrybutów nową nazwę po to, by w relacji można je było odróżnić.
interface Gwiazda {
attribute string nazwisko; attribute Struct Adr
{string ulica, string miasto) adres;
};
RYSUNEK 3.5
Klasa z atrybutem strukturalnym PRZYKŁAD 3.3
Rozważmy wstępną definicję klasy Gwiazda z przykładu 2.3, podajemy ją ponownie na rys. 3.5. Atrybut n.azwi sko jest typu atomowego, ale już atrybut adres jest strukturą o dwóch polach: ulica oraz miasto. A więc w relacji odpowiadającej tej klasie trzeba utworzyć 3 atrybuty. Pierwszy z nich to będzie nazw.i sko i odpowiada on atrybutowi o tej samej nazw ie z języku ODL. Drugi i trzeci atrybut nazwiemy odpowiednio ulica oraz miasto, będą one stanowić odpowiedniki dwóch pól struktury adres i łącznic stanowić opis adresu. Schemat relacji przedstaw ia się zatem następująco:
Gwiazda (nazwisko, ulica, miasto)
Przykład instancji tej relacji z arbitralnie dobranymi krotkami został przedstawiony na rys. 3.6.
nazwisko |
ulica |
miasto |
Carrie Fischer |
123 Mapie St. |
Hollywood |
Mark Hamill |
456 Oak Rd. |
Brentwood |
Harrisom Ford |
783 Palm Dr. |
3everly Hiils |
RYSUNEK 3.6
Relacja reprezentująca gwiazdy
□
Ale to nie struktura typu rekord jest najbardziej skomplikowana wśród typów atrybutów, którymi można określać atrybuty w definicjach klas w modelu ODL. Można budować wartości, korzystając z konstruktorów typów takich jak: ser, baq, array i list. Każdy z nich stanowi osobny problem