Przy korzystaniu z terminów takich jak „pojedynczy” lub .jeden" v określeniach jeden do wiele lub jeden do jeden trzeba zwrócić uwagę na •ewną subtelność. W naturalny sposób oczekuje się, że taki „jeden" lub „po-jdynczy" element istnieje. Na przykład każdy film został wyprodukowany ^ jakimś studiu i każde studio filmowe ma swego prezesa. Jednak w praktyce dar/a się. żc spodziewany jedyny element w ogóle nie istnieje. Na przy kład ioże się zdarzyć, że jakieś studio filmowe chwilowo pozostaje bez prezesa Ibo że nic wiadomo, w którym studiu powstał dany film.
Dlatego też zazwyczaj dopuszcza się sytuacje, w których brakuje spo-ziewanej jedynej wartości lub obiektu. Później przekonamy się. że w bazach anych w miejsce brakujących spodziewanych pojedynczych wartości jest losowana wartość pusta „nuli”, podobnie jak w zwykłym programowaniu, dy wskaźnikowi w miejsce brakującej wartości zostaje przypisany nil (war->ść pusta). W podrozdziale 2.5 podejmiemy temat więzów integralności wtedy zobaczymy, jaki jest mechanizm wymuszający istnienie pojedynczych biektów bez żadnych wyjątków.
Projektant baz danych odnajdzie W języku ODL system typów podobny 3 tych. które występują w języku (' i innych językach programowania. Sys-m typów składa się z typów prostych, zdefiniowanych w języku, oraz reku* ncyjnyeh zasad, dzięki którym można otrzymywać typy złożone z typów ostszych. A oto typy podstawowe w języku ODL:
1. Typy atomowe: całkowity, zmiennoprzecinkowy, znakowy, tekstowy, logiczny i wyliczeniowy. Korzystanie z tego ostatniego typu polega na zdefiniowaniu listy synonimów dla wartości typu całkowitego. Widzieliśmy już przykład typu wyliczeniowego w przykładzie 2.6 (wiersz 5) tam nazwy kolor oraz czarno-biał stanowiły w efekcie synonimy wartości całkow itych 0 i 1.
2. Typ interfejs, na przykład Film lub Gwiazda, przeznaczony w zasadzie do opisu struktur, ze składowymi dla każdego atrybutu oraz związkami interfejsu. Takie nazwy reprezentują typy złożone definiowane za pomoeą reguł opisanych poniżej, ale można jednak trak tować jc jako typy podstawowe.
Typy strukturalne tworzy się z typów bazowych (podstawowych) przez stosowanie następujących konstruktorów typów:
I. Zbiór (set). Jeżeli 7” jest nazwą jakiegoś typu. to Set<T> oznacza typ, którego wartości są dowolnymi skończonymi zbiorami wartości typu 7*. Przykłady stosowania konstruktora typu zbiór zamieszczono w wierszach 6, 11 oraz 15 na rys. 2.6.
*.§. nrr\vm/u//£ntcŁA/il^.lKAWi
2. Wielozbiór (hag). Jeżeli T jest nazwą jakiegoś typu. to 3ag<r> oznacza typ, którego wartości są dowolnymi skończonymi zbiorami z powtórzeniami. inaczej wielozbiorami (mul/isets), wartości typu T
Zbiory z powtórzeniami różnią się od zwykłych zbiorów tym, żc dany element może się powtarzać. Na przykład {1,2, 1} jest wiclozbiorcm, ale nie jest zbiorem, ponieważ 1 występuje więcej niż raz.
3. Lista (list). Jeżeli 7 jest nazwą jakiegoś typu. to List<T> oznacza typ. którego wartości są dowolnymi skończonymi listami wartości typu T. Szczególny przypadek stanowi tu typ stnng. który jest skrótowym zapisem typu List<ch.n->.
4. Tablica (array). Jeśli T jest nazwą typu. / jest nazwą typu integer, to Array<T, i> oznacza typ, którego elementami są tablice i elementów typu T. Na przykład Array<char, 10> oznacza napis o długości 10 znaków.
5. Struktura (slructure). Jeśli 711, 712, —,Tn są typami, a F\, F;, Fn są nazwami pól, to
Struct N {Tj Fx,T2 F?, F„|
oznacza nowy typ o nazwie N, którego elementy są strukturami złożonymi z n pól. /-te pole nazywa się F, i jest typu i). Na przykład w w ierszu 10 ry s. 2.6 pokazano typ strukturalny o nazw ie Adr, złożony z dwóch pól. Oba pola są typu string, a nazywają się odpowiednio ulica oraz mi a sto.
Zbiory, wielo zbiory i listy
Aby dobrze zrozumieć różnice między zbiorami, wielozbiorami oraz listami, trzeba pamiętać, że zbiór zawiera nie powtarzające się elementy, które poza tym nic są w żaden sposób uporządkow ane. W w ielozbiorzc elementy mogą występować więcej niż jeden raz, ale także nie ma między nimi ustalonego porządku. W listach z kolei powtarzanie też jest dozwolone, ale elementy występują w zadanym porządku, l ak więc (1.2. 1} oraz {2, I, 1} to ten sam wielozbiór, ale (1.2, 1) oraz (2, 1, 1) to są dwie różne listy.
Pierwsze cztery typy: zbiory, wielozbiory, listy i tablice są określone wspólnym mianem kolekcji. Które typy mogą być związane z atrybutami, a które ze związkami określono różnymi regułami.
ł yp atrybutu buduje się. zaczynając albo od typu atomowego, albo od struktur, których pola mają typy atomowe. Potem można tworzyć kolekcje złożone z typów atomowych lub struktur.