Krzysztof Stencel Obiektowe i półstrukturalne bazy danych
Spis tre±ci 1 Wst p..................................................... 1 1.1 Zawarto± rozdziaªów................................... 1 1.2 Projekt LoXiM........................................ 2 2 Strukturalne obiektowe bazy danych....................... 7 2.1 Relacyjny model danych................................ 7 2.1.1 Poj cia pierwotne.............................. 7 2.1.2 Schemat tabel/relacji i schemat relacyjnej bazy danych....................................... 8 2.1.3 Egzemplarz relacji i egzemplarz relacyjnej bazy danych....................................... 8 2.2 Obiektowy model danych............................... 9 2.2.1 Poj cia pierwotne.............................. 9 2.2.2 Warto±ci...................................... 10 2.2.3 Typy danych.................................. 11 2.2.4 Hierarchia typów danych........................ 12 2.2.5 Schemat struktury obiektowej bazy danych........ 13 2.2.6 Przykªad schematu obiektowej bazy danych....... 14 2.2.7 Egzemplarz obiektowej bazy danych.............. 14 2.2.8 Dziedziczenie struktury......................... 17 2.2.9 Warto±ci domy±lne............................. 18 2.2.10 Brak koniktów dziedziczenia wielokrotnego....... 19 2.2.11 Klasykacja wielokrotna i dynamiczna............ 20 2.3 Model zachowania...................................... 22 2.3.1 Sygnatury metod.............................. 22 2.3.2 Schemat zachowania............................ 22 2.3.3 Egzemplarz schematu zachowania................ 23 2.3.4 Problem dyspozycji............................ 24 2.4 Podsumowanie......................................... 25
X Spis tre±ci 3 Przegl d j zyków zapyta«obiektowych baz danych........ 27 3.1 NaszQL............................................... 27 3.2 Ahoj przygodo!........................................ 29 3.3 Zª czenie zale»ne...................................... 31 3.4 Agregacja bez GROUP BY.............................. 32 3.5 Wyra»enia ±cie»kowe................................... 33 3.6 Zmienne ±cie»kowe..................................... 35 3.7 Dane póªstrukturalne OEM............................. 37 3.8 Lorel i UnQL.......................................... 38 3.9 Dane XML............................................ 40 3.10 XML-QL............................................. 42 3.11 Transformacje XSLT................................... 46 3.12 Podsumowanie......................................... 47 4 Obiektowo-relacyjne bazy danych.......................... 49 4.1 Zalety typów obiektowych............................... 49 4.2 Elementy obiektowo±ci w SQL:1999...................... 50 4.3 Elementy obiektowo±ci w Oracle......................... 52 4.3.1 Kolekcje...................................... 52 4.3.2 Typy u»ytkownika............................. 53 4.3.3 Konstruktor................................... 54 4.3.4 Metody typu obiektowego....................... 58 4.3.5 Typ referencyjny............................... 61 4.3.6 Porównywanie warto±ci typów obiektowych........ 63 4.3.7 Perspektywy obiektowe......................... 64 4.4 Rozszerzony przykªad. Baza zamówie«.................... 66 5 Lorel - j zyk póªstrukturalnych zapyta«................... 73 5.1 Model danych......................................... 73 5.2 Podstawowe zaªo»enie j zyka............................ 74 5.3 Równo± w pi ciu smakach.............................. 76 5.4 Wspólne przedrostki ±cie»ek............................. 79 5.5 Wyra»enia ±cie»kowe................................... 83 5.6 Przykªad przykªadów................................... 85 5.7 Podsumowanie......................................... 86 6 Aparat wykonawczy j zyka Lorel.......................... 89 6.1 Przykªadowe dane...................................... 89 6.2 Wykonywanie zapyta«w LORE.......................... 90 6.3 Maszyna wirtualna aparatu wykonawczego LORE.......... 91 6.3.1 Scan......................................... 92 6.3.2 Join......................................... 92 6.3.3 Select........................................ 93 6.3.4 Aggr......................................... 94 6.3.5 Plan wykonania zapytania...................... 95
Spis tre±ci XI 6.4 Indeksy............................................... 97 6.4.1 V index....................................... 97 6.4.2 Lindex....................................... 98 6.4.3 Bindex....................................... 98 6.4.4 P index....................................... 99 6.4.5 T index....................................... 99 6.4.6 Plan wykonania zapytania z u»yciem indeksu...... 100 6.5 Zapytanie z wynikiem wielowymiarowym.................. 101 6.5.1 Konstrukcja wyniku zapytania................... 102 6.5.2 Analiza mo»liwych planów wykonania............ 103 6.6 Podsumowanie......................................... 107 7 DataGuide................................................. 109 7.1 Póªschemat danych i jego zastosowania................... 109 7.2 Póªschemat w formie DataGuide......................... 110 7.3 Algorytm konstrukcji silnego DataGuide.................. 114 7.4 Przyrostowa piel gnacja silnego DataGuide................ 117 7.5 Zastosowanie DataGuide w realizacji zapyta«.............. 121 7.6 Podsumowanie......................................... 122 8 J zyki zapyta«dla danych XML........................... 123 8.1 Przykªadowy dokument XML............................ 124 8.2 Przegl d j zyków...................................... 124 8.2.1 Lorel........................................ 125 8.2.2 XML-QL..................................... 126 8.2.3 XML-GL..................................... 127 8.2.4 XSLT........................................ 128 8.2.5 XQL......................................... 131 8.3 XPath................................................ 133 8.3.1 Krok lokalizacyjny............................. 133 8.3.2 Osie.......................................... 134 8.3.3 Predykaty..................................... 134 8.3.4 Zapis skrócony................................ 136 8.3.5 Przykªady..................................... 136 8.4 Podstawowe elementy XQuery........................... 137 8.4.1 Wyra»enia ±cie»kowe........................... 138 8.4.2 Konstruktor elementu.......................... 138 8.5 FLWOR.............................................. 139 8.6 Instrukcje warunkowe i kwantykatory................... 140 8.7 Funkcje i rekurencja.................................... 142 8.8 Kontrola poprawno±ci typów............................ 144 8.8.1 Dwa systemy typów............................ 144 8.8.2 Schemat przykªadowego dokumentu.............. 144 8.8.3 Badanie typu.................................. 147 8.8.4 Typ argumentu funkcji......................... 148
XII Spis tre±ci 8.8.5 Instrukcja wyboru dla typu..................... 149 8.8.6 Typy elementarne.............................. 151 8.9 Podsumowanie......................................... 152 8.10 Zadanie............................................... 152 9 Podej±cie stosowe do j zyków zapyta«..................... 155 9.1 Modele skªadu obiektów................................ 156 9.1.1 Dane póªstrukturalne (model M0)............... 156 9.1.2 Dane obiektowe, klasy (model M1).............. 157 9.1.3 Role dynamiczne(model M2).................... 159 9.1.4 Hermetyzacja (model M3)....................... 160 9.2 Stos ±rodowisk i wi zanie nazw.......................... 161 9.2.1 Stos ±rodowisk................................. 161 9.2.2 Wi zanie nazw................................ 161 9.2.3 Funkcja nested................................ 163 9.3 J zyk zapyta«sbql................................... 166 9.3.1 Skªadnia zapyta«.............................. 166 9.3.2 Stos wyników.................................. 167 9.3.3 Semantyka zapyta«............................ 168 9.3.4 Operatory algebraiczne......................... 168 9.3.5 Operatory niealgebraiczne....................... 169 9.3.6 Przykªadowe zapytania w SBQL................. 172 10 Póªmocna kontrola typów w j zykach zapyta«............. 175 10.1 Mocna kontrola typów.................................. 175 10.2 Przyczynkowo± istniej cych systemów typów............. 176 10.3 Przykªad niespójno±ci w systemie typów ODMG........... 178 10.4 Kolekcje.............................................. 179 10.5 Póªmocna kontrola typów............................... 181 10.6 Prosty czy wymy±lny system typów?..................... 181 10.7 Niezale»no± danych i schematy baz danych............... 182 10.8 ródªa zb dnej zªo»ono±ci............................... 184 10.9 Koncepcja systemu kontroli typów....................... 185 10.10 Zewn trzny system typów.............................. 187 10.10.1 Architektura trójwarstwowa.................... 188 10.10.2 Deklaracja obiektu............................ 190 10.10.3 Deklaracja podprogramu....................... 191 10.10.4 Typy nazwane................................ 191 10.10.5 Typy rozró»nione.............................. 193 10.10.6 Deklaracja klasy............................... 193 10.10.7 Deklaracja interfejsu........................... 196 10.10.8 Programista systemowy........................ 198 10.10.9 Administrator................................ 199 10.10.10 Programista administracyjny................... 201 10.10.11 Programista aplikacyjny........................ 203
Spis tre±ci XIII 10.10.12 Przykªadowa skªadnia zewn trznego systemu typów 205 10.11 Schemat bazy danych i metabaza........................ 206 10.11.1 Metabaza.................................... 207 10.11.2 Atrybuty wierzchoªków metabazy............... 209 10.11.3 Korzenie, przynale»no± do klas i dziedziczenie.... 210 10.11.4 Metabaza jako sªownik danych.................. 211 10.11.5 Role dynamiczne............................... 211 10.11.6 Hermetyzacja................................. 211 10.11.7 Podprogramy i ich parametry referencyjne........ 212 10.11.8 Perspektywy.................................. 214 10.12 Sygnatury............................................ 215 10.12.1 Denicja sygnatur............................. 215 10.12.2 Statyczna funkcja nested....................... 221 10.13 Tablice decyzyjne wyprowadzania typów.................. 222 10.13.1 Operatory arytmetyczne i napisowe.............. 223 10.13.2 Operatory porównania......................... 225 10.13.3 Operatory logiczne............................. 226 10.13.4 Generyczne operatory algebraiczne.............. 227 10.13.5 Generyczne operatory niealgebraiczne............ 231 10.13.6 Operator punktu staªego....................... 235 10.13.7 Podsumowanie................................. 236 10.14 Aparat statycznej kontroli typów........................ 236 10.14.1 Architektura aparatu kontroli typów............. 237 10.14.2 Procedura statycznej kontroli typów.............. 239 10.14.3 Modykacja drzewa skªadni zapytania........... 244 10.14.4 Wznowienie procesu kontroli typów po bª dzie.... 249 10.14.5 Sygnatury wariantowe i rozwidlenie procesu....... 252 10.14.6 Przykªadowa statyczna kontrola typów........... 253 10.14.7 Przykªad dla schematu danych z dziedziczeniem... 258 11 Strumieniony aparat wykonawczy JLoXiM................. 261 11.1 Motywacja............................................ 261 11.2 Zaªo»enia............................................. 263 11.3 Strumie«............................................. 263 11.3.1 Rekord kontrolny.............................. 264 11.3.2 Resultset..................................... 264 11.3.3 Dziedzina komunikacji.......................... 264 11.3.4 Relacja zgodno±ci rekordów kontrolnych........... 265 11.3.5 Uporz dkowanie strumienia..................... 266 11.4 Komponenty.......................................... 266 11.4.1 Store......................................... 267 11.4.2 Stamp........................................ 267 11.4.3 GetNested.................................... 268 11.4.4 RefMaterializer................................ 268 11.4.5 Merge........................................ 269
XIV Spis tre±ci 11.4.6 HighestDened................................ 270 11.4.7 Komponenty dla operatorów algebraicznych....... 270 11.4.8 BreakBag..................................... 270 11.4.9 MakeBag..................................... 271 11.4.10 Select........................................ 271 11.5 Konstrukcja sieci wykonawczej dla zapytania.............. 271 11.5.1 Statyczne wi zanie nazw i operatorów............ 272 11.5.2 Budowa planu sieci wykonawczej................. 273 11.6 Przykªady sieci........................................ 277 11.7 Optymalizacje sieci wykonawczej......................... 279 11.8 Realizacja............................................. 279 11.8.1 Implementacja strumieni........................ 280 11.8.2 Scalanie komponentów.......................... 280 11.8.3 Strumienie a pami wspóªdzielona............... 280 11.8.4 Minimalizacja ilo±ci danych odczytywanych ze skªadu........................................ 281 11.8.5 JLoXiM - platforma eksperymentalna............ 281 11.9 Podsumowanie......................................... 282 12 Uniwersalny model stanu obiektu.......................... 283 12.1 Relacyjna baza danych a obiekty C++................... 284 12.1.1 Niezgodno± modelu danych..................... 284 12.1.2 Niezgodno± czasu wi zania..................... 285 12.1.3 Niezgodno± czasu»ycia obiektów................ 286 12.2 Uniwersalny model stanu............................... 286 12.3 Model relacyjny....................................... 288 12.4 Model M0/AS0........................................ 290 12.5 Model danych XML................................... 292 12.6 Model obiektowy j zyka C++........................... 294 12.7 Model obiektowy j zyków Java,.NET oraz Python......... 295 12.8 Podsumowanie......................................... 297 13 Uniwersalny j zyk zapyta«................................. 299 13.1 Operatory j zyka UQL................................. 299 13.1.1 Zmiana nazwy................................. 300 13.1.2 Spªaszczanie................................... 300 13.1.3 Odwzorowanie................................. 300 13.1.4 Ewaluacja..................................... 300 13.1.5 Pobieranie k-tego podobiektu.................... 301 13.1.6 Filtrowanie.................................... 301 13.1.7 Zagnie»d»anie................................. 301 13.1.8 Klonowanie................................... 301 13.1.9 Produkt kartezja«ski........................... 302 13.1.10 Grupowanie................................... 302 13.1.11 Ró»nica....................................... 302
Spis tre±ci XV 13.1.12 Transpozycja.................................. 303 13.1.13 Zwijanie...................................... 303 13.2 Przykªady odwzorowa«zapyta«.......................... 304 13.3 Dalsze prace.......................................... 307 Literatura..................................................... 309 Indeks......................................................... 319
1 Wst p Burzliwy rozwój obiektowych baz danych miaª miejsce w latach dziewi dziesi tych XX wieku. W ostatnich latach XX wieku silnie rozwijaªa si te» koncepcja póªstrukturalnych baz danych. Obecnie nadal u»ywa si obu tych rodzajów baz danych. Chocia» s one dalej rozbudowywane, jednak zajmuj raczej nisze rynkowe i nie s ju» wiod cymi technologiami. Przez ostanie 10 lat prowadziªem wykªad monograczny o takich bazach danych, a tak»e prace badawcze nad rozwojem ich koncepcji. Niniejszy tom jest zbiorem materiaªów zebranych przeze mnie w tym okresie. Mo»na go podzieli na dwie cz ±ci. Pierwsza z nich to podr cznik do prowadzonego przeze mnie wykªadu monogracznego. Druga cz ± to zbiór wyników bada«naukowych. Niektóre z przedstawionych tu zagadnie«byªy przedmiotem wcze±niejszych publikacji [BS01, BS07, Ste06]. W niniejszej ksi»ce zebraªem je wszystkie, zaktualizowaªem, rozszerzyªem, a tak»e uzupeªniªem caªkiem nowym materiaªem dydaktycznym i naukowym. Wszystko stanowi jednolit monogra obiektowych i póªstrukturalnych baz danych. 1.1 Zawarto± rozdziaªów Rozdziaªy 2-9 skªadaj si na podr cznik do nauki przedmiotu Obiektowe i póªstrukturalne bazy danych. Rozdziaª 2 zawiera informacje o obiektowym strukturalnym modelu danych. Jego celem jest m.in. przekonanie czytelnika,»e nie tylko relacyjny, ale tak»e obiektowy model danych mo»na sformalizowa. W rozdziale 3 zaproponowaªem klasykacj j zyków zapyta«dla baz obiektowych o modelach opisanych w rozdz. 2 oraz wªasny pro±ciutki referencyjny j zyk zapyta«naszql. Oba te rozdziaªy s napisanym caªkowicie od nowa i uzupeªnionym materia- ªem z [BS07]. W rozdziale 4 przedstawiªem zagadnienia zwi zane z obiektoworelacyjnym modelem danych i metodami projektowania i programowania takich baz danych. Rozdziaª ten stanowi istotnie rozszerzenie materiaªu przedstawionego w [BS01].
2 1 Wst p Rozdziaªy 5-7 stanowi caªkowicie nowy materiaª po±wi cony bardzo ciekawemu przedsi wzi ciu budowy systemu zarz dzania bazami danych LORE i aparatu wykonawczego j zyka zapyta«lorel. Rozdziaª 5 to omówienie tego j zyka. W rozdziale 6 przedstawiªem architektur i zasady dziaªania aparatu wykonawczego LORE. Z kolei rozdziaª 7 to prezentacja koncepcji póªschematu w formie DataGuide. W rozdziale 8 omówiªem j zyki zapyta«dla danych XML, a w szczególno- ±ci najwa»niejszy z nich XQuery, który jest ju» standardem przemysªowym. Rozdziaª ten to rozwini cie i uzupeªnienie tre±ci przedstawionych w [BS07]. Rozdziaª 9, jako ostatni w cz ±ci dydaktycznej, stanowi prezentacj architektury stosowej zaproponowanej pod koniec XX wieku przez prof. Kazimierza Subiet. W czasie dziaªania grupy roboczej OMG, która miaªa wypracowa nowy standard dla obiektowych baz danych, uznano architektur stosow za idealny punkt wyj±ciowy do budowy tego standardu. Rozdziaª 9 jest uzupeªnieniem zagadnie«omówionych w [Ste06]. Rozdziaªy 10-13 to artykuªy naukowe zawieraj ce oryginalny wkªad w rozwój dziedziny baz danych. W rozdziale 10 zebraªem informacje o mojej autorskiej koncepcji póªmocnej kontroli typów pierwotnie opublikowanej w [Ste06, LSS06]. Rozdziaª 11 to oryginalna koncepcja strumieniowego aparatu wykonawczego SBQL. Pocz tkowe rozdziaªy ksi»ki zawieraj omówienie wielu ró»nych modeli danych. Rozdziaªy 12 i 13 to raport z próby zbudowania uniwersalnego modelu danych i uniwersalnego j zyka zapyta«. W szczególno±ci, uniwersalny model danych staª si podstaw do pewnych ogólnych wniosków na temat systemów odwzorowa«obiektowo-relacyjnych. 1.2 Projekt LoXiM W tym punkcie pragn opisa swoje do±wiadczenia z pewnego du»ego przedsi wzi cia programistycznego prowadzonego w ramach zaj ze studentami. Na pocz tku roku akademickiego 2005/6 rozpocz li±my budow systemu zarz - dzania baz danych zgodnie z architektur stosow (por. rozdz. 9). SBQL byª jego natywnym j zykiem zapyta«. Docelowo ów SZBD miaª obsªugiwa tak»e zapytania w innych j zykach zapyta«, takich jak SQL, OQL, Lorel i XQuery. Zapytania tych j zyków miaªy by odwzorowywane na SBQL, który odgrywaª rol asemblera. Budowanemu SZBD nadaªem nazw LoXiM, która to nazwa przegraªa w 2005 roku konkurs na miano nowej wersji systemu budowanego przez zespóª Kazimierza Subiety w PJWSTK. Zwyci sk w tamtym konkursie okazaªa si ODRA b d ca skrótem od Object Database for Rapid Application development [AHK + 08]. Nazwa LoXiM byªa wzorowana na nazwie legendarnego systemu LOQIS [Sub90a]. Sªowo LoXiM zawiera anagram skrótu XML, gdy» miaª to by system póªstrukturalny. Maªe literki o oraz i miaªy symbolizo-
1.2 Projekt LoXiM 3 wa obiektowo± i Internet, poniewa» w zamierzeniu system miaª by u»ywany w aplikacjach WWW. J zykiem implementacji LoXiM jest C++. Oczekiwaªem,»e studenci sami zorganizuj prace zgodnie z zasadami in»ynierii oprogramowania. Byli to przecie» studenci dwóch ostatnich lat studiów magisterskich 1. Studenci przyst pili do prac i z czasem powstaªy pierwsze zr by funkcjonalno±ci [Ole07]. Wkrótce system rozrósª si do ogromnych rozmiarów jak na przedsi wzi cie akademickie (ponad 100 000 wierszy kodu). Poszczególne fragmenty stawaªy si przedmiotem licznych prac magisterskich: optymalizacja zapyta«[sit07], klasy w modelu M1 [Kac07], podsystem dzienników [Bud07, Per10], interfejs programistyczny dla Javy [Ros07], aktualizowalne perspektywy [Gry08], narz dzia do monitorowania [Kla08], uniwersalny protokóª komunikacyjny [Tab08], póªmocna kontrola typów [Hum20], indeksy [Tur08], sterownik JDBC [Mic09], narz dzia do administracji zdalnej [Kos09] oraz interfejsy i schematy zewn trzne [D b09]. Powstaªa te» witryna przedsi wzi cia loxim.mimuw.edu.pl. Niestety, z czasem okazaªo si,»e budowa tego systemu przerosªa studentów. Jako± kodu okazaªa si zbyt niska. Dawaª si we znaki brak niezb dnych narz dzi i metodyk in»ynierii oprogramowania. Nadzieja,»e studenci informatyki sami spostrzeg ten brak, a mo»e nawet w por mu zaradz, okazaªa si pªonna. Wybór C++ jako j zyka programowania te» okazaª si niefortunny. LoXiM miaª ogromne wycieki pami ci. W ci gu kilku minut przetwarzania zapyta«potraª zgubi jeden gigabajt. Podj li±my próby naprawy tej sytuacji poprzez diagnozowanie i porz dkowanie [Dop09, Tim09] oraz refaktoryzacj aparatu wykonawczego [Šo±10]. Niestety, wysiªki te nie przyniosªy rezultatów. Owszem, ograniczono wycieki pami ci i zwi kszono stabilno±, jednak nie byªo mowy o doprowadzeniu LoXiM do jako±ci pozwalaj cej nawet na beta-testowanie. Przyczyn kªopotów byªo kilka. Po pierwsze, studenci nie byli w stanie narzuci sobie i kolegom najlepszych praktyk in»ynierii oprogramowania. Po drugie, okazaªo si,»e studenci nie znaj C++ oraz technik bezpiecznego pisania programów w tym j zyku. Po trzecie, brakowaªo ci gªo±ci studenci ko«czyli prace magisterskie i opuszczali zespóª na zawsze. W trakcie prac nad poprawianiem LoXiMa kilku studentów postanowiªo napisa podobny system od nowa, ale w ±rodowisku.net. Wkrótce powstaª w C# system LoXiM# [Grz09] maj cy lepsz stabilno±. Korzystaj c z aparatu wykonawczego i skªadu danych LoXiM#, studenci zbudowali fasad do obsªugi skªadu XML [Kac08] oraz procesor zapyta«sql [Pie09]. Niestety, wkrótce LoXiM# zostaª porzucony. Przyczyn byªa silna niech studentów MIMUW do technologii rmy Microsoft. Opisuj t histori, aby osoby pragn ce prowadzi podobne przedsi wzi cia mogªy unikn podobnych potkni. Ostatecznie zdecydowaªem o zbudowaniu w Javie nowej wersji LoXiMa. Postanowiªem odgórnie narzuci metody i techniki in»ynierii oprogramowania. Byªy to kroki sªuszne, poniewa» otrzy- 1 Miaªo to miejsce przed wprowadzeniem systemu bolo«skiego.
4 1 Wst p many system JLoXiM okazaª si stabilny i pozbawiony wad dwóch swoich poprzedników. Zastosowanie Javy wyeliminowaªo wiele kªopotów z zarz dzaniem pami ci operacyjn. Od pocz tku te» nad kodem ¹ródªowym czuwaª osobi±cie Piotr Tabor, sªuchacz studium doktoranckiego, który wcze±niej braª udziaª w budowie LoXiM. Dla JLoXiMa wybrali±my architektur warstwow widoczn na rys. 1.1 oraz peªn wymienno± wszystkich komponentów. Realizacja nowego j zyka zapyta«wymagaªa jedynie podmiany moduªów aparatu wykonawczego wstrzykiwanych w technologii Java Spring. Wymusili±my stosowanie wielu dobrych praktyk in»ynierii oprogramowania, jak codzienna budowa, testowanie regresywne, ±ledzenie usterek, przegl dy kodu itd. Zarówno LoXiM, jak i JLoXiM byªy dla studentów doskonaª lekcj o prowadzeniu przedsi wzi programistycznych, przy czym LoXiM to przykªad negatywny (jak tego nie robi ), a JLoXiM pozytywny (jak to robi ). JLoXiM ze swoj elastyczn architektur staª si poligonem do±wiadczalnym dla bada«naukowych nad strumieniowymi aparatami wykonawczymi. Wyniki tych prac opisali±my w rozdz. 11 niniejszego tomu oraz opublikowali±my w [TS10]. Raport z implementacji tego podej±cia znajduje si w pracy magisterskiej [Kut11]. Wymienno± wszelkich moduªów JLoXiM oznaczaªa,»e mogªy powsta liczne odmienne moduªy skªadowania danych [Ada11, wi11]. Opracowano na nowo tak»e wiele standardowych komponentów SZBD: podsystem odtwarzania po awariach [Šup11], indeksy [Len11], mened»er transakcji [Chm11], kontroler wspóªbie»no±ci [Bªa10], póªmocn kontrol typów [Man10] i obiektowe interfejsy programistyczne [Dor10]. Ostateczne wyniki przedsi wzi programistycznych pod wspóln nazw LoXiM mo»na uzna za pozytywne. To fakt,»e studenci nie byli w stanie narzuci sobie sami re»imu metodologicznego pozwalaj cego budowa du»e systemy informatyczne. Gdy jednak ten re»im wprowadzono z zewn trz, studenci ch tnie si mu poddali i potrali projektowa i programowa zgodnie z reguªami naszej profesji. Mam nadziej,»e z czasem poradz sobie tak»e z narzucaniem takiego re»imu sobie i innym. Wokóª projektu LoXiM powstaªo 29 prac magisterskich i dwa artykuªy konferencyjne [TS10, DST12]. Napisano kilkaset tysi cy linii kodu. Samej bazy danych nie udaªo si szeroko spopularyzowa w»adnej wersji. Kod ¹ródªowy bazy JLoXiM posªu»yª jako przedmiot studium problemowego z in-»ynierii oprogramowania opisanego w artykule [DST12]. Dokumentacj oraz kod ¹ródªowy JLoXiM mo»na znale¹ w witrynie projektu pod adresem jloxim.mimuw.edu.pl.