Bazy danych - microbot.com.pl
Transkrypt
Bazy danych - microbot.com.pl
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Bazy danych ITA-101 Wersja 1 Warszawa, wrzesień 2009 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych 2008 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski. Autorzy udzielają prawa do bezpłatnego kopiowania i dystrybuowania wśród pracowników uczelni oraz studentów objętych programem ITAcademy. Wszelkie informacje dotyczące programu można uzyskać: [email protected]. Wszystkie inne nazwy firm i producentów wymienione w niniejszym dokumencie mogą być znakami towarowymi zarejestrowanymi przez ich właścicieli. Inne produkty i nazwy firm używane w treści mogą być nazwami zastrzeżonymi przez ich właścicieli. Strona i-2 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Wprowadzenie Informacje o kursie Opis kursu We współczesnej informatyce coraz większą rolę odgrywa przepływ informacji. Dane są gromadzone i przekazywane w ilościach dotąd niespotykanych. Od umiejętnego sterowania przepływem danych zależy los wielu wielkich firm. Odpowiednia automatyzacja procesu przepływu informacji daje ogromne wymierne korzyści. Bazy danych i systemy zarządzania bazami danych służą właśnie temu, by móc przechowywać nawet ogromne ilości danych bez narażenia na ich utratę oraz by móc odpowiednio szybko i wygodnie sterować ich przepływem. Bazy danych wdarły się zarówno do sieci lokalnych w firmach, gdzie gromadzone są dane na potrzeby pracowników, jak również do Internetu, gdzie dostęp do nich mają miliardy użytkowników na całym świecie. Dynamiczny rozwój baz danych implikował powstanie wielu nowych technologii programowania ukierunkowanych na jeszcze wydajniejsze wykorzystanie baz danych w aplikacjach. Z kolei administracja systemami zarządzania bazami danych stała się osobną gałęzią informatyki, tak jak administracja systemami operacyjnymi komputerów lub administracja sieciami komputerowymi. Wielu pracodawców poszukuje wykwalifikowanych specjalistów z zakresu określonych systemów zarządzania bazami danych (jak Oracle czy MS SQL Server). Znajomość zarówno teorii baz danych, jak i konkretnego środowiska pracy z nimi, jest więc okazją podniesienia swoich kwalifikacji. Wykorzystując możliwości systemu zarządzania bazami danych Microsoft SQL Server 2008 postaramy się w niniejszym podręczniku zilustrować podstawowe własności baz danych (w szczególności relacyjnych baz danych) oraz systemów zarządzania tymi bazami. Mamy nadzieję, że podręcznik pozwoli Państwu na bliższe zapoznanie się z tematyką baz danych oraz systemem Microsoft SQL Server 2008. Życzymy owocnej pracy z naszym podręcznikiem. Uzyskane kompetencje Po zrealizowaniu kursu będziesz: • • • • • • • • Zrozumieć schemat, zaprojektować i zoptymalizować prostą bazę danych, Administrować serwerem bazodanowym MS SQL Sever 2008 na poziomie podstawowym, Zaimplementować prostą bazę danych w systemie SZBD opartym o MS SQL Sever 2008, Tworzyć skrypty w języku T-SQL, Monitorować i dokonywać tuningu baz danych, Dbać o bezpieczeństwo systemów SZBD w podstawowym zakresie, Używać języka XML w procesie komunikacji z SZBD, Tworzyć raporty przy użyciu MS SQL Reporting Services Strona i-3 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Wymagania wstępne Aby przystąpić do pracy z podręcznikiem musisz: • • • umieć obsługiwać komputer z zainstalowanym systemem operacyjnym Microsoft Windows 9X/NT/2000/ME/XP/2003, znać podstawowe zagadnienia dotyczące programowania (m.in. wiedzieć, co to jest zmienna, procedura, pętla), nie musisz znać teorii baz danych - poznasz ją czytając wykłady zawarte w niniejszym podręczniku. Zakres tematyczny kursu Opis modułów W Tab. 1 przedstawiony został opis modułów, zawierający podział na zajęcia. Każde zajęcie jest zaplanowane na 90 minut. Wykładowca może dostosować harmonogram do swoich potrzeb. Tab. 1 Zakres tematyczny modułów Numer moduł Tytuł Moduł 1 Budowa diagramów ERD Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Moduł 3 Definiowanie i zarządzanie bazą danych Opis W tym module zajmiemy się pierwszym krokiem, jaki należy wykonać projektując bazę danych. Będzie nim identyfikacja encji i narysowanie na diagramie, zwanym diagramem ERD, zależności między nimi. Prawidłowy i przejrzysty diagram ERD jest kluczowym czynnikiem sukcesu dla zaprojektowania, a później eksploatacji bazy danych. W tym module znajdziesz informację o podstawowych zadaniach administratora systemu bazodanowego. Do zadań tych należy instalacja serwera baz danych, konserwacja oraz aktualizacji serwisów serwera. Prawidłowe przygotowanie środowiska pracy zapewni stabilność oraz pozwoli na poznanie systemu bazodanowego od podstaw. Dobry administrator Systemu Zarządzania Bazami Danych wie wszystko o bazach danych. W dzisiejszych czasach rola administratora nie ogranicza się do zarządzania istniejącymi bazami danych, ale również wymaga umiejętności zakładania, konserwacji oraz aktualizacji baz danych znajdujących się pod jego opieką. Moduł przybliży wszystkie te zagadnienia Moduł 4 Wewnętrzna struktura bazy danych W tym module znajdziesz informacje w jaki sposób w SQL Server 2008 przechowywane są dane oraz w jaki sposób przechowywane są podstawowe obiekty w bazie danych. Moduł 5 Język SQL został opracowany w 1987 roku z myślą o relacyjnych bazach danych. Składa się on z trzech składowych: języka definiowania danych (DDL), języka sterowania danymi (DCL) oraz języka operowania na danych (DML). W module tym zostaną wprowadzone, a następnie przedstawione na przykładach podstawowe instrukcje języka definiowania danych – języka SQL DDL oraz języka sterowania danymi – języka SQL DCL. Język SQL - DCL, DDL Strona i-4 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL - DML Moduł 7 Indeksy i transakcje Moduł 8 Programowanie zaawansowane w T-SQL Moduł 9 Procedury składowane i wyzwalacze Moduł 10 Bezpieczeństwo w bazach danych Moduł 11 Praca z XML Moduł 12 Praca z Reporting Services Język SQL składa się z trzech składowych: języka definiowania danych (DDL), języka sterowania danymi (DCL) oraz języka operowania na danych (DML). W module tym zostaną wprowadzone, a następnie przedstawione na przykładach podstawowe instrukcje języka sterowania na danych – języka SQL DML W module tym znajdziesz informacje na temat dostępu fizycznego do danych oraz optymalizacji dostępu. Poznasz indeksy i ich rodzaje a następnie dowiesz się jakie operacje wykonywane są na indeksach. Dowiesz się, że jest to parametr niezbędny do zapewnienia rozsądnych czasów wyszukiwania informacji. W drugiej części poznasz transakcje, które służą do zapewnienia spójności bazy danych i mają wpływ na wydajność bazy danych. Dowiesz się, że obsługa transakcji nie jest rzeczą łatwą i wymaga rozwiązywania wielu trudnych problemów. Programowanie w języku zapytań to ważna umiejętność. Powinni ją opanować zarówno programiści, jak i administratorzy. Różne dialekty języka SQL oferują różne składnie, jednak reguły, jakimi powinien kierować się tworzący kod, są te same niezależnie od SZBD. Bardzo często opanowanie w zaawansowanym stopniu składni jednego języka pozwala w przyszłości na łatwe opanowanie innego. W module tym znajdziesz informację na temat zaawansowanego programowania w T-SQL. W module zostanie zaprezentowany sposób działania oraz podstawy tworzenia procedur składowanych. Dowiesz na czym polega różnica pomiędzy zwykłym zapytaniem T-SQL a procedurą składowaną oraz co to jest kompilacja i rekompilacja procedury. Zostanie wprowadzony również specjalny rodzaj procedury składowanej – wyzwalacz. W tym module dowiesz się, jak należy rozumieć bezpieczeństwo baz danych oraz jakie są poziomy bezpieczeństwa. Ponadto dowiesz się, jakim zagrożeniom należy przeciwdziałać, a jakich nie da się uniknąć oraz jak należy planować implementację poszczególnych poziomów bezpieczeństwa w aplikacji bazodanowej. Wymiana danych z relacyjnymi bazami danych może być utrudniona ze względu na różnice programowo – sprzętowe itp. Rozwiązaniem jest język XML, który jest niezależny od standardów sprzętowych / programowych. Aby osiągnąć sukces na dzisiejszym, konkurencyjnym rynku, przedsiębiorstwa gromadzące duże ilości danych powinny wprowadzić rozwiązania biznesowe działające w czasie rzeczywistym zapewniające bezproblemową, skuteczną wymianę informacji pomiędzy własnymi oddziałami, swoimi partnerami, a także klientami. Microsoft SQL Server Reporting Services jest rozwiązaniem, które pozwala szybko i komfortowo dzielić i udostępniać dane biznesowe, przy niższych nakładach rozmaitych zasobów. Strona i-5 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 13 Budowa interfejsu Dodatek Podstawy W module tym napiszemy aplikację , która będzie wyciągała informacje z bazy danych Prace Dyplomowe. Zostanie pokazane jak za pomocą Visual Studio utworzyć bazę danych, jak połączyć się z bazą danych w jaki sposób wprowadzać dane. Następnie stworzymy aplikacje Windows, która będzie korzystała z tych danych. W tym module zajmiemy się zebraniem najważniejszych informacji na temat baz danych niezbędnych do zrozumienia i pełnego wykorzystania dalszych modułów. Zebrane, najważniejsze pojęcia nie zastępują pełnego wykładu na ten temat i nie zwalniają Cię z przestudiowania wykładu lub podręcznika z zakresu baz danych. Mają one jedynie na celu zebrać i utrwalić najważniejsze elementy potrzebne do wykonywania kolejnych modułów. Zazwyczaj pierwsze zajęcia laboratorium są zajęciami organizacyjnymi. Strona i-6 ITA-101 Bazy danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 1 Wersja 1.0 Budowa diagramów ERD Spis treści Budowa diagramów ERD ...................................................................................................................... 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 7 Porady praktyczne ..................................................................................................................... 12 Uwagi dla studenta .................................................................................................................... 13 Dodatkowe źródła informacji..................................................................................................... 13 Laboratorium podstawowe ................................................................................................................ 14 Problem (czas realizacji 40 min)................................................................................................. 14 Laboratorium rozszerzone ................................................................................................................. 16 Zadanie 1 (czas realizacji 45 min)............................................................................................... 16 Zadanie 2 (czas realizacji 45 min)............................................................................................... 16 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Informacje o module Opis modułu W tym module zajmiemy się pierwszym krokiem, jaki należy wykonać projektując bazę danych. Będzie nim identyfikacja encji i narysowanie na diagramie, zwanym diagramem ERD, zależności między nimi. Prawidłowy i przejrzysty diagram ERD jest kluczowym czynnikiem sukcesu dla zaprojektowania, a później eksploatacji bazy danych. Cel modułu Celem modułu jest wykształcenie umiejętności budowania poprawnych, przejrzystych i dobrze udokumentowanych diagramów ERD z wykorzystaniem narzędzia MS VISIO. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • rozumiał, czym jest diagram ERD, • rozumiał, w jaki sposób buduje się diagramy związków encji na różnych poziomach abstrakcji, • umiał zbudować poprawny diagram ERD, • umiał dokonać przekształcenia diagramu ERD tak, aby był on implementowany w relacyjnej bazie danych. Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • rozumieć, czym jest baza danych i jakie powinna mieć cechy, • znać założenia modelu relacyjnego baz danych. Mapa zależności modułu Przed przystąpieniem do realizacji tego modułu nie są wymagane inne moduły. Strona 2/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Przygotowanie teoretyczne Przykładowy problem Wyobraź sobie, że zostałeś poproszony o przygotowanie bazy danych ułatwiającej zarządzanie przydziałem sal i zajęć na swoim wydziale na uczelni. Pani Jola zajmująca się przydzielaniem sal na zajęcia chciałaby uzyskać narzędzie do kontroli i monitorowania obciążenia sal przez różne zajęcia dydaktyczne oraz chciałaby przy tej okazji zminimalizować liczbę popełnianych błędów. Błędy polegają najczęściej na tym, że w jednej sali umieszczane są w tym samym czasie różne zajęcia lub na tym, że ta sama grupa studencka ma zajęcia w różnych salach w jednym czasie. Pani Jola chciałaby też mieć możliwość szybkiego generowania raportów o przydziale sal i zajęć. Dla uniknięcia nieporozumień przy pracach nad narzędziem wspomagającym pracę pani Joli zostałeś poproszony o przygotowanie prostego i krótkiego dokumentu przedstawiającego, jakie dane będą gromadzone w bazie danych i jakie będą między nimi zależności. Dokument ten powinien zostać zweryfikowany i zaakceptowany przez panią Jolę przed przystąpieniem do dalszych prac. Podstawy teoretyczne Przy modelowaniu baz danych możemy posłużyć się notacją graficzną modelowania danych – diagramem związków encji (ERD, ang. Entity-Relationship Diagram). Jest to model sieciowy opisujący na wysokim poziomie abstrakcji dane, które są przechowywane w systemie. Model ERD budowany jest przez analityka. Służy on do zobrazowania w sposób zrozumiały zarówno dla projektanta, jak i osoby niemającej wykształcenia informatycznego (np. klienta) obiektów i związków zachodzących w projektowanej dziedzinie problemowej. Model ERD nie jest związany z konkretną implementacją systemu (np. na serwerze MS SQL czy Oracle), choć jego odmiany mogą zawierać informacje specyficzne dla danego języka lub środowiska implementacyjnego. Staje się on wówczas modelem projektowym Encja Encja (ang. entity) jest to coś, co istnieje, co odróżnia się od innych, o czym trzeba mieć informacje. Zbiory encji reprezentują zbiór elementów występujących w rzeczywistym świecie i każdy element tego zbioru musi posiadać następujące cechy: • Każdy element musi być unikalny, jednoznacznie określony, w celu odróżnienia go od pozostałych. • Każdy element musi odgrywać jakąś rolę w projektowanym systemie, nie może zdarzyć się sytuacji, w której system może działać bez dostępu do danego elementu. • Każdy element powinien być opisany przez odpowiednią liczbę atrybutów. W diagramach ERD encja jest reprezentowana przez prostokąt, a jej nazwa powinna być rzeczownikiem. Atrybut Atrybut (ang. attribute) jest pewną własnością encji, o której chcemy przechowywać informacje. Atrybut jest reprezentowany przez pewną wartość. Na przykład encja Student może mieć atrybut Nazwisko reprezentowany przez wartość Kowalski. Wśród atrybutów encji wyróżniamy jeden atrybut lub zbiór atrybutów, którego wartość w sposób jednoznaczny identyfikuje instancję (egzemplarz) encji. Taki atrybut lub zbiór atrybutów nazywamy kluczem głównym encji. Klucz główny oznacza się często na wykresach symbolem PK (ang. Primary Key) umieszczanym obok nazwy atrybutu. Strona 3/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Drugim rodzajem klucza stosowanym w bazach relacyjnych jest klucz obcy. Kluczem obcym nazywamy atrybut encji, który wskazuje na klucz główny innej encji. Klucz obcy oznacza się często na wykresach symbolem FK (ang. Foreign Key)) umieszczanym obok nazwy atrybutu. Rys. 1. Przykład klucza obcego (FK1) Związek Bardzo ważnym elementem w modelu danych są związki (ang. relationship) relationship pomiędzy encjami i warunki określające te związki związk – elementy łączące encje między sobą. Zdecydowana większość związków to powiązania stopnia drugiego – związki binarne, charakteryzujące się tym, że w związku bierze udział dwóch uczestników (dwie encje). Mogą występować także związki unarne (encja powiązana z samą sobą), jak również związki ternarne (z trzema uczestnikami). W zależności od tego, jakiego typu jest uczestnictwo uczestnic encji w danym związku, możemy podzielić encje na słabe lub regularne. Encje słabe charakteryzują się całkowitym uczestnictwem w powiązaniu, to oznacza, że encja nie może istnieć bez tego powiązania (np. encja Zamówienia nie może istnieć bez powiązania z encją Klienci), natomiast atomiast uczestnictwo encji regularnych w związku jest tylko częściowe, czyli encja może istnieć samodzielnie bez powiązania (np. encja Klienci może istnieć bez powiązania z encją Zamówienia). Bardzo istotnym czynnikiem określanym przy związkach z jest moc powiązania, powiązania która definiuje się jako maksymalną liczbę instancji jednej encji (wystąpień w danej encji), które mogą być powiązane z instancją innej encji. Ze względu na wartość mocy możemy wyróżnić trzy typy powiązań: • jeden-do-jeden, • jeden-do-wiele, • wiele-do-wiele. Związki binarne Związek jeden-do-jeden jeden (jedno-jednoznaczny) (jedno Jest to najprostszy typ powiązania, występuje wtedy, gdy tylko jedna instancja pierwszej encji jest powiązana z tylko jedną instancją drugiej encji. Jest to powiązanie wprowadzające dosyć znaczne ograniczenia, gdyż warunek jeden do jednego musi być zawsze spełniony. Opcjonalnie przy powiązaniu jeden może występować również opcja żadne, oznaczana graficznie w postaci okręgu. Związek jeden-do-wiele wiele (jedno-wieloznaczny) (jedno Najbardziej jbardziej typowym rodzajem powiązania jest powiązanie jeden-do-wiele, jeden wiele, w którym pojedyncza instancja jednej encji może być połączona z jedną lub wieloma instancjami drugiej encji. Ze względu na swoją uniwersalność i małą kłopotliwość, ten typ powiązania jest najczęściej stosowany. Opcjonalnie przy powiązaniu jeden lub wiele może występować również opcja żadne, oznaczana graficznie w postaci okręgu. Rys. 2. Związek jeden-do-wielu Strona 4/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Związek wiele-do-wiele (wielo-wieloznaczny) Powiązania tego typu występują równie często jak powiązania jeden do wielu, jednak nie dają się bezpośrednio implementować w relacyjnych bazach danych. Są one realizowane przy pomocy encji pośrednich (w modelu relacyjnym są to tabele sprzęgające) powiązanych z encjami pierwotnymi przy pomocy powiązań jeden do wielu. W powiązaniu wiele-do-wiele encjami głównymi są encje pierwotne, natomiast encją obcą jest relacja sprzęgająca, która zwiera klucze główne relacji oryginalnej. Dlatego w powiązaniu jeden-do-wiele pomiędzy relacjami pierwotnymi a relacją obcą, po stronie relacji oryginalnej znajduje się strona „jeden” powiązania jeden-do-wiele, a po stronie relacji obcej znajduje się strona „wiele” z tego powiązania. Związki wiele-do-wiele nie są bezpośrednio implementowane w relacyjnych bazach danych i wymagają dodatkowych przekształceń. Rys. 3. Związek wiele-do-wielu Związki unarne Powiązania tego typu mają tylko jednego uczestnika, czyli relację, która jest powiązana sama ze sobą. Powiązanie realizowane jest w podobny sposób jak w przypadku powiązań binarnych, ale odnosi się do jednej encji. Klucz główny tej encji jest dodawany do tej encji. Rys. 4. Związek unarny Powiązania unarne tak jak powiązania binarne mogą być różnej mocy. To znaczy mogą występować powiązania jeden do wielu, które mogą być opcjonalne po stronie „jeden”. Ten typ powiązania jest stosowany przy odwzorowywaniu struktur hierarchicznych. Powiązania unarne mogą być również realizowane jako powiązania wiele do wielu. Wtedy, podobnie jak przy powiązaniach binarnych, muszą być modelowane przy użyciu tabeli sprzęgającej. Związki ternarne Są to powiązania, w skład których wchodzą trzy związane ze sobą encje. Powiązania te, podobnie jak powiązania wiele-do-wiele, nie mogą być realizowane bezpośrednio w relacyjnych bazach danych. Strona 5/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Rys. 5. Związek ternarny Związki ternarne nie są bezpośrednio implementowane w relacyjnych bazach danych i wymagają dodatkowych przekształceń. Notacje związków W praktyce spotkasz się z różnymi sposobami reprezentacji graficznej związków (dla przykładu: w programach służących m.in. do projektowania diagramów ERD takich jak Visio lub IBM Rational Rose możliwe jest użycie kilku różnych notacji). Bodaj najpopularniejsza jest notacja czysto graficzna. Metody przekształcania związków Związki binarne wiele-do-wiele oraz związki ternarne nie są implementowane w relacyjnych bazach danych. Przed zamodelowaniem ich w bazie relacyjnej wymagają one pewnych przekształceń. Przykłady takich przekształceń zaprezentowane są poniżej Przekształcanie związków wielo-wieloznacznych Jeśli mamy związek binarny wielo-wieloznaczny, to należy wprowadzić dodatkową encję oraz dwa nowe związki jednoznaczne. Nowa encja powinna wśród atrybutów zawierać klucze obce odnoszące się do kluczy głównych dwóch pozostałych encji. Rys. 6. Przekształcanie związków binarnych wielo-wieloznacznych Przekształcanie związków ternarnych Przy przekształcaniu związków ternarnych postępujemy podobnie jak w wypadku związków wielowieloznacznych binarnych. Wprowadzamy wówczas dodatkową encję oraz 3 nowe związki jednoznaczne. Strona 6/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Rys. 7. Przekształcanie związków ternarnych Podobnie postępujemy, jeśli mamy do czynienia ze związkami o większej liczbie argumentów. Podsumowanie W tym rozdziale przedstawione zostało podejście do modelowania konceptualnego bazy danych z wykorzystaniem techniki zwanej diagramami związków encji. Dowiedziałeś się, czym jest encja, jakie posiada cechy oraz czym jest związek encji. Pamiętaj, że nie wszystkie typy związków encji są bezpośrednio implementowane w relacyjnej bazie danych. Związki typu wiele do wielu oraz związki więcej niż dwu encji wymagają przekształcenia modelu konceptualnego do postaci dającej się implementować w modelu relacyjnym. Przekształcenie to polega zazwyczaj na wprowadzeniu dodatkowej encji i dodaniu nowych związków. Projektując bazę danych warto zawsze rozpocząć modelowanie danych od diagramów ERD. Diagramy takie powinny przede wszystkim, w pierwszym etapie projektowania, odzwierciedlać w możliwie przejrzysty sposób dane i zależności występujące w świecie rzeczywistym – na przykład obiekty biznesowe i zależności między nimi. W pierwszym etapie diagram ERD pokazuje więc często związki wiele do wielu oraz związki wieloencyjne (rzadziej). Kolejne kroki prowadzą do przekształcania takiego diagramu aż do postaci modelu zgodnego z modelem relacyjnym. Przykładowe rozwiązanie Przypomnijmy problem z początku tego rozdziału dotyczący przygotowania bazy danych ułatwiającej zarządzanie przydziałem sal i zajęć na wydziale uczelni. Naszym celem jest przygotowanie modelu danych, który będzie spełniał dwa podstawowe cele: • pozwalał zweryfikować wymagania stawiane przez panią Jolę oraz • stanowił podstawę do zbudowania relacyjnej bazy danych. Jak widać musimy posłużyć się językiem wyrazu zrozumiałym zarówno dla osoby niemającej wykształcenia czy tez doświadczenia informatycznego jak i przydatnym dla informatyka budującego bazę danych. Jaki środek wyrazu, język wybrać? Dosyć powszechny jest tutaj pogląd, że takim uniwersalnym środkiem wyrazu spełniającym stawiane przed nami wymagania jest język obrazkowy – diagramy związków encji. Sformułujmy więc teraz cel naszych działań w następujący sposób: Naszym zadaniem jest opracowanie diagramu związków encji, który będzie jednoznacznie i przejrzyście przedstawiał wymagania pani Joli w zakresie przetwarzanych przez nią danych oraz umożliwiał zbudowanie na jego podstawie relacyjnej bazy danych. Strona 7/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Przypominamy, że diagram związków encji powstaje w sposób iteracyjny. Wynikiem naszych prac powinien być nie jeden diagram, ale zestaw diagramów przedstawiający nasz problem na różnych poziomach abstrakcji (np. z różną liczbą szczegółów). Spróbujemy teraz przedstawić w punktach nasze działania. Co więc i w jakiej kolejności powinniśmy wykonać? Krok 1 Powinniśmy uważnie wysłuchać, co ma do powiedzenia ekspert dziedzinowy, czyli pani Jola. Na podstawie zebranych informacji możemy zidentyfikować i wypisać encje występujące w naszym problemie. Dobrym zwyczajem jest też wypisanie kilku przykładowych instancji encji dla każdej ze zidentyfikowanych encji. Krok 2 Powinniśmy zidentyfikować związki występujące między encjami. Dobrze jest nazwać te związki i określić role, jakie w nich odgrywają poszczególne encje. Koniecznie powinniśmy też zidentyfikować liczności związków. Krok 3 Powinniśmy wykonać pierwszy rysunek diagramu związków encji, na którym zamieszczamy: • nazwa encji, • związki między encjami, • liczności związków. Warto też umieścić na nim nazwy związków i nazwy ról. Często jednak dla zachowania przejrzystości rysunku rezygnujemy z umieszczania na diagramie ERD tych informacji. UWAGA: Diagram związków encji będący wynikiem kroku 3 jest często w postaci nieznormalizowanej i nierealizowalnej w bazie relacyjnej (np. przedstawia związki wiele do wielu). Na tym etapie najczęściej nie należy dokonywać przekształceń tego diagramu. Krok 4 Diagram z kroku 3 powinniśmy skonsultować z ekspertem dziedzinowym. Na tym etapie diagram ERD nie zawiera zbyt wiele szczegółów, jest więc prosty i przejrzysty. Pozwoli nam to na upewnienie się, że dobrze zrozumieliśmy stawiane przez eksperta wymagania dotyczące przetwarzanych danych oraz umożliwi dokonanie niezbędnych poprawek i uzupełnień już na tym wstępnym etapie. Krok 5 Rozpoczynamy identyfikowanie atrybutów dla każdej z przedstawionych na diagramie encji. Powinniśmy zidentyfikować wszystkie atrybuty, które są wykorzystywane w procesach opisywanych przez eksperta dziedzinowego – czyli tak zwane atrybuty biznesowe. Nie wszystkie ze zidentyfikowanych na tym etapie atrybutów muszą znaleźć swoje odzwierciedlenie w końcowym projekcie bazy danych. Na przykład: na pewnym wydziale po drugim roku studiów dokonywany jest przez studenta wybór specjalizacji dalszych studiów. O klasyfikacji na specjalizację decyduje, w wypadku braku miejsc, średnia ocen uzyskanych przez studenta z pierwszych czterech semestrów studiów. Dla osoby opisującej proces klasyfikacji studentów na specjalizację istotnym atrybutem każdego studenta jest jego średnia z pierwszych czterech semestrów nauki. Powinniśmy dla encji Student zidentyfikować atrybut biznesowy srednia_z_czterech_semestrow. W trakcie kolejnych iteracji budowy diagramu ERD możemy zdecydować, że nie będziemy przechowywać w bazie tej średniej, ale wyliczać ją, gdy będzie potrzebna, na podstawie ocen cząstkowych. Strona 8/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Krok 6 Diagram z kroku 5 powinniśmy skonsultować z ekspertem dziedzinowym. Krok 7 Dla każdego atrybutu powinniśmy zidentyfikować i zapisać jego dziedzinę. Pamiętaj, że dziedzina atrybutu to nie to samo, co jego typ. Dziedzina związana jest z wyższym poziomem abstrakcji modelu i dotyczy wartości, które może przyjmować atrybut wynikających z modelu biznesowego procesu. Typ natomiast związany jest z niższym poziomem abstrakcji modelu i dotyczy reprezentacji danych w silniku bazy danych. Na przykład dziedziną dla atrybutu Ocena może być zbiór { 2; 3; 3,5; 4; 4,5; 5 }, a typem tego atrybutu Integer. Krok 8 Diagram lub tabelę z kroku 7 powinniśmy skonsultować z ekspertem dziedzinowym. Krok 9 Po zaakceptowaniu diagramu związków encji przez eksperta dziedzinowego możemy przystąpić do normalizacji, określenia kluczy głównych i kluczy obcych, dokonać zmian atrybutów (na przykład dodać atrybuty sztuczne) oraz przekształcenia związków nierealizowalnych w modelu relacyjnym (np. zamiana związków wiele do wielu na związki jedne do wielu). Krok 10 Proponujemy aby w tym kroku określić typy wszystkich atrybutów uwzględniając typy silnika bazy danych, na której będzie realizowana baza danych, zdefiniować niezdefiniowane jeszcze klucze główne i klucze obce oraz wskazać pola indeksowane. Na zakończenie powinniśmy dokonać przeglądu diagramu ERD pod kątem jego spójności i kompletności. W naszym wypadku zadanie jest dosyć proste, gdyż problem, z którym mamy do czynienia nie jest skomplikowany. Przystępujemy więc do kolejnych kroków budowy diagramu ERD. Krok 1 Po spotkaniu z panią Jolą identyfikujemy trzy encje: Sala, Zajecia i Grupa. Przygotowujemy też zestawienie przykładowych instancji encji. Tabela 1. Zestawienie instancji encji Encja Sala Przykład encji instancji 110 C155 Zajęcia Grupa Bazy danych – wykład 101 Bazy danych laboratorium A001 – 112 203 Podstawy informatyki 315c Programowanie obiektowe Krok 2 Identyfikujemy związki: Tabela 2. Liczności związków Nazwa związku Encje Liczności Zajecia_w_Sali Sala, Zajęcia Wiele do jeden (*..1) Grupa_na_zajeciach Grupa, Zajęcia Wiele do wiele (*..*) Strona 9/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Krok 3 Przedstawiamy diagram ERD z uwzględnieniem związków i ich liczności. Rys. 8. Diagram ERD z uwzględnieniem związków i ich liczności Krok 4 Pani Jola po obejrzeniu naszego diagramu zauważa, że mogą być zajęcia, które w danym semestrze nie odbywają się, ale znajdują się w katalogu zajęć (np. przedmiot obieralny, który nie został w danym semestrze wybrany przez wystarczającą liczbę chętnych). Nie są one przypisane do żadnej sali ani do grupy studentów. Dostrzegamy też błąd polegający na początkowym przypisaniu do konkretnej sali tylko jednych zajęć. Oczywiście na taki luksus żaden wydział nie może sobie pozwolić. Zamieniamy liczność związku Zajęcia_w_Sali na wiele do wielu. Uwagę tę powinniśmy uwzględnić na naszym diagramie ERD. Wprowadzamy stosowną poprawkę na diagramie. Rys. 9. Diagram ERD po uwzględnień poprawy liczności związku Krok 5 Przystępujemy do identyfikacji atrybutów. Wygodnie jest informacje o atrybutach zebrać w tabeli podając jednocześnie przykład wartości atrybutu. Tabela 3. Przykładowe wartości atrybutów Encja Atrybut Przykład Sala Numer Sali C101 Liczba miejsc 120 Zajecia Nazwa zajęć Bazy danych – wykład Grupa Nazwa grupy 112 Liczność 35 Na diagramie ERD: Rys. 10. Diagram ERD z zaznaczonymi atrybutami Strona 10/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Krok 6 Pokazujemy nasz diagram ERD pani Joli. Jeśli zostanie on zaakceptowany, przechodzimy do kroku siódmego. Krok 7 Powinniśmy teraz określić dla każdego atrybutu jego dziedzinę. Najwygodniej będzie nam to wykonać znowu w postaci tabelki takiej jak tabela xxx uzupełnionej o kolumnę Dziedzina atrybutu. Tabela 4. Dziedziny atrybutów Encja Atrybut Przykład Dziedzina atrybutu Sala Numer sali C101 Ciąg składający się z litery reprezentującej budynek oraz co najwyżej czterech cyfr Liczba miejsc 120 Przedział od 15 do 250 Zajecia Nazwa zajęć Bazy danych – wykład Lista zajęć Grupa Nazwa grupy 112 Ciąg składający się z 3 lub 4 cyfr i/lub litery Liczność 35 Przedział od 12 do 40 Krok 8 Powinniśmy znowu skonsultować wyniki naszej pracy z panią Jolą. Jeśli uzyskamy akceptację, możemy przejść do kroku dziewiątego. W przeciwnym razie nanosimy poprawki i ponownie prosimy o akceptację. Krok 9 Jeśli dobrnęliśmy aż tutaj, to oznacza, że zakończyliśmy konsultację z panią Jolą i możemy przystąpić do prac zmierzających do nadania naszemu modelowi postaci dającej się zaimplementować w relacyjnej bazie danych. W naszym diagramie ERD występują związki wiele do wiele. Są to związki nieimplementowane bezpośrednio w modelu relacyjnym, dlatego musimy dokonać ich przekształcenia. Wprowadzamy nowe encje ObciazenieSali i ZajeciaGrupy tak jak na rysunku. Rys. 11. Diagram ERD Strona 11/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Informację na diagramie możemy uzupełnić o typy danych, tak jak przedstawiamy to na Rys. 12. Diagram ERD z typami danych Sala PK ID_Sala uniqueidentifier Numer sali Liczba miejsc varchar(6) uniqueidentifier Grupa PK Zajecia PK ID_Zajecia uniqueidentifier Nazwa zajęć varchar(255) ID_Grupa uniqueidentifier Nazwa grupy Liczność char(10) smallint ObciazenieSali PK,FK1 PK,FK2 ZajeciaGrupy ID_Sala ID_Zajecia int int Dzien GodzinaOd GodzianDo char(10) char(10) char(10) PK,FK1 PK,FK2 ID_Zajecia ID_Grupa int int Rys. 12. Diagram ERD z typami danych Krok 10 W ostatnim kroku dokonujemy przeglądu naszego modelu ERD. Rzadko kiedy pierwsze podejście będzie całkowicie wolne od błędów, pomyłek czy niedopatrzeń, dlatego zawsze należy przeprowadzić weryfikację poprawności diagramu. Porady praktyczne • Pamiętaj, że diagram związków encji ma być zrozumiały nie tylko dla informatyka. Ma on służyć dialogowi między projektantem a użytkownikiem, który formułuje wymagania dla przyszłej bazy danych. Modelując dane należy posługiwać się jasnym, prostym i przejrzystym językiem i formami wyrazu. • Budując diagram związków encji nie spiesz się. Nie dokonuj zbyt pochopnie przekształceń i nie wprowadzaj od razu zbyt wielu szczegółów, nawet jeśli przekształcenia wydają Ci się oczywiste, a definiowanie typów danych czy określanie kluczy natychmiastowe. Pamiętaj, że kluczowym elementem budowanych diagramów jest ich czytelność i zrozumiałość dla osoby definiującej wymagania, czyli tak zwanego eksperta dziedzinowego (w każdym razie w początkowych etapach tworzenia diagramów ERD). • Przy identyfikowaniu encji bardzo zachęcamy do tego, aby zawsze wypisać kilka przykładów instancji encji. Podejście to pozwala na lepsze zrozumienie świata rzeczywistego i weryfikację poprawności identyfikacji encji. Nazwa encji często nie oddaje jej istoty i może być różnie rozumiana przez różne osoby biorące udział w budowaniu modelu danych. Szybko docenisz tę technikę podczas dialogu z przyszłym użytkownikiem bazy, który z pewnością będzie lepiej rozumiał prezentowane przez Ciebie modele. • Rysowanie diagramów związków encji najlepiej zacząć od rysowania na dużej kartce papieru lub tablicy. Dopiero pod koniec (krok 9) warto jest przenieść diagramy związków encji do narzędzia wspomagającego pracę z diagramami ERD. Narzędzi takich jest wiele. My proponujemy wykorzystać do tego celu program MS Visio – znany i wygodny program do rysowania wyposażony w specjalny moduł wspomagający projektowanie baz danych. • Zwracamy uwagę, że w teorii relacyjnych baz danych pod pojęciem relacji rozumie się dwuwymiarową tabelę danych. Tabele te odpowiadają na etapie projektowym pojęciu encji, natomiast powiązania między tabelami (encjami) noszą nazwę związków. W niektórych aplikacjach i w żargonie informatycznym słowo relacja ma jednak czasem inne znaczenie Strona 12/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD i oznacza powiązanie między tabelami (encjami), czyli związek. Takie nazewnictwo stosowane jest na przykład w polskich wersjach aplikacji firmy Microsoft. • Ostateczny projekt bazy danych zależy w istotnym stopniu od zwyczajów i upodobań projektanta. Modele ERD bazy danych zbudowane dla tego samego problemu mogą się różnić. Nie zawsze potrafimy jednoznacznie wskazać, który z modeli jest lepszy. Często są one po prostu jednakowo dobre. • Zwróć uwagę, że notacja proponowana przez nas w tym module nie jest jedyną notacją stosowaną przy modelowaniu danych. Popularność zyskuje modelowanie baz danych z wykorzystaniem języka UML. Modelowanie w języku UML bazuje na podejściu obiektowym do analizy i projektowania systemów. Choć założenia, na których opiera się modelowania diagramami ERD i językiem UML są inne, to jednak ogólna droga postępowania jest bardzo podobna. Jeśli znasz język UML i zasady modelowania obiektowego, to do projektowania baz danych możesz zamiast diagramów ERD wykorzystać diagramy klas języka UML. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium, jeśli: • rozumiesz, czym jest encja i związek między encjami, • rozumiesz, na czym polega proces dochodzenia do końcowego diagramu związków encji, • umiesz dokonać przekształcenia związków nieimplementowanych w relacyjnych bazach danych do związków binarnych jednoznacznych, • potrafisz przedstawić diagram ERD na różnym poziomie abstrakcji, • wiesz, jakie jest znaczenie słowa relacja w teorii relacyjnych baz danych i w żargonie informatycznym. Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Rebeca R. Riordan, Projektowanie relacyjnych baz danych, Microsoft Press, 2000 Książka poświęcona jest praktycznym aspektom projektowania relacyjnych baz danych w środowisku aplikacji firmy Microsoft. Znajdziesz w niej między innymi przegląd modeli normalizacyjnych, których nie omawialiśmy w tym module bezpośrednio. Rebeca Riordan znana jest z łatwego i zrozumiałego języka i łatwości tłumaczenia zagadnień trudnych. Ten swój talent wykorzystuje również w tej pozycji. Jeśli nie interesuje Cię zgłębianie teoretycznych podstaw działania baz danych, a bardziej nastawiony jesteś na praktyczne wykorzystanie wiedzy, to jest to książka dla Ciebie. 2. C.J.Date, Wprowadzenie do systemów baz danych, WNT, 2000 Jest to pełny podręcznik do wykładu z baz danych znanego i cenionego na całym świecie autora. Znajdziesz w nim szersze spojrzenie na problematykę budowy i modelowania baz danych. Polecamy ją wszystkim, którzy chcieliby poszerzyć swoje wiadomości z tego zakresu. 3. System pomocy programu Visio Jeśli po raz pierwszy spotykasz się z programem Visio, to zajrzyj koniecznie do jego systemu pomocy. Znajdziesz tam wszystkie niezbędne informacje, aby efektywnie korzystać z tego oprogramowania. Strona 13/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Laboratorium podstawowe Problem (czas realizacji 40 min) Jesteś projektantem bazy danych. W wyniku spotkań z ekspertem dziedzinowym dzied (przyszłym użytkownikiem bazy) opracowałeś model diagramu związków encji opisany w rozdziale Przykładowe rozwiązanie.. Model i wszystkie dodatkowe dane (np. tabele) zostały zapisane jedynie na papierze. Teraz warto jest przenieść tę dokumentację „do komputera”. Umożliwi to łatwiejszą archiwizację modelu, wprowadzanie zmian i wymianę informacji między członkami zespołu. Dodatkowo może też skrócić czas projektowania bazy danych dzięki wykorzystaniu narzędzi RAD (ang. Rapid Application Design). Design Jako aplikację ikację wspomagającą prace na tym etapie budowy modelu bazy danych wybrana została aplikacji MS Viso 2007. Twoim zadaniem będzie utworzenie przy pomocy tego programu modelu danych i diagramu ERD zgodne z wymaganiami „papierowymi”. Zadanie Tok postępowania 1. Uruchom projekt bazy danych w programie MS Visio 2007 • Uruchom aplikację MS Visio 2007. 2007 • Z panelu Wprowadzenie do programu Microsoft Office Visio wybierz grupę Diagram modelu bazy danych. 2. Wprowadź tabele • W obszarze roboczym wyłącz linie siatki wybierając polecenie Widok -> Siatka. • Z zasobnika Model encja-relacja przeciągnij element Encja na obszar roboczy (kartka). Na obszarze roboczym zostanie utworzona encja o nazwie Tabela1. • Zaznacz encję Tabela1. W oknie Właściwości bazy danych wskaż element Definicja, a następnie w polu Nazwa koncepcyjna wprowadź tekst Sala. Nazwa encji na obszarze roboczym powinna zmienić się na Sala. • Powtórz powyższe czynności dla pozostałych encji w modelu. Rys. 13.. Fragment okna programu Visio Strona 14/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych 3. Wprowadź atrybuty Budowa diagramów ERD • • • • Zaznacz encję Sala. W oknie Właściwości bazy danych zaznacz element Kolumny. W kolumnie Nazwa fizyczna wprowadź Numer_Sali. Numer_Sali Na dole okna Właściwości bazy danych upewnij się, że zaznaczony jest wybór Fizyczny typ danych (Microsoft SQL Server). Server) Jeśli wyświetlany jest inny sterownik wybierz z menu Baza danych -> - Opcje -> Sterowniki, a w oknie Sterowniki bazy danych z karty Sterowniki sterownik Microsoft SQL Server. Server • jako typ danych dla kolumny Numer_Sali wybierz varchar(6), wskaż to pole jako wymagane, a w uwagach wpisz: Numer sali; litera oznacza symbol budynku. budynku Sprawdź w systemie pomocy co oznacza typ danych varchar(6). Czy zgadzasz się z takim wyborem typu dla pola Nazwa_Sali? Nazwa_Sali Sprawdź, co stanie się po zmianie wyboru na Pokaż: Przenośny typ danych? • Wprowadź pozostałe kolumny tabeli Sala.. Wskaż, że kolumna ID_Sala jest kluczem głównym w tej tabeli. Wprowadź atrybuty pozostałych tabel. Pamiętaj o wskazaniu, które kolumny stanowią klucz kluc główny oraz które wartości są wymagane. 4. Zmień widok dokumentu Program MS Visio pozwala na przestawienie modelu ERD z różnym zestawem informacji (np. można ukryć lub pokazać typy danych, oznaczenia kluczy głównych itd.). • Przejdź do menu Baza danych -> Opcje -> Dokument i w karcie Opcje dokumentu bazy danych wypróbuj różne ustawienia wyświetlania modelu ERD. Jakie opcje należy wybrać, aby na diagramie były widoczne typy danych zdefiniowane w oknie Właściwości bazy danych dla poszczególnych atrybutów? 5. Dodaj związki między encjami • Z zasobnika Model encja-relacja przeciągnij element Relacja na obszar roboczy (kartka). Na obszarze roboczym zostanie utworzona relacja. Przeciągnij końce relacji odpowiednio na encje Sala i ObciazenieSali, tak aby uzyskać zakotwiczenie relacji (jeśli następuje zakotwiczenie, zakotwiczeni to program wyróżnia encję czerwonym obramowaniem). obramowaniem) • Wskaż utworzoną relację. W oknie Właściwości bazy danych wskaż kategorię Nazwa. W pola Fraza orzeczenia, Fraza odwrotna, odwrotna Nazwa fizyczna i Uwagi wpisz odpowiednie Twoim zdaniem wartości. • Przejdź do kategorii kate Różne.. Sprawdź, jaki wpływ na diagram ma wybór różnych opcji kardynalności (liczności). Ustaw prawidłowe Twoim zdaniem kardynalności dla tej relacji. • Zdefiniuj pozostałe związki między encjami. Co należy zrobić, aby w widoku roboczym nie były wyświetlane wyświe związki? 6. Zmiana notacji diagramu • Wybierz z menu Baza danych -> Opcje -> Dokument i na karcie Relacja zmień zaznaczenie opcji Kurze łapki.. Zaobserwuj zmiany notacji na diagramie ERD. 7. Zapisz model • Zapisz model w odpowiednim pliku na dysku. Strona 15/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Laboratorium rozszerzone Zadanie 1 (czas realizacji 45 min) W pewnej uczelni (jeśli nie w każdej) student kończący pewien etap edukacji musi wykonać i obronić pracę końcową zwaną pracą dyplomową. Praca dyplomowa realizowana jest na koniec każdego etapu studiów. Tak więc prace dyplomową piszą studenci studiów licencjackich, inżynierskich i magisterskich. W przyszłości uczelnia planuje poszerzyć swoją ofertę studiów o nowe rodzaje studiów, które też będą kończyć się pracą dyplomową. Każdy student oprócz imienia i nazwiska ma przypisany na uczelni jednoznaczny identyfikator w postaci numeru indeksu. Numer indeksu jest ciągiem złożonym z 10 znaków i w sposób jednoznaczny identyfikuje studenta studiującego na uczelni. Student chcąc ukończyć dany rodzaj studiów musi wybrać temat pracy dyplomowej. Z tematem pracy związany jest oczywiście jej opiekun zwany zazwyczaj promotorem pracy. Zasadą jest, że jeden temat kierowany jest przez jednego promotora – pracownika uczelni ze stopniem doktora, doktora habilitowanego lub profesora. Władze uczelni zachęcają swoich studentów do pisania prac indywidualnych. Ale dopuszczają również możliwość realizacji prac przez dwóch lub trzech studentów. Więcej osób nie może pisać jednej pracy dyplomowej. Po napisaniu praca podlega recenzji. Recenzja wykonywana jest przez jednego lub kilku pracowników uczelni i oceniana. Każdy recenzent może ocenić pracę w skali od 2 do 5. Praca oceniana jest również przez promotora. Do pracy przyporządkowywane są pewne słowa ze z góry zdefiniowanego zbioru. Są to tak zwane słowa kluczowe, które pozwalają przypisać tematykę pracy do określonego obszaru, a następnie odnajdywać prace związane z podobną tematyką. Słowami kluczowymi mogą być: informatyka, systemy operacyjne, konstrukcje żelbetowe itp. Każda praca powinna mieć przypisane co najmniej jedno słowo kluczowe. Po napisaniu pracy student przystępuje do obrony pracy. Obrona ta odbywa się w wyznaczonym dniu i kończy się wystawieniem pracy dyplomowej końcowej, ostatecznej oceny. Uczelnia chciałaby usprawnić obsługę prac dyplomowych i związanych z tym procesów. Dlatego planuje opracować system informatyczny wspierający obsługę tych procesów. Pierwszym etapem prac ma być zbudowanie bazy danych, która będzie spełniać następujące wymagania: 1. Umożliwi przechowywanie informacji o obronionych pracach dyplomowych wszystkich studentów uczelni. 2. Umożliwi szybkie i łatwe wyszukiwanie prac związanych z daną tematyką lub prowadzonych przez określonego promotora. 3. Umożliwi raportowanie o pracach dyplomowych: • recenzowanych przez pracowników uczelni, • obronionych w danym dniu, miesiącu, roku, • obronionych na danym rodzaju studiów. Zaproponuj diagram ERD dla projektowanej bazy danych. Pamiętaj również o udokumentowaniu przykładowych instancji encji oraz wartości atrybutów, tak jak robiliśmy to w przykładowym rozwiązaniu w krokach piątym i siódmym. Model zapisz w pliku programu MS Visio. Zadanie 2 (czas realizacji 45 min) Wymagania z zadania 1 okazały się niewystarczające. Nasz ekspert dokonał przeglądu wymagań i dodał uzupełnienia. W poniższym tekście zostały one uwydatnione. Strona 16/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD Zaproponuj diagram ERD dla projektowanej bazy danych po uwzględnieniu rozszerzeń. Pamiętaj również o udokumentowaniu przykładowych instancji encji oraz wartości atrybutów, tak jak robiliśmy to w przykładowym rozwiązaniu w krokach piątym i siódmym. Model zapisz w pliku programu MS Visio. W pewnej uczelni (jeśli nie w każdej) student kończący pewien etap edukacji musi wykonać i obronić pracę końcową zwaną pracą dyplomową. Uczelnia składa się kilku wydziałów. Na każdym wydziale studenci mogą być kształceni na różnych specjalizacjach, a informacja o wydziale i specjalizacji jest istotna przy wykonywaniu sprawozdań uczelni z obronionych prac dyplomowych. Praca dyplomowa realizowana jest na koniec każdego etapu studiów. Tak więc prace dyplomową piszą studenci studiów licencjackich, inżynierskich i magisterskich. W przyszłości uczelnia planuje poszerzyć swoją ofertę studiów o nowe rodzaje studiów, które też będą kończyć się pracą dyplomową. Każdy student oprócz imienia i nazwiska ma przypisany na uczelni jednoznaczny identyfikator w postaci numeru indeksu. Numer indeksu jest ciągiem złożonym z 10 znaków i w sposób jednoznaczny identyfikuje studenta studiującego na uczelni. Student chcąc ukończyć dany rodzaj studiów musi wybrać temat pracy dyplomowej. Z tematem pracy związany jest oczywiście jej opiekun zwany zazwyczaj promotorem pracy. Zasadą jest, że jeden temat kierowany jest przez jednego promotora – pracownika uczelni ze stopniem doktora, doktora habilitowanego lub profesora. Władze uczelni zachęcają swoich studentów do pisania prac indywidualnych. Ale dopuszczają również możliwość realizacji prac przez dwóch lub trzech studentów. Więcej osób nie może pisać jednej pracy dyplomowej. Po napisaniu praca podlega recenzji. Recenzja wykonywana jest przez jednego lub kilku pracowników uczelni i oceniana. Każdy recenzent może ocenić pracę w skali od 2 do 5. Praca oceniana jest również przez promotora. Ocena recenzenta i promotora nie może być zbiorczą oceną pracy, ale musi osobno dotyczyć każdego z autorów pracy. Do pracy przyporządkowywane są pewne słowa ze z góry zdefiniowanego zbioru. Są to tak zwane słowa kluczowe, które pozwalają przypisać tematykę pracy do określonego obszaru, a następnie odnajdywać prace związane z podobną tematyką. Słowami kluczowymi mogą być na przykład: informatyka, systemy operacyjne, konstrukcje żelbetowe. Każda praca powinna mieć przypisane co najmniej jedno słowo kluczowe. Po napisaniu pracy student przystępuje do obrony pracy. Obrona ta odbywa się w wyznaczonym dniu przed komisją składającą się z 3 członków oraz przewodniczącego i kończy się wystawieniem ostatecznej oceny każdemu studentowi osobno. W czasie egzaminu każdemu studentowi są zadawane i protokołowane trzy pytania. Każde z pytań podlega osobnej ocenie. Uczelnia chciałaby usprawnić obsługę prac dyplomowych i związanych z tym procesów. Dlatego planuje opracować system informatyczny wspierający obsługę tych procesów. Pierwszym etapem prac ma być zbudowanie bazy danych, która będzie spełniać następujące wymagania: 1. Umożliwi przechowywanie informacji o obronionych pracach dyplomowych wszystkich studentów uczelni. 2. Umożliwi szybkie i łatwe wyszukiwanie prac związanych z daną tematyką, wydziałem, specjalizacją lub prowadzonych przez określonego promotora. 3. Umożliwi raportowanie o pracach dyplomowych: • recenzowanych przez pracowników uczelni • obronionych w danym dniu, miesiącu, roku • obronionych na danym rodzaju studiów Strona 17/18 W.Dąbrowski, P.Kowalczuk, K.Markowski Moduł 1 ITA-101 bazy danych Budowa diagramów ERD 4. Umożliwić szybkie sprawdzenie przebiegu obrony pracy dyplomowej danego studenta, w tym zadanych pytań i składu komisji. Strona 18/18 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 2 Wersja 2.0 Instalacja i konfiguracja Microsoft SQL Server 2008 Spis treści Instalacja i konfiguracja MS SQL Server 2008 ...................................................................................... 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 6 Porady praktyczne ..................................................................................................................... 10 Uwagi dla studenta .................................................................................................................... 11 Dodatkowe źródła informacji..................................................................................................... 11 Laboratorium podstawowe ................................................................................................................ 12 Laboratorium rozszerzone ................................................................................................................. 16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Informacje o module Opis modułu W tym module znajdziesz informację o podstawowych zadaniach administratora systemu bazodanowego. Do zadań tych należy instalacja serwera baz danych, konserwacja oraz aktualizacji serwisów serwera. Prawidłowe przygotowanie środowiska pracy zapewni stabilność oraz pozwoli na poznanie systemu bazodanowego od podstaw. Cel modułu Celem modułu jest przedstawienie czytelnikowi typowych zagadnień związanych z instalacją i konfiguracją serwera bazodanowego. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • potrafił zaplanować instalację systemu bazodanowego • potrafił przeprowadzić instalację SQL Server 2008 za pomocą centrum instalacji • wstępne opcje dotyczące bezpieczeństwa serwera • rozumiał czym są serwisy serwera SQL i jakie mają funkcje • wiedział, jak skonfigurować poszczególne serwisy serwera SQL Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • wiedzieć, jak używać oprogramowania Microsoft Virtual PC • znać podstawy obsługi systemu Windows 2000 lub nowszego • rozumieć, jak przebiega instalacja oprogramowania w systemie Windows Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na rys. 1, nie istnieje konieczność wykonania wcześniej żadnego innego modułu. Rys. 1 Mapa zależności modułu Strona 2/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Przygotowanie teoretyczne Przykładowy problem Wdrożenie nowego systemu bazodanowego nie jest procesem trywialnym. W pierwszej kolejności wykonywana jest analiza potrzeb organizacji w zakresie gromadzenia i przetwarzania informacji. Następnie można wybrać konkretny system z użytecznymi komponentami. Instalacja systemu, testy wydajnościowe i integracja z istniejącymi składnikami IT organizacji to niezbędne kroki wdrożenia, przeważnie oddelegowane do doświadczonego informatyka. Typowym scenariuszem jest pojawienie się potrzeby przetwarzania coraz większych ilości informacji w małej firmie, która w związku z dogodnymi warunkami na rynku przeżywa dynamiczny rozwój. Obsługa rosnącej liczby klientów przysparza coraz więcej kłopotów, głównie działowi analiz. Na kolejnym zebraniu pada propozycja wdrożenia nowego systemu bazodanowego opartego na technologii Microsoft SQL Server 2008, który pomoże usprawnić procesy związane z obróbką coraz większej ilości danych o klientach, co potencjalnie przełoży się na jakość obsługi i przyszłe zyski. Sygnał i wsparcie finansowe od strony biznesowej jest motorem procesu wdrożenia systemu bazodanowego przedstawionego w tym module. Podstawy teoretyczne Właściwie każde oprogramowanie określane mianem serwera (serwer WWW, serwer baz danych) działa na podobnej zasadzie – opiera się na uruchomionych w systemie operacyjnym usługach. Od konfiguracji tych usług zależy, czy i jak będzie funkcjonował serwer. Instalacja Aby móc cokolwiek konfigurować, w pierwszej kolejności należy dokonać instalacji tego składnika. Podstawowym składnikiem, czyli usługą systemu bazodanowego, jest silnik (ang. Database Engine), odpowiadający za niskopoziomowe przewarzanie danych. Element ten znajdziemy w każdym systemie bazodanowym, choć różnie może się nazywać. Wszystkie inne elementy bezpośrednio lub pośrednio korzystają z silnika i w przypadku jego braku lub uszkodzenia po prostu nie działają. Sam silnik jest jednak bardzo niewygodny w obsłudze z punktu widzenia użytkownika serwera bazodanowego. W tej sytuacji powstało wiele innych komponentów, które uzupełniają i usprawniają pracę z takim systemem. Narzędzia graficzne do obsługi i administracji serwera (ang. Client Tools) są szczególnie pomocne dla administratorów. Serwis analityczny (ang. Analysis Services) jest nieoceniony przy przetwarzaniu dużej ilości danych. Serwis raportujący (ang. Reporting Services) usprawnia i uatrakcyjnia prezentację analizowanych danych. W celu integracji czynności instalacyjnych tych i innych komponentów serwera SQL administrator do dyspozycji ma narzędzie o nazwie Centrum Instalacji przedstawione na rys. 2. Strona 3/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Rys. 2 Nowe Centrum Instalacji Z tego miejsca można dokonać instalacji nowej instancji serwera SQL (w jednym systemie może być wiele wystąpień serwera bazodanowego), zmodyfikować komponenty serwera, zainstalować przykładowe bazy danych lub poczytać dokumentację. Instalacja nowej instancji serwera SQL wiąże się zawsze z kilkoma etapami: 1. Określenie komponentów serwera, które będziemy instalować. 2. Określenie miejsca w systemie operacyjnym, gdzie komponenty będą składowane. 3. Podanie kont systemowych potrzebnych do uruchomienia poszczególnych usług serwera. Po zakończeniu procesu instalacji powinniśmy przejrzeć i skonfigurować nowe usługi bazodanowe, które pojawiły się w naszym systemie operacyjnym. Usługa serwera Silnik Silnik serwera bazodanowego, odpowiedzialny za przechowywanie danych, utrzymywanie spójności danych i obsługę poleceń języka zapytań najczęściej jest tożsamy z główną usługą serwera. Aby użytkownicy mogli stale korzystać z tej usługi, powinna być ona uruchomiona praktycznie zawsze (nie licząc czasu na ewentualne prace administracyjne, wymagające przejścia serwera w tryb offline). Dodatkowo, ponieważ niektóre czynności wymagają restartu samej maszyny, usługa ta powinna być skonfigurowana jako uruchamiana wraz ze startem systemu operacyjnego. Niektóre systemy operacyjne pozwalają również na określenie zachowań usługi w momencie, gdy zostanie ona nieoczekiwanie zatrzymana (nie przez użytkownika, a na przykład na skutek awarii). Dla przykładu, w systemie Microsoft Windows Server można skonfigurować każdą usługę tak, by po nieoczekiwanym zatrzymaniu była podejmowana próba automatycznego restartu usługi (czyli ponownego jej uruchomienia). Usługa automatyzacji zadań Dobry administrator potrafi wykorzystać zdobycze techniki i zautomatyzować pracę systemu bazodanowego tak, by mieć przy nim jak najmniej pracy. Do automatyzacji najczęściej służy usługa, która albo jest oferowana przez system operacyjny, albo jest dostarczana wraz z systemem bazodanowym. Pozwala ona między innymi na przygotowywanie harmonogramów tworzenia kopii zapasowych baz danych. Taką usługą w systemie Microsoft SQL Server 2008 jest SQL Server Agent. Strona 4/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Należy zadbać o to, by była ona zawsze uruchomiona, a często domyślnie usługi te są wyłączone lub zatrzymane. Bezpieczeństwo usług W trakcie konfiguracji usług należy kierować się pewnymi zasadami, by uniknąć nieprawidłowości w ustawieniach i w działaniu serwera. Zasady te dotyczą głównie kwestii związanych z bezpieczeństwem środowiska. Pierwszą ważną zasadą jest zasada minimalizacji ilości usług. Mówi ona, że należy zawsze instalować i uruchamiać tylko te usługi, z których w danym momencie korzysta nasz system bazodanowy. Pozostałe usługi, o ile mogą być zainstalowane (w przyszłości może się okazać, że jakaś dodatkowa usługa będzie potrzebna), o tyle ich uruchamianie powoduje, że administrator ma więcej pracy, zaś w systemie znajduje się więcej potencjalnych słabych punktów. Zasada ta obowiązuje głównie osoby administrujące systemami i sieciami komputerowymi. Stosowanie się do niej może znacznie zwiększyć bezpieczeństwo systemu. Druga zasada dotyczy konfiguracji kontekstu usług. Usługi w systemie operacyjnym działają jak użytkownicy – wykonują operacje i mają określone uprawnienia. W niektórych systemach (np. Windows) każdej usłudze przyporządkowane jest konto użytkownika. Mówimy, że usługa pracuje w kontekście użytkownika. Oznacza to, że usługa działa w systemie operacyjnym i w sieci na takich samych uprawnieniach, jakie zostały określone dla użytkownika. W związku z tym pojawia się problem wyboru właściwego konta dla usług. Problem ten dotyczy głównej usługi serwera SQL – silnika oraz usługi odpowiedzialnej za automatyzację zadań w tym systemie. Większość systemów operacyjnych oferuje wbudowane konta o kreślonych uprawnieniach. Niestety, uprawnienia te na ogół są zbyt duże, by konta systemowe można było wykorzystać do pracy z usługami systemu bazodanowego. Przykładem takiego konta jest konto Local System w systemach Microsoft Windows. Konto to działa jako element systemu operacyjnego, co w praktyce oznacza, że ma uprawnienia nawet większe od tych, jakie posiada administrator systemu. Stąd pierwszy wniosek – na ogół nie wybieramy wbudowanych kont systemowych dla usług serwera SQL. Powstaje pytanie – jakich w takim razie kont używać? Jeśli serwer ma pracować w środowisku rozproszonym, ma mieć możliwość dostępu do innych serwerów i dodatkowo maszyna znajduje się w domenie, to wybieramy dla usług konto domenowe, specjalnie utworzone i skonfigurowane. Konto to powinno mieć ustawienia, które pozwolą w sposób nieprzerwany pracować usłudze. Zatem – należy ustawić dla tego konta silne hasło, które nie powinno mieć daty wygasania (hasło nigdy nie wygasa) i nie powinno być zmieniane przez użytkowników (użytkownik nie może zmieniać hasła, bez opcji użytkownik musi zmienić hasło przy pierwszym logowaniu). Co do uprawnień konta, należy rozważyć przydzielenie konta do roli lokalnego administratora (dla potrzeb na przykład automatycznego restartu usługi w przypadku nieoczekiwanego jej zatrzymania). Czasami taka konfiguracja jest wymagana (na przykład przy instalacji systemu Microsoft SQL Server w klastrze Microsoft Windows). Dla głównych usług możesz skonfigurować jedno konto (ułatwia to zdecydowanie administrację kontami). Nazwa konta dla zwiększenia bezpieczeństwa nie powinna kojarzyć się z systemem bazodanowym. Narzędzia konfiguracji usług Większość systemów operacyjnych oferuje narzędzie do zcentralizowanego zarządzania usługami zainstalowanymi w systemie. Jednak ponieważ ogólna ilość usług w systemach operacyjnych jest ogromna, a dodatkowo bardzo często usługi systemu bazodanowego wymagają dodatkowych Strona 5/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 ustawień, producenci zazwyczaj dodają narzędzie (lub zestaw narzędzi) do zarządzania usługami tylko samego serwera SQL. Dla przykładu, W systemie Microsoft SQL Server 2008 są dwa narzędzia do zarządzania usługami: Configuration Manager oraz Reporting Services Configuration. Pierwszy program umożliwia zarządzanie usługami i protokołami sieciowymi, zaś drugi pozwala dostosować usługę raportowania serwera SQL. Narzędzie Configuration Manager ilustruje rys. 3. Rys. 3 Konfiguracja serwisów Przykładowe rozwiązanie Wdrożenie systemu bazodanowego opartego na Microsoft SQL Server 2008 przebiega w kilku etapach. Pierwszym z nich jest wybór maszyny i systemu operacyjnego, który będzie podstawą dla serwera SQL. Serwery takie jak serwer baz danych, poczty czy stron internetowych zawsze instalowane są na gotowym środowisku operacyjnym. My mamy do dyspozycji maszynę z systemem Microsoft Windows Server 2003, która w pełni odpowiada wymaganiom serwera SQL. Następnym etapem jest uzupełnienie środowiska o wymagane i opcjonalne komponenty. Komponenty wymagane, takie jak .NET Framework 2.0 czy MS XML 6, znajduję się na płycie z plikami instalacyjnymi Microsoft SQL Server 2008. Elementy użyteczne, lecz opcjonalne, takie jak Microsoft PowerShell, można doinstalować z własnego źródła, np. witryny www.microsoft.com/poland. Właściwa instalacja systemu bazodanowego zaczyna się po uruchomieni instalatora Microsoft SQL Server 2008. Środkowa grupa opcji (Install) pozwala na uruchomienie właściwego komponentu programu instalacyjnego (rys. ). W tym kroku instalator jest gotowy do organizacji swojego środowiska w naszym systemie. Dopiero teraz widać główne okno centrum instalacji środowiska serwera SQL Server 2008. Można tu dokonać aktualizacji serwera z wersji SQL Server 2000 lub SQL Server 2005, przeczytać dokumentację, zainstalować komponenty dodatkowe lub przykładowe bazy. Strona 6/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Rys. 4 Instalacja nowej instancji serwera SQL Wybierając instalacje nowej instancji serwera SQL przechodzimy do kroku, w którym należy określić składniki systemu bazodanowego. Okno komponentów systemu (rys. ) umożliwia wybór instalacji interesujących nas części środowiska serwera SQL. Z pewnością potrzeby będzie sam silnik bazy danych (Database Engine Services), jak i graficzny interfejs dla niego (Client Tools). W dalszej kolejności przydatne okażą się narzędzia analityczne (Analysis Services), narzędzia pomocy (SQL Server Books online), itp. Rys. 5 Wybór składników instalacji W tym kroku mamy możliwość wyboru miejsca składowania plików serwera SQL w systemie. W profesjonalnych zastosowaniach ze względów wydajnościowych często spotykaną praktyką jest rozdzielanie plików systemu operacyjnego i serwera bazodanowego pomiędzy różne dyski. Następnym ważnym krokiem jest nazwanie instancji instalowanego serwera SQL oraz podgląd instancji już istniejących. Dla mniej doświadczonych użytkowników zaleca się pozostawienie ustawień standardowych instalatora. Strona 7/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Kolejny etap to określenie komponentów serwera oraz sposobów ich uruchamiania. Serwer SQL składa się z kilku usług, które muszą być uruchamiane za pomocą odpowiedniego konta użytkownika. Dla naszej maszyny takim kontem jest Administrator. W tym momencie poszczególne usługi będą uruchamiane z uprawnieniami administratora. W obecnej wersji serwer SQL oferuje możliwość zapisywania danych w formacie Unicode czyli międzynarodowym standardzie kodowania znaków. Poprzednie wersje oferowały zapis w standardach zorientowanych na konkretne języki. Zakładka Collation pozwala na wybór standardu kodowania danych (np. w celu zachowania kompatybilności ze starszymi bazami) oddzielnie dla silnika bazy i serwisu analitycznego, co prezentuje rys. . Rys. 6 Konfiguracja obsługi stron kodowych Kolejną rzeczą jest ustalenie, jakich użytkowników serwer SQL będzie honorował. Do wyboru są użytkownicy związani z systemem operacyjnym lub użytkownicy systemowi oraz użytkownicy wewnętrzni serwera. Na początek wystarczą nam do pracy sami użytkownicy systemowi. Należy jednak jednoznacznie sprecyzować konto, które będzie miało uprawnienia do administrowania serwerem SQL. Ilustruje to rys. . Strona 8/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Rys. 7 Konfiguracja typu autoryzacji W oknie dotyczącym powiadamiania firmy Microsoft o występujących błędach i użyciu zasobów serwera SQL możemy zgodzić się lub nie na wysyłanie tych informacji. Przed zaznaczeniem czegokolwiek warto poczytać dokładnie, jakie informacje będą wysyłane. Pora na podsumowanie opcji instalacji. W oknie Ready to Install możesz przejrzeć wszystkie zaznaczone uprzednio opcje, jeżeli coś się nie zgadza, zawsze możesz cofnąć się i wprowadzić zmianę. Zatwierdzając wybrane opcje rozpoczynamy kopiowanie plików i wykonywanie skryptów instalacyjnych zgodnie z założeniami ustalonymi przez nas wcześniej. Możemy podejrzeć postęp instalacji poszczególnych składników serwera SQL. Po zakończeniu procesu instalacji komponentów serwera SQL możemy przejść do konfiguracji poszczególnych usług. W tym celu należy posłużyć się programem SQL Server Configuration Manager dostepnym w grupie aplikacji SQL Server 2008. W głównym oknie narzędzia konfiguracyjnego widzimy usługi związane z serwerem SQL. Usługa automatyzacji zadań (SQL Server Agent) jest wyłączona, co nie jest dla nas stanem zadowalającym, zatem należy ją aktywować. Aby usługa uruchamiała się wraz ze startem systemu operacyjnego należy zaznaczyć odpowiednią opcję w zakładce Service, co ilustruje rys. Błąd! Nie można odnaleźć źródła odwołania.. Strona 9/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Rys. 8 Konfiguracja serwisów Serwer SQL przeważnie działa w środowisku sieciowym opartym o protokoły TCP/IP. Ze względów bezpieczeństwa obsługa tych protokołów domyślnie jest wyłączona. Jeżeli jesteśmy pewni zabezpieczeń swojej sieci informatycznej, możemy włączyć obsługę TCP/IP dla serwera SQL. Ostatnim etapem instalacji serwera SQL jest uruchomienie aplikacji zarządzającej SQL Management Studio i próba połączenia się z istniejącą bazą danych AdventureWorks. Jeżeli to zadanie się powiedzie, możemy uznać, że posiadamy gotowy do pracy system bazodanowy. Porady praktyczne W miarę możliwości dokonuj instalacji serwera SQL na systemie nieobciążonym przez inne serwery. W praktycznej działalności serwery bazodanowe mocno wykorzystują zasoby sprzętowe takie jak czas procesora, pamięć operacyjna czy dostęp do dysku twardego. Współdzielenie tych zasobów z innymi usługami zdecydowanie obniża wydajność obsługi baz danych. Pamiętaj o możliwości instalacji wielu instancji serwera SQL na jednej maszynie fizycznej. Umożliwia to logiczne i organizacyjne rozdzielenie poszczególnych grup baz danych a co za tym idzie lepsza kontrolę nad nimi. Dodatkowe serwisy możesz doinstalować w miarę potrzeb. Pamiętaj, że każdy z nich to potencjalne obciążenie dla systemu i luka w zabezpieczeniach. Planując rozszerzanie funkcjonalności serwera bazodanowego o dodatkowe serwisy warto zastanowić się nad jego rozbudową od strony sprzętowej. Już na etapie instalacji serwera bazodanowego warto przemyśleć sprawę bezpieczeństwa poszczególnych usług. Usługi serwera powinny posiadać dedykowane konta, za pomocą których są uruchamiane. Wydzielenie kont i przyznanie im wąskiego zakresu praw minimalizuje możliwość użycia ich przez nieautoryzowane osoby. Więcej o zabezpieczeniach serwera bazodanowego znajdziesz w module 10. Dobrą praktyką jest wydzielenie zasobu sieciowego z plikami instalacyjnymi serwera SQL. Pozwoli to na szybką re-instalację lub dodanie nowych komponentów do systemu. Niezależnie od tego warto posiadać kopię plików instalacyjnych na nośniku przenośnym (płyta DVD, pendrive, mobilny dysk twardy itp.), jeżeli zaistniałaby potrzeba instalacji środowiska na maszynie odciętej od sieci informatycznej. Dotyczy to także systemów towarzyszących serwerowi baz danych takich jak np.: serwis publikacji stron WWW. W przypadku stwierdzenia braku dostępu do instancji serwera SQL, w pierwszej kolejności sprawdź, czy odpowiednie serwisy systemowe są uruchomione. Jeżeli w wyniku jakiegoś konfliktu usługi serwera SQL zostały wyłączone lub zatrzymane, dokonaj ich ponownej aktywacji. W skrajnym Strona 10/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 przypadku należy zrestartować system operacyjny, który może blokować usługi systemu bazodanowego przez własne usługi zależne. Nigdy nie zaniedbuj regularnego skanowania systemu operacyjnego, na którym znajduje się system bazodanowy pod względem obecności wirusów i złośliwego oprogramowania. System bazodanowy jest centralną składnicą danych organizacji, a ich utrata zawsze jest bardzo kosztowna. Zawsze sprawdzaj dostępność najnowszych aktualizacji dla systemu bazodanowego, jak i systemu operacyjnego, na którym serwer SQL jest zainstalowany. Pamiętaj, że nie ma oprogramowania doskonałego a producenci starają się ulepszać swoje produkty m.in. poprzez udostępnianie aktualizacji. Widać to wyraźnie w systemach operacyjnych gdzie np.: bez nowych aktualizacji w ogóle nie można zainstalować niektórych aplikacji. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • • • • rozumiesz, co oznacza serwis systemowy, serwis bazy danych, instalacja serwisu rozumiesz zasadę działania uruchomienia serwisów w kontekście użytkownika umiesz wymienić i opisać podstawowe komponenty systemu bazodanowego umiesz podać przykład zastosowania systemu bazodanowego w praktyce Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Kalen Delaney, Microsoft SQL Server 2005: Rozwiązania praktyczne krok po kroku, Microsoft Press, 2006 Podręcznika adresowany do projektantów systemów bazodanowych, którzy opanowali już podstawy idei relacyjnych baz danych. Przedstawia praktyczne problemy i ich szczegółowe rozwiązania. 2. Edward Whalen, Microsoft SQL Server 2005 Administrator’s Companion, Microsoft Press, 2006 Jest to przejrzysty przewodnik, zawierający wszystkie informacje potrzebne do wdrożenia, administrowania i obsługi SQL Server 2005. Znajdziesz w nim wiele procedur i wskazówek opartych na doświadczeniach profesjonalistów pracujących z Microsoft SQL Server 2005. 3. Dusan Petkovic, Microsoft SQL Server 2008: A Beginner's Guide, McGraw-Hill, 2008 Pozycja adresowana do osób zaczynających przygodę z bazami danych. Znajdziemy tu wprowadzenie do relacyjnych baz danych, sposoby ich projektowania, optymalizacji i w końcu wdrożenia w najnowszej odsłonie serwera SQL w wersji 2008. Omówienie języka T-SQL w osobnej, dużej części książki jest kolejną mocną tej pozycji. 4. http://www.microsoft.com/sql/2008/default.mspx Tutaj znajdziemy wszystkie podstawowe informacje na temat MS SQL Server 2008 oraz nowości z nim związane. Strona 11/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Laboratorium podstawowe Problem 1 (czas realizacji 45 min) Firma National Insurance w związku z dogodnymi warunkami na rynku przeżywa dynamiczny rozwój. Obsługa rosnącej liczby klientów przysparza coraz więcej kłopotów, głównie działowi analiz. Na ostatnim zebraniu padła propozycja wdrożenia nowego systemu bazodanowego opartego na technologii Microsoft SQL Server 2008, który pomoże pomoże usprawnić procesy związane z obróbką coraz większej ilości danych o klientach firmy co potencjalnie przełoży się na jakość obsługi i przyszłe zyski. Wdrożenie nowego systemu złożono na barki głównego informatyka firmy, który do tej pory zajmował się głownie łownie zagadnieniami związanymi z administracją systemami operacyjnymi i bezpieczeństwem sieci. Jako praktykant dostałeś za zadanie wdrożyć serwera SQL 2008 na testowej platformie. Twoje doświadczenia z procesu instalacji i konfiguracji serwera będą wykorzystane ystane przy uruchamianiu systemu roboczego. Zadanie Tok postępowania 1. Uruchom instalację serwera SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Maszyna wirtualna używa obrazów ISO płyt CD/DVD na równi z płytami fizycznymi. Ważne jest, aby w wirtualnym napędzie DVD umieszczony był obraz płyty o nazwie SQLDEV_ENU.ISO. SQLDEV_ENU.ISO • Klik Kliknij dwukrotnie ikonę Mój komputer, a później CD ROM (D:). • Na ekranie powinno pokazać się okno instalatora Microsoft Mi SQL Server 2008 tak jak na rys. : 2008, Rys. 9 Strona główna programu instalacyjnego 2. Dokonaj konfiguracji przedinstalacyjnej • Z grupy Install kliknij odnośnik Server components, tools, Books Online, and Samples. Samples • Przeczytaj i zaakceptuj postanowienia umowy licencyjnej poprzez zaznaczenie pola I accept the license terms. • Kliknij przycisk Next. • Kliknij przycisk Install. 3. Dokonaj • Kliknij odnośnik New Installation. Strona 12/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych instalacji właściwej Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 • W oknie sprawdzania konfiguracji kliknij przycisk Details, a potem Next. • Zgodnie z rys. 1 zaznacz kolejno Database Engine Services, Full text search, Analysis Services, Client Tools, SQL Server books online, Business Intelligence Development Studio. • Kliknij przycisk Next. Rys. 10 Wybór składników instalacji • • • • Zostaw ustawienia standardowe i kliknij przycisk Next. W polu Account wpisz nazwę Administrator. W polu Password wpisz P@ssw0rd. Kliknij przycisk Apply to All. Rys. 11 Określenie praw dostępu do składników • Kliknij zakładkę Collation. Strona 13/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 • • • • • • • • • Dla pola Database Engine kliknij przycisk Customize. Customize Kliknij pole Windows collation designator. Z listy Collation designator wybierz Polish. Kliknij przycisk OK. Dla pola Analysis Services kliknij przycisk Customize. Customize Z listy Collation designator wybierz Polish. Kliknij przycisk OK. Przejdź do następnego okna klikając przycisk Next. Next Aby dodać konto bieżącego użytkownika (Administrator (Administrator), kliknij przycisk Add Current User. User • Kliknij K przycisk Next. Rys. 12 Konfiguracja typu autoryzacji Dla serwisu analitycznego również należy określić uprawnieniami administracyjnymi. konto z • Aby dodać konto bieżącego użytkownika (Administrator (Administrator), kliknij przycisk Add Current User. User • Kliknij K przycisk Next. • Kliknij odnośnik View the Microsoft SQL Server. • Przeczytaj informacje w otwartej stronie WWW. WWW • Zamknij okno przeglądarki. przeglądarki • Kliknij K przycisk Next. • Kliknij przycisk Install. • Aby zakończyć ten etap i przejść do podsumowania instalacji, instalacji kliknij przycisk Next. • Wyświetl dziennik instalacji klikając odnośnik C:\Program files files\Microsoft SQL Server\100\.... • Przeczytaj informacje zawarte w dzienniku i zamknij okno notatnika. notatnika • Kliknij przycisk Close. 4. Konfiguracja • Kliknij przycisk START -> Programy -> Microsoft SQL Server 2008 -> Configuration Tools -> SQL Server Configuration Manager. Manager Strona 14/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 usług serwera • W nowym oknie rozwiń drzewo SQL Server Network Configuration klikając przycisk +. • Zaznacz pole SQL Server Services. • Kliknij dwukrotnie pole SQL Server Agent. • Kliknij przycisk Start. • Kliknij na zakładce Service. • W polu Start Mode wybierz z listy rozwijanej opcję Automatic. • Kliknij przycisk OK. • Kliknij pole Protocols for MSSQLSERVER. • Kliknij dwukrotnie pole TCP/IP. • Dla pola Enabled z listy rozwijanej wybierz Yes. • Kliknij przycisk OK. • Zamknij okno SQL Server Configuration Manager. 5. Sprawdzenie poprawności instalacji • Kliknij przycisk Start -> Programy -> Microsoft SQL Server 2008 -> Management Studio. • W nowym oknie kliknij przycisk Connect. • Jeżeli instalacja system jest poprawna, będziesz mógł w polu Object Explorer rozwinąć drzewo Databases -> AdventureWorks. Strona 15/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 2 Instalacja i konfiguracja MS SQL Server 2008 Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Jesteś głównym informatykiem firmy National Insurance. Niedawne wdrożenie nowego serwera bazodanowego opartego na Microsoft SQL Server 2008 zakończyło się sukcesem. Firma planuje rozbudowę infrastruktury informatycznej o farmę serwerów Microsoft SQL Server 2008 i ich integrację z istniejącymi bazami danych. W dotychczasowej działalności od strony baz danych wykorzystywane były serwery Microsoft SQL Server 2000 i Microsoft SQL Server 2005, na których hostowane bazy zawierały dane w języku polskim i angielskim. Niezbyt dobrze wyglądała sprawa prezentacji danych, każdy z menedżerów korzystał ze swoich narzędzi, niekompatybilnych ze sobą. Jako dobry administrator poleciłeś przetestować nowy serwer pod względem kompatybilności z istniejącymi bazami oraz możliwości nowego serwisu raportującego. Zadanie polega na instalacji nowej instancji serwera SQL Server 2008 (na nowej, testowej maszynie) spełniającej kryteria: • • • • • Pliki bazy danych i pliki systemu operacyjnego są rozdzielone. Zachowana jest kompatybilność wstecz względem używanych wcześniej baz. Instalacja zawiera serwis silnika, serwis analityczny i serwis raportujący. Dostarczone są narzędzia ułatwiające administrację. Dostarczone są przykładowe bazy. Zespół testowy przygotuje również dokumentację w formie raportu z instalacji. Strona 16/16 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 3 Wersja 2.0 Definiowanie i zarządzanie bazą danych Spis treści Definiowanie i zarządzanie bazą danych.............................................................................................. 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ........................................................................................................... 10 Porady praktyczne ..................................................................................................................... 14 Uwagi dla studenta .................................................................................................................... 15 Dodatkowe źródła informacji..................................................................................................... 15 Laboratorium podstawowe ................................................................................................................ 16 Problem 1 (czas realizacji 45 min).............................................................................................. 16 Laboratorium rozszerzone ................................................................................................................. 26 Zadanie 1 (czas realizacji 90 min)............................................................................................... 26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Informacje o module Opis modułu Dobry administrator systemu zarządzania bazami danych wie wszystko o bazach danych. W dzisiejszych czasach rola administratora nie ogranicza się do zarządzania istniejącymi bazami danych, ale również wymaga umiejętności zakładania, konserwacji oraz aktualizacji baz danych znajdujących się pod jego opieką. W tym module poznasz sposoby tworzenia, rozbudowy i zarządzania bazą danych. Cel modułu Celem modułu jest przedstawienie czytelnikowi typowych zagadnień związanych z zakładaniem i konserwacją bazy danych na serwerze Microsoft SQL Server 2008. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • potrafił zaplanować instalację bazy danych • rozumiał czym są pliki bazy, tabele, diagramy, klucze • wiedział, jak wykonać kopię bezpieczeństwa bazy oraz jak przywrócić bazę w razie awarii Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • • • • wiedzieć, jak używać oprogramowania Microsoft Virtual PC znać podstawy obsługi systemu Windows 2000 lub nowszego rozumieć, jakie są elementy diagramu ERD i powiązania między nimi znać podstawy obsługi narzędzia SQL Server Management Studio Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na rys. 1, istnieje konieczność wykonania wcześniej modułów 1 i 2. Rys. 1 Mapa zależności modułu Strona 2/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Przygotowanie teoretyczne Przykładowy problem Jesteś administratorem systemu bazodanowego w firmie National Insurance. Analitycy w dziale deweloperskim stworzyli diagram bazy danych dla nowego produktu firmy. Diagram zawiera informacje o wszystkich tabelach i relacjach bazy. Wskazuje też na możliwe do użycia typy danych. Diagram bazy danych przedstawiony jest na rys. 2. Rys. 2 Diagram przykładowej bazy danych Twoim zadaniem jest założenie bazy danych wraz z odpowiednimi tabelami, ustanowienie kluczy głównych, powiązań między nimi i określenie dogodnych typów danych. W końcowej fazie powinieneś wypełnić bazę przykładowymi danymi i zapewnić jej kopię bezpieczeństwa. Podstawy teoretyczne Dysponując gotowym projektem relacyjnej bazy danych, jesteś na początku długiej drogi, zanim baza powstanie na serwerze i rozpocznie swoje życie. Zanim zaimplementujesz bazę danych, musisz zaplanować wiele ustawień dotyczących różnych aspektów działania bazy. Strona 3/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rozmieszczenie plików bazy danych Baza danych składa się z plików. Plik bazy można podzielić na pliki danych i pliki dziennika transakcji. W plikach danych przechowywane są obiekty baz danych, takie jak tabele (wraz z danymi), indeksy czy procedury składowane. W plikach dziennika transakcji system zapisuje strony (w przypadku systemów SQL Server strona to blok 8 KB, ale można go zwiększyć) zawierające modyfikacje danych. Rozmieszczenie plików odgrywa znaczącą rolę w procesie tworzenia i optymalizacji bazy danych. Istnieje szereg zasad przydatnych w planowaniu fizycznej implementacji bazy danych. Zasady te to m.in.: • Pliki dziennika transakcji należy umieszczać na innym dysku fizycznym niż pliki danych – w przypadku awarii jednego z dysków tracimy tylko część bazy. • Tabele często występujące razem w złączeniach (ang. joins) należy umieszczać w osobnych plikach (grupach plików) na osobnych dyskach fizycznych – dzięki temu możliwe jest równoległe pobieranie danych z tych tabel. • Indeksy nieklastrowane należy umieszczać na innych dyskach fizycznych niż ich bazowe tabele – zyskujesz większą wydajność zapisu danych. • Tabele często modyfikowane należy oddzielić fizycznie (umieścić na innym dysku) od tabel rzadko modyfikowanych – w przypadku większych baz danych upraszcza to proces wykonywania kopii zapasowych. • W przypadku naprawdę dużych instancji bazy stosowane są dedykowane rozwiązania programowo-sprzętowe typu klastry z wydajnymi macierzami dyskowymi. Jednoczesne spełnienie wszystkich wymienionych punktów jest raczej niemożliwe, ale w idealnym przypadku oddzielenie dziennika transakcji od danych i maksymalne rozczłonkowanie danych pomiędzy tak wiele dysków, jak się da, byłoby rozwiązaniem dającym maksymalne bezpieczeństwo i wydajność bazy. Bezpieczeństwo fizyczne danych Dane, jak i dziennik transakcji można dodatkowo zabezpieczyć przed ewentualnymi awariami dysków fizycznych. Do tego celu należy użyć macierzy dyskowych z zaimplementowanymi konfiguracjami RAID (ang. Redundant Array of Independent Disks). Istnieje wiele konfiguracji RAID, ale do najbardziej znanych i zarazem najczęściej stosowanych należą: RAID-0, RAID-1, RAID-5 oraz RAID-10. Implementacja RAID może być rozwiązana drogą sprzętową lub programową w systemie operacyjnym. Rozwiązania różnią się wydajnością i… ceną. Więcej o systemach RAID i bezpieczeństwie systemów bazodanowych znajdziesz w module 10. Przy tworzeniu bazy danych administrator musi zdecydować o jej konfiguracji. Konfiguracja ta dotyczy nie tylko plików bazy danych, ale także pewnych ustawień samej bazy danych. Ustawienia te decydują o tym, jak będzie się zachowywała baza w trakcie swojego cyklu życia. Ustawienia dotyczące plików Po wybraniu odpowiedniej struktury bazy i określeniu jej nazwy przychodzi pora na ustawienie pewnych właściwości plików bazy danych. Ustawienia te to: • • • • ilość i lokalizacja plików wielkość początkowa plików sposób powiększania plików (powinien zostać wybrany automatyczny przyrost rozmiaru) maksymalny rozmiar dla każdego z plików (alternatywnie można maksymalny rozmiar pozostawić nieokreślony, ale wówczas administrator jest zmuszony do monitorowania wolnego miejsca na dysku twardym) • nazwy logiczne plików Strona 4/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 3 Właściwości przykładowej bazy danych w SQL Server 2008 W praktyce należy pamiętać o takim ustawieniu rozmiaru początkowego plików, by znalazło się w nich miejsce na nowe dane. Proces powiększania rozmiaru pliku może niepotrzebnie obciążyć bazę danych. Co za tym idzie, należy też zadbać o to, by przyrost rozmiaru pliku nie był zbyt mały. Najlepszym nawykiem jest manualne powiększanie rozmiarów plików poza godzinami, w których baza jest używana przez największą liczbę użytkowników. Opcja automatycznego powiększania plików może być ustawiona na wszelki wypadek (gdyby administrator zapomniał o swoich obowiązkach lub wystąpiła nieoczekiwana sytuacja wymagająca powiększenia pliku). Niemniej jednak taka automatyzacja jest dyskusyjna ponieważ wpływa na wydajność bazy. Dziennik transakcji należy ustawić na początek na 20-30% rozmiaru plików danych. W trakcie pracy bazy danych rozmiar ten można zmienić wedle potrzeb. Ustawienia dotyczące bazy danych Równie ważne jak ustawienia plików są ustawienia samej bazy danych. Ustawienia te to na przykład: • ustawienia dotyczące języka, metod sortowania tekstu, znaków dialektycznych • ustawienia dotyczące zapisu zmian w dzienniku transakcji (tzw. model przywracania bazy, ang. recovery model) • ustawienia dotyczące statystyk (statystyki to zapis rozkładu danych w kolumnach najczęściej wykorzystywanych w tabelach, mogą być tworzone i utrzymywane automatycznie) • ustawienia dotyczące dostępu do bazy danych (w niektórych sytuacjach niezbędne jest ograniczenie dostępu do bazy danych dla użytkowników, np. przy przywracaniu bazy danych z kopii zapasowej) Strona 5/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 4 Opcje przykładowej bazy danych w SQL Server 2008 Ustawienia opcji bazy danych zmieniają się w trakcie działania bazy. Zmiany dokonywane są przy pomocy narzędzi graficznych (np. SQL Server Management Studio) lub poleceń SQL (np. ALTER DATABASE). Do ciekawszych opcji należą polecenia Auto Shrink, która optymalizuje rozmiar plików (z taką samą wadą jak automatyczne zwiększanie rozmiaru) i Auto Create Statistics, która generuje automatycznie statystyki na podstawie dystrybucji wartości w kolumnie danych. Informacja ta jest używana przez SQL Server Query Optimizer do generowania planu zapytań bazującego na kosztach używania różnych kolumn. Tabela bazy danych Tabela jest dwuwymiarowym zbiorem wzajemnie powiązanych danych dotyczących wspólnego obszaru lub encji. Składa się ona z kolumn, w których przechowywane są dane, np. w tabeli Pracownicy przeważnie znajdziemy kolumny takie jak Nazwisko czy PESEL. W relacyjnej bazie danych relację zachodzą właśnie pomiędzy danymi w poszczególnych kolumnach nazywanych także atrybutami tabeli. Pojedynczy rząd obejmujący kolumny reprezentuje instancję danych, czyli rekord (ang. record). Większość operacji na bazie danych wykonuje się na rekordach lub, częściej, zbiorach rekordów (ang. recordset). Do jednoznacznej identyfikacji tabeli służy klucz główny (ang. primary key), który przeważnie jest dodatkową kolumną z unikatowymi wartościami. Dzięki znajomości tych wartości możemy szybko wskazać interesujący nas rekord w danej tabeli, a następnie odczytać go lub zmodyfikować. Tabele możemy utworzyć za pomocą narzędzi graficznych, np. w Management Studio rozwijając w obszarze Object Explorer odpowiednie menu. Możemy też posłużyć się odpowiednim poleceniem języka SQL (i tak najczęściej postępuje się w praktyce): CREATE TABLE nazwa_tabeli (kolumny_tabeli) Więcej na ten temat znajdziesz w module 5. Podczas tworzenia tabeli należy zdefiniować chociaż jedną kolumnę zawierającą dane. Przechowywane dane mogą być tylko ściśle określonego typu. Typ ten jest wspólny dla całej kolumny. Strona 6/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Typy danych Typ danych jest pierwszą wielkością jaką definiuje użytkownik dla kolumny tabeli. Typ danych kolumny kontroluje typ informacji jaka może być przechowywana w kolumnie. Należy zdefiniować typ danych przez wpisanie za nazwą kolumny słowa kluczowego, może ono wymagać parametrów. Po zdefiniowaniu typ danych kolumny tabeli jest stałą właściwością i nie powinno być zmieniany. Można również wykorzystać typy danych do definicji innych struktur przechowujących dane, takich jak parametry i lokalne zmienne. Przegląd wybranych typów danych dostępnych na platformie Microsoft SQL Server prezentuje tab. 1 Tab. 1 Podstawowe typy danych dostępne w Microsoft SQL Server Kategoria Opis Typ danych Typy binarne Dane zawierają łańcuchy binariów zapisanych w postaci liczb w systemie szesnastkowym (heksadecymalnym). Typy tekstowe Dane są kombinacją liter, cyfr i symboli. Data i czas Typy liczb dziesiętnych Dane są kombinacją dobrze sformatowanej daty i czasu. Nie istnieją typy danych opisujące osobno datę i czas. Dane liczbowe o dokładności do ostatniej znaczącej cyfry. Szczegóły binary Dane o stałej przypisanej długości (do 8 KB). varbinary Dane o różnej długości aż do zdefiniowanej maksymalnej (do 8 KB). image Dane mogą być różnej długości i przekroczyć rozmiarem 8 KB. char Dane o stałej przypisanej długości (do 8 KB). varchar Dane o różnej długości aż do zdefiniowanej maksymalnej (do 8 KB). text Dane tekstowe o rozmiarze przekraczającym 8 znaków datetime Data z zakresu od 1 stycznia 1753 do 31 grudnia 9999 (jedna wartość zajmuje 8 B). smalldatetime Data z zakresu od 1 stycznia 1900 do 6 lipca 2079 (jedna wartość zajmuje 4 B). datetimeoffset zapewnia obsługę stref czasowych datetime2 Wspiera szerszy zakres dat oraz większą precyzję części ułamkowych sekundy i także umożliwia określanie precyzji decimal Maksymalnie 38 cyfr, z czego wszystkie mogą znajdować się po prawej stronie przecinka. Typ przechowuje dane dokładne (nie przybliżone). numeric W SQL Server jest to odpowiednik typu decimal. Typy liczb o zmiennej precyzji Dane są przybliżonymi liczbami zmiennoprzecinkowymi o dokładności takiej, jaka może w danej chwili być obsłużona przez mechanizmy obliczeniowe. float Liczba zmiennoprzecinkowa z zakresu od -1,79E+308 do 1,79E+308. real Liczba zmiennoprzecinkowa z zakresu od– 2.40E + 38 do 2.40E + 38. Typy liczb całkowitych Dane są liczbami całkowitymi. bigint Liczba całkowita z zakresu od –2^63 (-9223372036854775808) do 2^63-1 (9223372036854775807). Rozmiar jednej liczby 8 B. int Liczba całkowita z zakresu od -2 147 483 648 do 2,147,483,647. Rozmiar Strona 7/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Kategoria Opis Typ danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Szczegóły jednej liczby to 4 B. Typy monetarne Typy specjalne Typy Unicode Przestrzenne typy danych Dane reprezentują ujemne lub dodatnie sumy pieniędzy. Dane specjalne to dane, które nie pasują do innych kategorii. Dane tekstowe zapisane w postaci Unicode. Zajmują one dwukrotnie więcej miejsca niż zwykłe dane tekstowe. Dane przestrzenne to dane, które identyfikują geograficzne lokalizacje i kształty, w szczególności na kuli ziemskiej smallint Liczba całkowita z zakresu od -32,768 do 32,767. Rozmiar jednej liczby to 2 B. tinyint Liczba całkowita z zakresu od zera do 255. Rozmiar jednej liczby to 1 B. money Wartość monetarna z zakresu od -922,337,203,685,477.5808 do 922,337,203,685,477.5807. Rozmiar jednej wartości to 8 B. smallmoney Wartość monetarna z zakresu od -214,748.3648 do 214,748.3647. Rozmiar jednej wartości to 4 B. bit Dane zawierają wartość 1 albo 0. Używaj ich, gdy chcesz przedstawić zagadnienia typu PRAWDA lub FAŁSZ albo TAK lub NIE. cursor Typ danych używany przez zmienne lub parametry wyjściowe procedur składowanych, które zawierają referencje do kursora. timestamp Typ danych używany do wskazania ciągu aktywności uniqueidentifier Dane są 16-bajtowymi szesnastkowymi liczbami wskazującymi na globalnie unikalne identyfikatory (GUID). GUID są użyteczne, gdy wiersz musi być unikalny pośród wielu wierszy. SQL_variant Ten typ danych przechowuje wartości różnych typów z wyjątkiem typów text, ntext, timestamp, image oraz sql_variant. table Typ danych przechowujący zestaw wyników do dalszego przetwarzania. Może być używany tylko do definiowania zmiennych lokalnych lub wartości zwracanych przez funkcje użytkownika. nchar Dane o stałej przypisanej długości (do 4000 znaków Unicode). nvarchar Dane o różnej długości aż do zdefiniowanej maksymalnej (do 4000). ntext Dane mogą długością przekraczać 4000 znaków Unicode. Point Lokalizacja MultiPoint Seria punktów LineString Seria obejmująca zero lub więcej punktów połączonych liniami MultiLineString Zestaw obiektów LineString Polygon Spójny region opisany przez zbiór zamkniętych obiektów LineString Strona 8/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Kategoria Opis Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Typ danych Szczegóły MultiPolygon Zestaw wielokątów GeometryCollection Kolekcja typów geometrycznych Oczywiście nie będziesz używać wszystkich typów danych, ale kilku będziesz używać prawie zawsze podczas pracy z serwerem Microsoft SQL Server. Perspektywy W najprostszym rozumieniu perspektywa (ang. view) jest wirtualną tabelą. W szerokim znaczeniu perspektywa jest odwzorowaniem globalnego schematu bazy danych na schemat „zewnętrzny”, przystosowany do potrzeb i przyzwyczajeń konkretnego użytkownika. Perspektywy stosujemy, aby uprościć (sobie lub użytkownikowi) życie. Powodów stosowania perspektyw jest wiele: • Uproszczenie z punktu widzenia użytkownika modeli pojęciowych – dzięki temu możemy znacznie uprościć schemat bazy, a tym samym ułatwić użytkownikowi dostęp do danych. • Dostosowanie się do punktu widzenia i terminologii dziedziny zastosowań BD – zmiana schematu wprowadzana przez perspektywę może być wykorzystana na przykład do dostosowania nazw tabel i kolumn do języka, którym posługuje się użytkownik. • Ograniczenie dostępu do obiektów – perspektywy powodują ukrycie przez użytkownikiem końcowym prawdziwego schematu bazy danych. Może to mieć również pozytywny wpływ na poprawę bezpieczeństwa danych, gdyż użytkownik nie ma bezpośredniego dostępu do schematu rzeczywistego. • Współdziałanie systemów heterogenicznych (wspólny schemat) – w wypadku systemów rozproszonych, zbudowanych z różnych systemów baz danych, perspektywa może pomóc w ukryciu różnic. • Przystosowanie starszych systemów do nowszych technologii i wymagań. Z punktu widzenia użytkownika (i innych procesów) perspektywa powinna być dla niego przezroczysta, to znaczy, że można na niej wykonywać takie same operacje, jak na „prawdziwych” tabelach. Warunek przezroczystości perspektyw jest bardzo trudny do spełnienia, gdyż dla pewnych odwzorowań danych przyjęte środki definicji perspektyw (np. SQL) mogą okazać się niewystarczające. Rys. 5 Schemat działania perspektyw Strona 9/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rodzaje perspektyw Perspektywy dzielimy na dwie grupy: • perspektywy wirtualne • perspektywy zmaterializowane Perspektywy wirtualne Perspektywa wirtualna istnieje wyłącznie w postaci definicji. Wyliczenie (czyli wyznaczenie zbioru krotek danej perspektywy, zwane też materializacją perspektywy) następuje w momencie odwołania się do perspektywy. Wynik ten nie jest później nigdzie przechowywany. Oznacza to, że każde wywołanie perspektywy wirtualnej powoduje jej ponowne wyliczenie (materializację), co obciąża zasoby systemu. Wadą perspektyw wirtualnych jest obciążanie systemu za każdym odwołaniem do procedury wirtualnej, a tym samym dłuższy czas oczekiwania na materializację perspektywy. Perspektywy wirtualne mają też szereg zalet. W sytuacji stosowania perspektyw wirtualnych nie ma dublowania danych oraz problemów z aktualizacją danych i problemów z przetwarzaniem transakcji. Perspektywy zmaterializowane Perspektywa zmaterializowana jest wyliczana (materializowana) w czasie pierwszego użycia. Następnie wynik tego wyliczenia (dane) są przechowywane, aby móc ich użyć przy ponownym wywołaniu perspektywy. Dzięki temu kolejne wywołanie perspektywy nie obciąża systemu, a czas dostępu do danych znacznie się zmniejsza. Przykładowe rozwiązanie Posiadając gotowe, przetestowane środowisko bazodanowe przystępujemy do założenia pierwszej bazy danych. Do zarządzanie bazami danych, w tym ich tworzenia jaki i usuwania służy narzędzie Management Studio dostępne wraz z podstawową instalacją SQL Server. Po uruchomieniu narzędzia i połączeniu się z danym serwerem widzimy obszar Object Explorer wraz z drzewem obiektów Databases. Wybierając opcję tworzenia nowej bazy musimy sprecyzować jej kilka podstawowych parametrów. Oprócz nazwy dla nowej bazy podajemy lokację i początkową wielkość pliku dla danych i pliku dla dziennika transakcji. Plików tych może być sprecyzowanych więcej, jednakże minimum to określenie jednego pliku każdego typu, co pokazuje rys. 6. Strona 10/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 6 Tworzenie nowej bazy danych Zaraz po utworzeniu bazy warto przyjrzeć się dostępnym opcjom i od razu dokonać wstępnej konfiguracji. Przed wypełnieniem bazy danymi należy określić parametry takie jak poziom kompatybilności bazy z poprzednimi wersjami serwera SQL, dostępność i widoczność przez poszczególne grupy użytkowników czy zachowanie plików bazy w przypadku zbliżenia się do poziomu zapełnienia danymi. Jedną z ważniejszych opcji, która należy zainteresować się od samego początku jest Recovery model. Opcja ta decyduje o tym, jak dużo informacji o modyfikacjach danych będzie zapisywana do dziennika transakcji bazy danych. Listę opcji bazy danych znajdziesz w systemie pomocy Books Online pod hasłem „database options” (najszybciej znajdziesz ten fragment pomocy używając indeksu dostępnego w Books Online). W tym kroku dodamy wymagane tabele bazy danych i określimy ich atrybuty. Po ustaleniu podstawowych parametrów bazy można przejśc do kroku określania jej wyglądu, czyli tabel i związków pomiędzy nimi. Rozwijając w obszarze Object Explorer drzewo naszej bazy danych widzimy wszystkie obiekty wchodzące w jej sklad, w tym tabele. Po wybraniu opcji tworzenia nowej tabeli należy sprecyzować przynajmniej jeden atrybut, czyli kolumnę. Dla danej kolumny wybieramy nazwę i typ danych, które będzie ona przechowywała. Tutaj należy zdecydować, czy kolumna ma zawsze zawierać jakieś dane, czy może przechowywać wartości puste (ang. null). Do kontroli nad warościami pustymi służy pole Allow Nulls, co ilustruje rys. . Strona 11/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 7 Określanie nazwy i typu danych dla kolumny Pozostało nam jeszcze ustalić identyfikator naszej tabeli – klucz główny. Kolumna zawierająca unikalne dane jest dobrym kandydatem dla klucza głównego. Typowa tabela zawiera wiele kolumn o różnych typach danych oraz klucz główny. Dane przechowywane w poszczególnych kolumnach są ze sobą skojarzone np. dla tabeli zawierającej dano o pracy dyplomowej studenta będą tam kolumny reprezentujące temat pracy, datę obrony czy ocenę z obrony. Rys. 8 Główna tabela bazy PraceDyplomowe Najczęstrzym typem związku pomiędzy dwiema tabelami jest wiele-do-wielu. Niestety tego typu związku nie można w bezpośredni sposób zamodelować w relacyjnej bazie danych. Aby obejść ten problem, tworzymy niejako sztuczną, pośrednią tablę. Tabela ta posiada tylko dwie kolumny, wskazujące na łączone tabele. Ponieważ dla tej tabeli unikalna będzie zarówno jedna jak i druga kolumna, klucz główny możemy założyć na obydwu jednocześnie. Ilustruje to rys. . Strona 12/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 9 Tabela Autorzy z kluczem głównym na dwóch kolumnach Posiadając zdefiniowane wszystkie tabele w bazie danych, następnym krokiem jest utworzenie związków pomiędzy nimi. Najwygodniej utworzyć je na graficznym diagramie bazodanowym dostępnym z poziomu Management Studio. Dla przykładowych tabel po stworzeniu związku zostanie utworzony klucz obcy w tabeli Autorzy jako identyfikator powiązanej tabeli Osoba. Jako rezultat powinniśmy posiadać diagram tabel i związków pomiędzy nimi bardzo zbliżony do początkowego diagramu ERD. Rys. 7 Tworzenie pozostałych kluczy obcych Posiadając gotową bazę danych warto zrobić jej kopię zapasową przed dalszymi eksperymentami. Narzędzie Management Studio umożliwia łatwe wykonywanie kopii zapasowej i przywracanie z niej bazy danych. Rozpoczęcie procedury tworzenia kopii bezpieczeństwa ilustruje rys. 8. Strona 13/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 8 Uruchamianie procedury kopii bezpieczeństwa Jeżeli jest to tylko możliwe, należy zmienić nazwę pliku kopii bezpieczeństwa i jego domyślną lokację. Przeważnie w sieci istnieje dedykowany serwer plików, na którym przechowywane są pliki kopii bezpieczeństwa. W celu weryfikacji pliku kopii wygodnie jest odzyskać tak utworzoną bazę do innej, roboczej bazy danych. Taką roboczą bazę można przeglądać pod względem zgodności i testować nawet na innym serwerze bazodanowym. Procedurę odzyskiwania dazy z kopii bezpieczeństwa ilustruje rys. 9. Rys. 9 Odzyskiwanie bazy danych z pliku backup Porady praktyczne Zanim przystąpisz do implementacji bazy danych na serwerze, uważnie przyjrzyj się diagramowi ERD lub diagramowi bazodanowemu. Zrozumienie relacji zawartych na tych diagramach pozwoli uniknąć błędów w logice bazy. Błędy popełnione na tak wczesnym etapie będą negatywnie wpływać niemal na każde późniejsze działanie systemu bazodanowego. I z drugiej strony, im więcej uwagi poświęcimy prawidłowemu projektowi bazy tym bardziej zaprocentuje to w przyszłości. Upewnij się, że każda tabela ma założony klucz główny, bez niego nie zdziałasz za wiele. Klucz główny oprócz funkcji identyfikacji danej tabeli pełni również rolę indeksu, który może przyśpieszyć obsługę danych. Jest on elementem niezbędnym w tabelach systemu bazodanowego niezależnie od platformy. Uważnie przemyśl sprawę doboru typów danych. Nie mogą być one za małe dla przechowywanej wartości, z drugiej strony szastanie zbyt obszernymi typami sumarycznie zmniejsza wydajność bazy. W szczególności przyjrzyj się nowym możliwościom jakie oferuje w zakresie typów danych MS SQL 2008. Współczesne wymagania co do obsługi danych typu pliki czy hierarchia obiektów znalazły swoje odzwierciedlenie w nowych serwerach baz danych. Strona 14/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Zawsze zapisuj tworzone obiekty typu tabele, diagramy. System nie robi tego automatycznie! Zapominanie o zapisywaniu swojej pracy może skutkować przykrymi konsekwencji utraty informacji i co za tym idzie czasu użytkownika serwera baz danych. Wiele operacji w ogóle nie zostanie wykonana jeżeli np.: zaktualizowana struktura tabeli nie zostanie zapisana do pliku bazy. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • • • • rozumiesz, co oznacza relacja i czym różni się od powiązania w relacyjnych bazach danych rozumiesz zasady przypisywania odpowiednich typów danych do atrybutów tabeli wiesz jak założyć bazę danych i ustalić jej podstawowe parametry umiesz podać przykład diagramu ERD dla typowego zbioru danych Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. William R. Stanek, Vademecum Administratora Microsoft SQL Server 2005, Microsoft Press, 2006 Kompleksowe opracowanie na temat zaplanowania i wdrożenia system bazodanowego opartego o MS SQL Server 2005 w małym i średnim przedsiębiorstwie. Autorzy postawili na formułę przedstawiania wielu problemów z praktyki administratora baz danych oraz możliwych dróg do ich rozwiązania. Książka jest adresowana do praktykujących użytkowników. 2. Wiesław Dudek, Bazy danych SQL. Teoria i praktyka, Helion, 2006 Książka przedstawia większość zagadnień związanych z przechowywaniem i przetwarzaniem danych w współczesnych systemach bazodanowych. Znajdują się w niej informacje o relacyjnym i obiektowym modelu danych oraz najczęściej stosowanych systemach zarządzania bazami danych. 3. Strona domowa SQL Server 2008, http://www.microsoft.com/sql/2008/default.mspx Tutaj znajdziemy wszystkie podstawowe informacje na temat MS SQL Server 2008 oraz nowości z nim związane. Strona 15/26 Włodzimierz Dąbrowski, ski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Laboratorium podstawowe Problem 1 (czas realizacji ealizacji 45 min) W firmie National Insurance trwa właśnie sezon urlopowy. Jako jedyny obecny administrator baz danych postanowiłeś przetestować implementacje bazy danych Prace Dyplomowe, Dyplomowe która jest częścią twojego semestralnego projektu zaliczeniowego. Wytyczne W do bazy jasno określa zaprojektowany przez kolegę z zespołu diagram. Postanowiłeś użyć dostępnego systemu Microsoft SQL Server 2008 wraz z graficznym interfejsem SQL Server Management Studio do wykonania tego zadania. Zadanie Tok postępowania 1. Utwórz bazę danych • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeślili nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. • W oknie logowania kliknij Connect. • W oknie Object Explorer kliknij prawym przyciskiem myszy folder Databases i z menu kontekstowego wybierz New Database. Database • W pole Database name wpisz nazwę bazy danych PraceDyplomowe. • Ustaw początkowe wielkości plików na 4 MB dla pliku danych i 1 MB dla pliku dziennika transakcji. transakcji Rys. 10 Tworzenie nowej bazy danych • Kliknij przycisk OK. 2. Ustaw opcje • Kliknij prawym przyciskiem myszy bazę danych PraceDyplomowe i z Strona 16/26 Włodzimierz Dąbrowski, ski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych bazy danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 menu kontekstowego wybierz Properties. • W oknie Database Properties - PraceDyplomowe kliknij po lewej stronie opcję opcj Options. • Zmień ustawienie opcji Recovery model na Simple. Simple Rys. 11 Ustawianie tawianie właściwości bazy danych • Kliknij przycisk OK. Listę opcji bazy danych znajdziesz w systemie pomocy Books Online pod hasłem database options (najszybciej znajdziesz ten fragment pomocy używając indeksu dostępnego w Books Online). Online) 3. Dodaj tabele do bazy danych W tym kroku dodamy wymagane tabele bazy danych i określimy ich atrybuty. Zaczniemy od prostych tabel. pol Tables w rozwiniętym drzewie • Kliknij prawym przyciskiem myszy pole bazy PraceDyplomowe. • Kliknij opcję NewTable. • Kliknij pole pol Column name i wpisz nazwę ID_TypStudiow. ID_TypStudiow • Kliknij pole pol Data Type i z listy rozwijanej wybierz smallint. smallint • Odznacz pole Allow null w celu zapobiegania wpisywania do tej kolumny wartości null. Strona 17/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 12 Określanie nazwy i typu danych dla kolumny • Ustal nazwę dla nowej tabeli klikając ikonę dyskietki z górnego paska zadań. • Wprowadź nazwę TypStudiow i kliknij przycisk OK. Rys. 16 Tworzenie nowej tabeli 4. Ustal klucz główny dla tabeli • • • Kliknij prawym klawiszem nazwę kolumny. Kliknij opcję Set Primary Key. Zapisz tabelę klikając ikonę dyskietki. Strona 18/26 Włodzimierz Dąbrowski, ski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 17 Tworzenie klucza głównego tabeli 5. Uwórz pozostałe proste tabele • Bazując na poprzednim schemacie postępowania utwórz tabele Stopien i SlowoKlucz zawierające odpowiednio kolumny ID_Stopien i ID_SlowoKlucz obydwie z typem danych varchar(25) ID_SlowoKlucz, archar(25). • Jako rezultat powinieneś zobaczyć listę trzech tabel w polu Tables bazy PraceDyplomowe PraceDyplomowe. Rys. 18 Pozostałe proste tabele bazy PraceDyplomowe 6. Utwórz główne tabele bazy Pora na utworzenie głównej tabeli naszej bazy danych. Tabela PracaDyplomowa jest punktem centralnym bazy i zawiera kolumny ID_Pracy, Temat, Data, Ocena. • Kliknij prawym przyciskiem myszy pole pol Tables i wybierz opcję NewTable NewTable. — — — — — — Wprowadź nazwę dla nowej kolumny ID_Pracy. ID_Pracy Ustal typ danych dla tej kolumny jako smallint.. Wprowadź nazwę dla następnej kolumny jako Temat. Ustal typ danych jako varchar(100). Wprowadź nazwę dla trzeciej kolumny jako Data. Data Jako typ danych ustal datetime. Strona 19/26 Włodzimierz Dąbrowski, ski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 — Wprowadź nazwę dla ostatniej kolumny jako Ocena. Ocena — Jako typ danych ustal smallint. • Dla każdej kolumny odznacz opcję Allow null. • Ustal klucz główny klikając prawym przyciskiem przyciski myszy kolumnę ID_Pracy i wybierając opcję Set Primary Key. • Zapisz tabelę pod nazwą PracaDyplomowa klikając ikonę dyskietki. dyskietki Rys. 19 Główna tabela bazy PraceDyplomowe Następną dużą tabelą jest tabela Osoba przechowująca informacje o osobach wykonujących prace dyplomowe oraz wykładowcach i recenzentach • Kliknij prawym przyciskiem myszy pole pol Tables i wybierz opcję New Table Table. — — — — — — — — Wprowadź nazwę dla nowej kolumny ID_Osoby. ID_Osoby Ustal typ danych dla tej kolumny jako smallint.. Wprowadź nazwę dla następnej kolumny jako Imie. Ustal typ danych jako varchar(50). Wprowadź nazwę dla trzeciej kolumny jako Nazwisko. Nazwisko Jako typ danych ustal varchar(50). Wprowadź nazwę dla ostatniej kolumny jako Nr_Indeksu. Nr_Indeksu Jako typ danych ustal varchar(10). • Dla każdej kolumny odznacz opcję Allow null. • Ustal klucz główny klikając prawym przyciskiem myszy na kolumnie ID_Osoby i wybierając opcję Set Primary Key. • Zapisz tabelę pod nazwą Osoba klikając ikonę dyskietki. dyskietki Rys. 13 Tabela Osoba Strona 20/26 Włodzimierz Dąbrowski, ski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych 7. Utwórz tabele pomocnicze Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 • Kliknij prawym przyciskiem myszy pole pol Tables i wybierz opcję New Table Table. — — — — Wprowadź nazwę dla nowej kolumny ID_Osoby. ID_Osoby Ustal typ danych dla tej kolumny jako smallint.. Wprowadź nazwę dla następnej kolumny jako ID_Pracy. Ustal typ danych jako smallint. • Dla każdej kolumny odznacz opcję Allow null. Ponieważ dla tej tabeli unikalna będzie zarówno jedna jak i druga kolumna, klucz główny możemy założyć na obydwu jednocześnie. jednocześnie • Zaznacz z wciśniętym klawiszem Shift obydwie kolumny. kolumny • Ustal klucz główny klikając prawym przyciskiem myszy na zaznaczeniu i wybierz opcję Set Primary Key. • Zapisz tabelę pod nazwą Autorzy klikając ikonę dyskietki. dyskietki Rys. 14 Tabela Autorzy z kluczem głównym na dwóch kolumnach 8. Utwórz pozostałe tabele pomocnicze • Bazując na poprzednim schemacie postępowania utwórz tabele Slownik i Recenzent, zawierające odpowiednio kolumny ID_SlowoKlucz, ID_Pracy oraz ID_Osoby,, wszystkie z typem danych smallint. • Jako rezultat powinieneś zobaczyć listę wszystkich tabel w polu Tables bazy PraceDyplomowe. Rys. 15 Wszystkie tabele bazy PraceDyplomowe 9. Utwórz związki pomiędzy • Kliknij prawym klawiszem myszy pole pol Database Diagrams bazy PraceDyplomowe PraceDyplomowe. Strona 21/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych tabelami • • • • Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Wybierz opcję New Database Diagram. W nowym oknie dodaj wszystkie nazwy tabel klikając przycisk Add. Kliknij przycisk Close. Kliknij i przeciągnij kursor myszki pomiędzy pole ID_Osoby tabeli Osoba a polem ID_Osoby tabeli Autorzy. Rys. 16 Tworzenie związku pomiędzy tabelami • W nowym oknie dotyczącym właściwości związku kliknij przycisk OK. • Zostanie utworzony klucz obcy w tabeli Autorzy jako identyfikator powiązanej tabeli Osoba. Zatwierdź klikając przycisk OK. Rys. 17 Tworzenie klucza obcego • Powtórz tą operację dla każdego związku pomiędzy tabelami zgodnie z diagramem bazodanowym. Jako rezultat powinieneś otrzymać diagram jak na rys. 18. Strona 22/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 18 Tworzenie pozostałych kluczy obcych 10. Wykonaj kopię zapasową bazy • Zamknij wszystkie okna z diagramem i definicjami tabel. • Kliknij prawym klawiszem myszy na pole PraceDyplomowe. • Z menu wybierz opcję Tasks -> Back Up. Rys. 26 Uruchamienie procedury kopii bezpieczeństwa • W nowym oknie możesz zmienić nazwę pliku kopii bezpieczeństwa i jego domyślną lokację. Kliknij przycisk OK. • Po chwili powinien pojawić się komunikat o prawidłowym zakończeniu tworzenia kopii bezpieczeństwa. Strona 23/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 27 Tworzenie kopii bezpieczeństwa zakończone sukcesem • Kliknij przycisk OK. 11. Odzyskaj bazę danych z kopii bezpieczeństwa • Załóż nową bazę danych o nazwie PraceDyplomowe_TMP. • Kliknij prawym przyciskiem myszki nazwę nowej bazy danych. • Z menu wybierz opcję Tasks -> Restore -> Database. Rys. 28 Odzyskiwanie bazy danych z kopii bezpieczeństwa • • • • W nowym oknie kliknij pole From device. Kliknij ikonę listy wyboru […]. Kliknij przycisk Add. Wskaż lokację pliku z kopią zapasową bazy danych. Strona 24/26 Włodzimierz Dąbrowski, ski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Rys. 29 Wskazywanie pliku z kopią zapasową • • • • Kliknij przycisk OK. Kliknij pole Options z listy po lewej stronie. Zaznacz pole Overwrite an existing database. Kliknij przycisk OK. Odzyskanie bazy danych PraceDyplomowe zakończyło się sukcesem. Możesz sprawdzić, czy nic po drodze nie zginęło, zginęło przeglądając strukturę bazy w obszarze Object Explorer. Strona 25/26 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 3 Instalacja i konfiguracja MS SQL Server 2008 Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Zachęcony sukcesem w utworzeniu bazy danych PraceDyplomowe postanowiłeś ją rozbudować. Przyglądając się uważnie diagramowi dostarczonemu wraz z dokumentacją bazy zauważyłeś, że przy tworzeniu bazy umknęła Ci tabela reprezentująca nośnik. W bazie nie ma też jak dotąd żadnych danych. Postanowiłeś podjąć następujące kroki: • dodać tabelę z typem nośnika pracy dyplomowej • rozbudować bazę o możliwość przechowywania informacji o wydziale i kierunku studenta • dodać możliwość zaznaczenia liczby dostarczonych kopii pracy z podziałem na wersję papierową i elektroniczną • dodać możliwość umieszczenia przez recenzenta recenzji pracy i własnej oceny • zastanawiasz się też, czy byłaby możliwość automatycznego obliczania średniej z oceny z recenzji, obrony i promotora pracy • zasilić bazę w odpowiednią ilość danych Tak przygotowaną bazę należy skopiować do bezpiecznej lokacji. Bazując na opcjach dostępnych w narzędziu Management Studio zastanów się, jak najprościej możesz zarządzać kopiami bezpieczeństwa. Strona 26/26 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4 Wersja 1.0 Wewnętrzna struktura bazy danych Spis treści Wewnętrzna struktura ......................................................................................................................... 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 8 Porady praktyczne ..................................................................................................................... 11 Uwagi dla studenta .................................................................................................................... 12 Dodatkowe źródła informacji..................................................................................................... 12 Laboratorium podstawowe ................................................................................................................ 13 Problem 1 (czas realizacji 25 min).............................................................................................. 13 Problem 2 (czas realizacji 20 min).............................................................................................. 17 Laboratorium rozszerzone ................................................................................................................. 19 Zadanie 1 (czas realizacji 90 min)............................................................................................... 19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Informacje o module Opis modułu W tym module znajdziesz informacje, w jaki sposób w SQL Server 2008 przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki sposób przechowywane są podstawowe obiekty w bazie danych. Dowiesz się również w jaki sposób należy wyznaczać wielkość pliku danych. Cel modułu Celem modułu jest zapoznanie czytelnika z wewnętrzną strukturą przechowywania danych w SQL Server 2008. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • Wiedział, w jaki sposób zbudowane są strony danych (nagłówek strony, wiersze danych, tablica przesunięć wierszy) • potrafił badać zawartość stron danych używamy instrukcji DBCC PAGE, która umożliwia oglądanie nagłówka strony, wierszy danych i tablicy przesunięć wierszy • wiedział jak wygląda struktura wierszy danych • potrafił wyświetlić i przeanalizować wiersze danych zapisane w tabelach Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • potrafić budować diagram ERD (patrz: moduł 1) • wiedzieć, w jaki sposób tworzy się nową bazę danych • wiedzieć, w jaki sposób tworzy się podstawowe obiekty bazy danych Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na rys. 1, przed przystąpieniem do realizacji tego modułu należy zapoznać się z materiałem zawartym w modułach 1 i 3. Dodatek Moduł 13 Moduł 1 Moduł 12 Moduł 11 Moduł 2 Moduł 4 Moduł 10 Moduł 3 Moduł 9 Moduł 5 Moduł 8 Moduł 6 Moduł 7 Rys. 1 Mapa zależności modułu Strona 2/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Przygotowanie teoretyczne Przykładowy problem Jak zapewne wiesz, z SQL Server 2008 można korzystać w bardzo efektywny sposób nie mając wiedzy na temat sposobu wewnętrznej organizacji danych, jednak w wielu przypadkach dobrze jest wiedzieć, jak takie przechowywane dane są zorganizowane. Ułatwia to zrozumienie wielu mechanizmów funkcjonujących w SQL Server 2008. 2008 Typowy problem pojawiający się w tym zagadnieniu jest następujący. Mamy zaprojektowaną bazę danych, zbudowany diagram ERD, zdefiniowane relacje oraz przypisane atrybutom typy danych. Nie zawsze jednak etap projektowania jest przeprowadzony we właściwy sposób. Wiedząc w jaki sposób zorganizowane organizowane są dane możemy lepiej dobierać typy danych na atrybutach mając świadomość tego, gdzie fizycznie są one umieszczone. Możemy uniknąć pewnych błędów, na przykład co do doboru wielkości typu danych. Szczególnie duże znaczenie ma to w przypadku obiektów typu OLE. Kolejnym problemem pojawiającym się w tym zagadnieniu jest próba odpowiedzenia sobie na pytanie, jaka powinna być początkowa wielkość pliku danych i dziennika transakcji w momencie, kiedy wiemy, ile danych ma zostać wpisanych do naszej bazy. Na podstawie tej t informacji w kolejności możemy ustawić, o ile pliki danych i dziennika transakcji mają wzrosnąć. Z punktu widzenia administracji bazą danych są to bardzo ważne problemy, które możemy rozwiązać dzięki znajomości budowy wewnętrznej struktury w SQL Server 2008. Podstawy teoretyczne Chociaż z SQL QL Server można korzystać efektownie bez znajomości wewnętrznej budowy, zrozumienie szczegółów przechowywania danych pomaga w pisaniu wydajnych aplikacji. Gdy tworzy się tabelkę, do wielu katalogów systemowych wstawiane wstawiane są rekordy z informacjami niezbędnymi do jej obsługi. Wiersze są dodawane do katalogów systemowych sysobjects, sysindexes i syscolumns. syscolumns Dla każdej nowo utworzonej tabeli do widoku sysobjects dodawany jest wiersz zawierający nazwę, identyfikator obiektu oraz właściciela nowej tabeli. Widok syscolumns otrzymuje dla każdej kolumny z nowej tabeli informacje zawierające nazwę kolumny, typ danych i długość. Każda z kolumn otrzymuje unikatowy identyfikator, który wyznacza kolejność, w jakiej zostały kolumny zdefiniowane w tabeli. Na rys. 2 pokazano wiersze, które dodawane są do widoku sysobjects i columns podczas tworzenia tabeli Ksiazka. Rys. 2 Informacje katalogowe zapisane po utworzeniu tabeli Strona 3/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Strony danych Strony danych są strukturami zawierającymi wszystkie dane (z wyjątkiem text i image), których stały rozmiar wynosi 8 KB (8192 bajtów). Składają się one z trzech elementów (rys. 3): nagłówka strony, wierszy danych i tablicy przesunięć wierszy. Rys. 3 Struktura strony danych Nagłówek strony Nagłówek strony danych zawiera pierwszych 96 bajtów strony danych. Informacje zawarte w nagłówku pokazano w tab. 1. Tab. 1 Informacje zawarte w nagłówku strony Pole Zawartość m_poleID Numer pliku i numer strony bazy danych. m_nextPage Numer pliku i nazwa następnej strony. Parametr wyświetlany jeżeli bieżąca strona należy do łańcucha stron. m_prev_Page Numer pliku i nazwa poprzedniej strony. Parametr wyświetlany jeżeli bieżąca strona należy do łańcucha stron. m_objID Identyfikator obiektu, do którego należy bieżąca strona. m_lsn Numer LSN używany do modyfikowania tej strony. m_slotCnt Łączna liczba wierszy tej strony. m_level Poziom strony w indeksie. Dla stron liści wartość zawsze równa 1. IndexId Identyfikator indeksu strony. Dla stron danych zawsze wartość równa 1. m_freeData Przesunięcie bajtowe pierwszego wolnego obszaru na tej stronie. pminlen Liczba bajtów części wiersza zawierającej pola o stałej długości. m_freeCnt Liczba niewykorzystanych bajtów na stronie. m_reservedCnt Liczba bajtów zarezerwowanych przez wszystkie transakcje. m_xactReserved Liczba bajtów zarezerwowanych przez ostatnio uruchomiona transakcje. m_flagBits 2-bajtowy ciąg bitów zawierający dodatkowe informacje o stronie. Strona 4/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Wiersze danych Za nagłówkiem znajduje się obszar, w którym przechowywane są dane tabeli. Maksymalny rozmiar pojedynczego wiersza danych wynosi 8060 bajtów. Wiersz danych nie może obejmować kilku stron. Wyjątek stanowią kolumny, którym przypisano typ image lub text. Należy zauważyć, iż liczba wierszy może się różnić w zależności od struktury tabeli oraz przechowywanych danych. Tabele, które posiadają kolumny o stałej długości będą zawierały na każdej stronie taką samą liczbę wierszy danych, natomiast tabele zawierające kolumny o różnych długościach będą zawierały na każdej stronie różną liczbę wierszy danych. Tablica przesunięć wierszy Tablica przesunięć wierszy jest blokiem 2-bajtowych wpisów, z których każdy stanowi przesunięcie na stronie, od którego zaczynają się właściwe dane wiersza. Należy pamiętać o tym, że bajty te nie są zapisywane w wierszu razem z danymi. Wpływają one jednak na liczbę wierszy mieszczących się na stronie. Badanie stron danych Do badania zawartości stron danych używamy instrukcji DBCC PAGE, która umożliwia oglądanie nagłówka strony, wierszy danych i tablicy przesunięć wierszy dla każdej strony bazy danych. Polecenia tego może używać tylko administrator systemu. Składnię polecenia DBCC PAGE pokazano poniżej: DBCC PAGE ({id_bazy | nazwa_bazy}, numer_pliku, numer_strony[, opcje]) W tab. 2 zostały opisane podstawowe parametry instrukcji DBCC PAGE. Tab. 2 Parametry polecenia DBCC PAGE Parametr Opis id_bazy Identyfikator bazy danych. nazwa_bazy Nazwa bazy danych. numer_pliku Numer pliku zawierającego stronę numer_strony Numer strony w obrębie pliku. opcje Parametr wartości: ustawiany opcjonalnie przyjmuje następujące • 0 – domyślnie. Zwraca informacje o nagłówku bufora i nagłówku strony. • 1 – zwraca informacje o nagłówku bufora, nagłówku strony, każdym wierszu (osobno) oraz tablicę przesunięć wierszy. • 2 – zwraca informacje o nagłówku bufora, nagłówku strony, zawartość całej strony oraz tablicę przesunięć wierszy. • 3 – zwraca informacje o nagłówku bufora, nagłówku strony, każdym wierszu (osobno) oraz tablicę przesunięć wierszy, a po każdym wierszu listę poszczególnych wartości kolumn. Przykładowy wynik działania instrukcji DBCC PAGE pokazano na rys. 4. Strona 5/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Rys. 4 Przykładowy wydruk instrukcji DBCC PAGE Wydruk instrukcji DBCC PAGE składa się z czterech sekcji: 1. BUFFER – przedstawia informacje o buforze danej strony. 2. PAGE HEADER – pokazuje dane dla pól nagłówka strony. 3. DATA – zawiera informacje o każdym wierszu tabeli. Dane strony dzielone są na trzy części. Część pierwsza (lewa kolumna) określa położenie bajtowe w obrębie wiersza, część druga (środkowe cztery kolumny) zawiera właściwe dane zapisane na stronie, zaś część trzecia (prawa kolumna) zawiera znakową reprezentacje danych. 4. OFFSET TABLE – pokazuje zawartość tablicy przesunięć wierszy, która znajduje się na końcu strony. Pierwszy wiersz fizycznie znajdujący się na stronie jest wierszem numer 6, z przesunięciem w tablicy przesunięć równym 96. Struktura wiersza danych Na rys. 5 pokazano ogólną strukturę wierszy danych. Na pierwszym miejscu znajdują się dane kolumn o stałej długości. Za nimi znajdują się dane wszystkich kolumn o zmiennej długości. Strona 6/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Rys. 5 Struktura wierszy danych W każdym bloku o stałej długości lub danych o zmiennej długości dane są przechowywane w kolejności w jakiej kolumny zostały zdefiniowane przy tworzeniu tabeli. Przyjrzyjmy się poniższemu przykładowi: CREATE TABLE Proba { Kolumna_1 int Kolumna_2 char(25) Kolumna_3 varchar(60) Kolumna_4 int Kolumna_5 varchar(20) } NOT NULL, NOT NULL, NULL, NOT NULL, NOT NULL W powyższym przykładzie w części związanej z danymi o stałej długości wiersze będą zawierały najpierw dane kolumny Kolumna_1 następnie Kolumna_2 i wreszcie Kolumna_4. W następnej kolejności będą występowały dane o zmiennej długości związane odpowiednio z Kolumną_3 i Kolumna_5. Tablice przesunięć kolumn Wiersz danych, który ma kolumny o stałej długości, nie zawiera licznika zmiennych kolumn ani tablicy przesunięć kolumn. Wiersz danych, w którym znajdują się kolumny o zmiennej długości, zawiera tablicę przesunięć kolumn. Połączenia stron W SQL Server 2008 strony łączone są ze sobą na każdym poziomie indeksu. Jedynym sposobem, w jaki SQL Server określa, które strony należą so tabeli, jest zaglądanie do stron IAM tabeli. Poleceniem DBCC EXTENTINFO można uzyskać listę wszystkich obszarów należących do obiektu. W poniższym przykładzie pokazano listę wszystkich obszarów należących do obiektu Orders w bazie danych Northwind. Osiem pierwszych wierszy wskazuje rozmiar obszaru (ext_size) równy 1. Wynika to z tego, że pierwszych osiem stron w tabeli alokowanych jest z obszarów mieszanych. Gdy tabela osiągnie osiem stron, wówczas SQL Server przydziela jej obszary jednolite po osiem stron każdy. Strona 7/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Rys. 6 Wydruk wszystkich obszarów należących do obiektu Rozmiar danych Znając strukturę tabel oraz typy danych kolumn w bazie danych, możemy oszacować rozmiar pliku danych. Procedura szacowania rozmiaru pliku danych przebiega według następującego schematu: 1. Na podstawie tabeli określamy rozmiar pojedynczego wiersza. Dla typów danych o stałym rozmiarze dodajemy liczbę bajtów poszczególnych kolumn, zaś dla typów o zmiennym rozmiarze przyjmujemy wartość średnią. 2. Następnie maksymalną liczbę bajtów na pojedynczej stronie danych (8060) dzielimy przez szacunkową wielkość wiersza. W wyniku otrzymujemy liczbę wierszy mieszczących się na stronie. 3. Następnie szacunkową liczbę wierszy dzielimy przez otrzymaną liczbę wierszy na stronie. W ten sposób otrzymujemy liczbę stron niezbędnych do zapisania danych znajdujących się w tabeli. 4. W kolejnym kroku otrzymaną liczbę stron mnożymy przez 8196 B (rozmiar pojedynczej strony), co daje nam w wyniku wielkość pliku danych. Przykładowe rozwiązanie Wyświetlanie wierszy danych Zanim będziesz mógł wyświetlić wiersze danych w twojej tabeli w bazie danych będziesz musiał odpowiednio zgromadzić informacje na temat numeru pliku i numeru strony na której interesujące Cię dane są zawarte. Wyobraźmy sobie, że stworzyliśmy tabelę Ksiazka o postaci:. CREATE TABLE [dbo].[Ksiazka] ( [ID_Ksiazka] [int] [Tytul] [varchar](50) [Autor] [varchar](30) [Rok] [char](4) IDENTITY(1,1) NOT NULL, NULL, NULL, NULL ) Do nowo powstałej tabeli Ksiazka wpisujemy trzy dowolne rekordy. Podczas tworzenia tabeli Ksiazka do widoku systemowego: • sysindexes wstawiany jest nowy wiersz, przechowujący informację o nowym obiekcie (tabela Ksiazka), który przed chwilą został stworzony, co możemy zaobserwować na rys. 7. Strona 8/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Rys. 7 Wstawiony wiersz do tabeli sysindexes • syscolumns wstawiane są wiersze, przechowujące informację na temat poszczególnych atrybutów, z których złożona jest tabela Ksiazka, co możemy zaobserwować na rys. 8. Rys. 8 Wstawione wiersze do tabeli syscolumns W celu poprawnego uruchomienia polecenia DBCC PAGE należy pobrać odpowiednią wartość z widoku sysindexes (0x9D0000000100 0x9D0000000100) i przekształcić ją na adres pliku strony (kolumna first na rys. 7). ). W pierwszym kroku należy zamienić bajty, aby uzyskać ciąg 00 01 00 00 00 9D. 9D Pierwsze dwie grupy (00 00 01) 01 reprezentują 2-bajtowy bajtowy numer pliku, a ostatnie ostatn cztery grupy (00 00 00 9D) – numer strony. Zatem plik ma numer 1, a strona ma numer 157. Na rys. 9 pokazano faktyczną zawartość wierszy tabeli Ksiazki z bazy azy danych Biblioteka. Rys. 9 Wiersze danych tabeli Ksiazki Strona 9/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Polecenie DBCC PAGE wyświetla wiersze danych w czterech grupach po 4 bajty naraz. W obrębie każdej z grup bajty wyświetlane są w odwrotnej kolejności. Szacowanie wielkości pliku danych W przykładzie tym posłużymy się wcześniej stworzona tabelą Ksiazki oraz stworzymy nową tabelę Czytelnicy oraz tabelę techniczna Ksiazki_Czytelnicy. Dla tej tabeli określimy wielkość pliku danych. 1. Określamy rozmiar pojedynczego wiersza w tabeli Ksiazki, Czytelnicy oraz Ksiazki_Czytelnicy. Tabela Ksiazki Kolumna Typ Rozmiar ID_Ksiazka int 4 bajty Tytul varchar(200) 200 bajtów Autor varchar(50) 50 bajtów Rok char(4) 4 bajty ID_Czytelnik int 4 bajty Suma 262 bajtów Kolumna Typ Rozmiar ID_Czytelnik int 4 bajty Nazwisko varchar(50) 50 bajtów Imie varchar(30) 30 bajtów Data_urodzenia smalldatatime 4 bajty ID_Ksiazka int 4 bajty Suma 92 bajtów Tabela Czytelnicy Tabela Ksiazki_Czytelnicy Kolumna Typ Rozmiar ID_Ksiazka int 4 bajty ID_Czytelnik int 4 bajty Suma 8 bajtów 2. Wyznaczamy liczbę wierszy mieszczących się na stronie. W naszym przypadku mamy: Ksiazki = 8060 / 262 B = 31 wierszy na stronie Czytelnicy = 8060 / 92 B = 88 wierszy na stronie Ksiazki_Czytelnicy = 8060 / 8 B = 1008 wierszy na stronie Strona 10/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura 3. Przy założeniu, że w tabeli Ksiazki będzie znajdowało się 5000 rekordów, w tabeli Czytelnicy 2000 rekordów a w tabeli Ksiazki_Czytelnicy 22000 rekordów, wyznaczamy liczbę stron niezbędnych do zapisania danych znajdujących się w tabeli. Ksiazka = 5000 rekordów / 31 wiersze = 162 strony Czytelnicy = 2000 rekordów / 88 wierszy = 23 strony Ksiazki_Czytelnicy = 22000 rekordów / 1008 wierszy = 22 strony 4. Sumujemy liczbę wszystkich stron 162 strony + 23 strony + 22 strony = 207 stron 5. Obliczamy wielkość pliku danych. 8196 B * 207 stron = 1696572 B= 1,7 MB Porady praktyczne • Widok systemowy sysindex zawiera dwie ważne kolumny, które reprezentują numery stron w obrębie bazy danych: id i first. Kolumna id przechowuje numer identyfikacyjny bazy danych. Kolumna first przechowuje wartość, powyżej której znajdują się fizycznie wpisane rekordy (numer strony danych) oraz numer pliku danych. • W sytuacji, kiedy tabela przechowuje dane typu OLE (text, ntext lub image), rzeczywiste dane mogą nie być przechowywane na stronach razem z resztą danych wiersza. Wynika to z faktu, iż dane tego typu zajmują dużo przestrzeni dyskowej a zatem ich fragmenty mogą być przechowywane w różnych plikach oraz na różnych stronach danych. • Z racji tego, iż obiekty typu OLE zajmują dużo przestrzeni dyskowej pamiętaj, że należy podczas wyboru tego typu danych kilkakrotnie zastanowić się czy jest to niezbędny typ danych i czy nie można zastąpić go innym lżejszym typem. • W celu poprawnego uruchomienia polecenia DBCC PAGE, należy prawidłowo pobrać odpowiednia wartość z widoku systemowego sysindexes i przekształcić ją na adres pliku i strony. • Pamiętaj, że z widoku sysindexes pobieramy zawartość kolumny first w postaci heksadecymalnej. W pierwszym kroku należy zawsze zamienić bajty. Uzyskana wartość składa się z dwóch części: numeru pliku (pierwsze dwie grupy) oraz numeru strony (ostatnie cztery grupy). • Widoki systemowe sysindexes i syscolumns przechowują wiele różnorodnych informacji na temat obiektów w ramach bazy danych (data utworzenia, data modyfikacji, itp.) przydatnych w skutecznych i sprawnych pracach administracyjnych. • Pamiętaj, w wielu sytuacjach szacowanie wielkości pliku danych i pliku dziennika transakcji jest rzeczą bardzo ważną z punktu widzenia administracji serwerem bazodanowym. Ma to szczególne znaczenie w przypadku przenoszenia bazy danych z innego systemu zarządzania bazą danych, gdzie znana jest liczba rekordów w poszczególnych obiektach bazy danych. • W przypadku, obliczenia wielkości pliku danych wychodzi wartość niecałkowita (patrz przykładowe obliczenie wielkości pliku danych), np. 5.48MB, wówczas w celu zapewnienia odpowiedniej przestrzeni na importowane dane należy ustawić wielkość początkową pliku danych na 6.0MB. Microsoft SQL Server 2008 nie daje możliwości stworzenia bazy danych z plikiem danych wielkości niecałkowitej. • Pamiętaj, w systemowej bazie danych tempdb dostarczonej z serwerem Microsoft SQL Server 2008, ustawione są parametry wyjściowe Twojej bazy danych. Jeżeli zmienisz cokolwiek w tej bazie danych wszystkie bazy tworzone w ramach serwera będą pobierały jej wartości początkowe. • Pamiętaj nigdy nie kasuj baz danych dostarczonych wraz z Microsoft SQL Server 2008. Operacja ta może doprowadzić do niestabilnej pracy serwera a w niektórych sytuacjach wręcz do jego poważnego uszkodzenia. Strona 11/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura • Pamiętaj w opcji SQL Server 2008 przy tworzeniu bazy danych mamy możliwość ustawienia wielkości pliku danych oraz wielkości wzrostu pliku danych. Wielkości te są liczbami całkowitymi z dokładnością do 1 MB. Dobrą praktyką jest ustawienie parametru wzrostu pliku danych jako 30% wartości pliku danych (jednak nie mniej niż 1MB). Przykładowo dla pliku danych wielkości 10MB powinniśmy ustawić wielkość wzrostu pliku danych na poziomie 3MB. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • rozumiesz, co oznacza strona danych, nagłówek strony, wiersze danych, tablica przesunięć wierszy • rozumiesz składnię instrukcji DBCC • umiesz przeliczać system heksadecymalny na system dziesiętny • znasz podstawowe typy danych w SQL Server 2008 • umiesz obliczać wielkość pliku danych Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Jeffrey D. Ullman, Jennifer Widom, Podstawowy wykład z systemów baz danych, WNT, 2000 W książce autor w przystępny i zrozumiały sposób przedstawia między innymi jak zorganizowane jest przechowywanie danych oraz pokazuje, w jaki sposób można odczytać strony danych. 2. Christopher J. Date, Wprowadzenie do systemów baz danych, WNT, 2000 W książce tej znajdziemy dużo szczegółowych informacji na temat teorii przechowywania danych w bazach danych. Znajdzie cie w niej również szczegółową informację na temat polecenia DBCC, wraz z wieloma wariantami jego użycia w celu przeglądania danych na bardzo niskim poziomie. Pozycja szczególnie polecana dla osób pragnących poszerzenie swojej wiedzy z tej tematyki. 3. Ramez Elmasri, Shamkant B. Navathe, Wprowadzenie do systemów baz danych, Wydawnictwo Helion, 2005 Podobnie jak w poprzedniej pozycji, w książce tej znajdziemy bardzo szczegółowe informacje na temat teorii przechowywania danych w bazach danych. Pozycja szczególnie polecana dla osób pragnących poszerzyć swoją wiedzę z tej tematyki. Strona 12/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Laboratorium podstawowe Problem 1 (czas realizacji 25 min) Jesteś administratorem w firmie National Insurance. Programiści modernizujący aplikacje dostępową do twojej bazy danych poprosili Cię jako eksperta o zaprezentowanie sposobu przechowywania danych w SQL Server 2008. Ma to im pomóc w zrozumienia sposobu przechowywania danych i ulepszeniu niskopoziomowego niskopoziomowego działania aplikacji. Zadanie Tok postępowania 1. Utwórz testową bazę i tabelę • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. Studio • W oknie logowania kliknij Connect. 2. Utwórz bazę • Wykonaj poniższy kod tworzący bazę danych Dyplomowe: Dyplomowe -- (1) Ustawiamy sie na baze danych master USE master GO -- (2) sprawdzmy, czy taka baza juz istnieje; -- jesli tak, to usuwamy ja IF EXISTS (SELECT * FROM master..sysdatabases WHERE name = 'Dyplomowe') DROP DATABASE Dyplomowe GO -- (3) Tworzymy baze danych Dyplomowe CREATE DATABASE Dyplomowe ON ( NAME = 'Dyplomowe', FILENAME = N'C:\Program N'C: Program Files\Microsoft Files SQL Server Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Dyplomowe.mdf' Dyplomowe.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = 'Dyplomowe_log', FILENAME = N'C:\Program N'C: Program Files\Microsoft Files SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Dyplomowe.ldf' Server Dyplomowe.ldf' , SIZE = 1536KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) GO • Stwórz dwie tabele: tabele Osoba i Praca. W tym celu wykonaj ykonaj poniższy kod: kod -- (3) Tworzenie przykladowych dwoch tabel: Osoba i Praca CREATE TABLE Osoba( ID_Osoby smallint NOT NULL, Imie varchar(20) NOT NULL, Nazwisko varchar(50) NOT NULL, Nr_Indeksu varchar(6) NOT NULL Strona 13/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura CONSTRAINT [PK_Osoba] PRIMARY KEY CLUSTERED ( [ID_Osoby] ASC ) ) CREATE TABLE Praca( ID_Pracy smallint NOT NULL, Temay varchar(200) NOT NULL, Data smalldatetime NOT NULL, Ocena smallint NOT NULL CONSTRAINT [PK_Praca] PRIMARY KEY CLUSTERED ( [ID_Pracy] ASC ) ) • Uzupełnij tabele Osoba i Praca przykładowymi danymi. 3. Sprawdź zawartość widoków systemowych • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\widoki_systemowe.sql i kliknij Open. Open • Na utworzonej bazie danych Dyplomowe wykonaj poniższe zapytanie: zapytanie -- (1) Ustaw się n abaze danych Dyplomowe USE Dyplomowe GO -- (2) Informacja o wpisie w widoku sysobjects SELECT ELECT name, object_id, type, type_desc, create_date, modify_date FROM [Dyplomowe].[sys].[objects] WHERE name='Osoba' OR name='Praca' GO • W wyniku powinieneś otrzymać informację na temat wpisu w widoku systemowym sysobjects. Rys. 10 Wpis w widoku systemowym sysobjects W wyniku wykonania zapytania na tabeli systemowej sysobject otrzymasz między innymi informację o numerze identyfikacyjnym obiektu tabeli object_id.. Numer ten będzie Ci pomocny w wyszukaniu odpowiedniego wpisu w widoku systemowym syscolumns. syscolumns • Wykonaj zapytanie: -- (3) informacja na temat wpisu w widoku systemowym syscolumns sy SELECT object_id, name, column_id, system_type_id, max_length, collation_name FROM [Dyplomowe].[sys].[columns] where object_id='85575343' OR object_id='117575457' GO • W wyniku powinieneś otrzymać informację na temat wpisu w widoku systemowym syscolumns. Strona 14/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Rys. 11 Wpis w widoku systemowym syscolumns • Wykonaj zapytanie: -- (4) Informacja na temat wpisu w widoku systemowym sysindexes SELECT id, first, root, minlen, name, rows FROM [Dyplomowe].[sys].[sysindexes] WHERE name='PK_Osoba' OR name='PK_Praca' GO • W wyniku powinieneś otrzymać informację na temat wpisu w widoku systemowym sysindexes. Rys. 12 Wpis w widoku systemowym sysindexes Informacja z kolumny first w widoku systemowym zawiera informacje na temat numeru pliku oraz numeru strony, na której przechowywane są dane z tabeli. 4. Zbadaj strony danych • Dla tabeli Osoba odczytaj wartość kolumny first z widoku sysindexes (0x9B0000000100 0x9B0000000100) i przekształć ją na adres pliku strony. strony • Zamień bajty, aby uzyskać ciąg 00 01 00 00 00 9B.. • Pierwsze dwie grupy (00 ( 01) reprezentują 2-bajtowy bajtowy numer pliku, a ostatnie cztery grupy (00 ( 00 00 9B)) numer strony. Zatem plik ma numer 1 a strona ma numer 155. 1, • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\strona_danych.sql i kliknij Open.. • Wywołaj instrukcję BDCC PAGE z ustalonymi wcześniej parametrami: parametrami DBCC TRACEON(3604) GO DBCC PAGE (Dyplomowe,1,155,1) Instrukcja DBCC TRACEON(3604) nakazuje żeby SQL Server wyświetlił strony danych na ekranie monitora w sposób przyjazny dla użytkownika. • W wyniku powinieneś otrzymać informacje jak na rys. 13. Strona 15/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Rys. 13 Wyświetlona strona danych Strona 16/19 Moduł 4 Wewnętrzna struktura Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Problem 2 (czas realizacji 20 min) Jesteś administratorem w firmie National Insurance. Wiesz, iesz, że do twojej bazy danych maja zostać zaimportowane nowe dane. W tym celu musisz przeprojektować swoja bazę danych i obliczyć wielkość początkową pliku danych i pliku dziennika transakcji. Zadanie Tok postępowania 1. Utwórz testową bazę • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Mirosoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Managemen Studio. • W oknie logowania kliknij Connect. • Rozwiń węzeł Database i wybierz PraceDyplomowe • W obrębie bazy danych PraceDyplomowe rozwiń węzeł Database Diagram Diagram. • Powinieneś zobaczyć diagram taki jak na Rys. 14. Rys. 14 Diagram bazy danych anych PraceDyplomowe W celu wykonania tego zadania należy wykonać moduł 2 i moduł 3 związany z projektowaniem i implementacją bazy danych. Dla zaprojektowanej bazy danych anych będziemy szacowali wielkość pliku danych. 2. Oszacuj wielkość pliku danych • Na podstawie tabeli określ rozmiar pojedynczego wiersza: wiersza Recenzja = ID_Osoby(2B) + ID_Pracy(2B) + ID_Ocena(2B) = 6B Osoba = ID_Osoby(2B) + Imie(20B) + Nazwisko(50B) + Nr_Indeksu(int)(4B) + ID_Stopien(2B) = 78B StopienNaukowy = ID_Stopien(2B) + Stopien(25B) = 27B Autorzy = ID_Osoby(2B) + ID_Pracy(2B) = 4B Slownik = ID_SlowoKlucz(2B) + ID_Pracy(2B) = 4B SlowoKlucz = ID_SlowoKlucz(2B) + SlowoKlucz(25B) = 27B Strona 17/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura TypStudiow = ID_TypStudiow(2B) + NazwaTypu(15B) = 17B Ocena = ID_Ocena(2B) + Ocena(4B) = 6B PracaDyplomowa = ID_Pracy(2B) + Temat (char500)(500B) + Data(8B) + ID_Ocena(2B) + ID_TypStudiow(2B) + ID_Promotor(2B) = 516B • Wyznacz liczbę stron niezbędnych do zapisania danych znajdujących się w tabelach: Recenzja = 8540 rekordów / 1343 wierszy = 7 stron Osoba = 5000 rekordów / 103 wierszy = 49 stron StopienNaukowy = 4 rekordy / 298 wierszy = 1 strona Autorzy = 4270 rekordów / 2015 wierszy = 3 strony Slownik = 12810 rekordów / 2015 wierszy = 7 stron SlowoKlucz = 500 rekordów / 298 wierszy = 2 strony TypStudiow = 3 rekordy / 474 wierszy = 1 strona Ocena = 4 rekordy / 1343 wierszy = 1 strona PracaDyplomowa = 5000 rekordów / 15 wierszy = 334 • Zsumuj liczbę stron: Liczba stron = 405 stron • Otrzymaną liczbę stron pomnóż przez 8196B (rozmiar pojedynczej strony), co powinno dać w wyniku wielkość pliku danych: Wielkość pliku danych = Liczba stron * 8196B = 405 * 8196B = = 3 319 380 B = 3,32 MB Strona 18/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 4 Wewnętrzna struktura Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Jesteś głównym administratorem sytemu bazodanowego w firmie BARKA, która zajmuje się inwestycjami na giełdzie papierów wartościowych. Kierownictwo firmy w wyniku przejęcia mniejszej firmy TFI START zarządzającej funduszami inwestycyjnymi podjęło decyzje o modernizacji aplikacji dostępowej do bazy danych oraz rozbudowie istniejącej bazy danych. W związku z tym pomiędzy Tobą a programistami aplikacji dostępowej powinna istnieć ścisła współpraca. W celu ulepszeniu niskopoziomowego działania aplikacji poproszono Cię, jako eksperta, o zaprezentowanie sposobu przechowywania danych w SQL Server 2008. Z drugiej strony wiesz, że po rozbudowie do twojej bazy danych maja zostać zaimportowane nowe dane za okres ostatnich 5 lat. W tym celu musisz przeprojektować swoja bazę danych i obliczyć wielkość początkową pliku danych i pliku dziennika transakcji. Zadania, jakie przed tobą zostały postawione, są następujące: 1. Pokaż programistom, w jaki sposób zorganizowane jest przechowywanie danych w SQL Server 2008. 2. Przeprojektuj istniejącą bazę danych. 3. Oblicz, jaka powinna być wielkość pliku danych dla przeprojektowanej bazy danych. Strona 19/19 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 5 Wersja 1.0 Język SQL – DCL, DDL Spis treści Język SQL – DCL, DDL............................................................................................................................ 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 7 Porady praktyczne ..................................................................................................................... 11 Uwagi dla studenta .................................................................................................................... 12 Dodatkowe źródła informacji..................................................................................................... 12 Laboratorium podstawowe ................................................................................................................ 14 Problem 1 (czas realizacji 15 min).............................................................................................. 14 Problem 2 (czas realizacji 30 min).............................................................................................. 15 Laboratorium rozszerzone ................................................................................................................. 20 Zadanie 1 (czas realizacji 90 min)............................................................................................... 20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Informacje o module Opis modułu Język SQL został opracowany w 1987 roku z myślą o relacyjnych bazach danych. Składa się on z trzech składowych: języka definiowania danych (DDL), języka sterowania danymi (DCL) oraz języka operowania na danych (DML). W module tym znajdziesz podstawowe instrukcje języka definiowania danych – języka SQL DDL (z ang. Data Definition Language) oraz języka sterowania danymi – języka SQL DCL (z ang. Data Control Language). Cel modułu Celem modułu jest zaprezentowanie podstaw języka SQL DCL i DDL. W module tym pokazano składnię częściową instrukcji oraz przykładowe ich użycie. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • potrafił użyć podstawowych instrukcji języka T-SQL DDC • potrafił użyć podstawowych instrukcji języka T-SQL DDL • rozumiał mechanizm zarządzania uprawnieniami dostępu do obiektów bazy danych • rozumiał mechanizm manipulowania bazą danych i jej obiektami Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • wiedzieć w jaki sposób stworzyć bazę danych wraz z jej podstawowymi obiektami • wiedzieć, w jaki sposób poruszać się po Microsoft SQL Server Menagement Studio • wiedzieć, w jaki sposób należy zakładać użytkowników i przypisywać ich do bazy danych Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na rys. 1, przed przystąpieniem do realizacji tego modułu należy zapoznać się z materiałem zawartym w module 3. Rys. 1 Mapa zależności modułu Strona 2/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Przygotowanie teoretyczne Przykładowy problem Jak zapewne wiesz, z bazy danych może korzystać wielu użytkowników, którzy mogą dysponować różnymi prawami dostępu do różnych obiektów w bazie danych. Najgorszym rozwiązaniem jakie może istnieć to pełne zaufanie do osób korzystających z bazy i przydzielenie im pełnych praw. Ze względu na bezpieczeństwo danych zawartych w bazie, warto stosować zasadę ograniczonego zaufania do użytkownika. Z tego powodu należy zastanowić się, jakie uprawnienia należy przydzielić poszczególnym użytkownikom lub grupom użytkowników. Dobrze jest wiedzieć, w jaki sposób można nadawać, odmawiać i cofać prawa dostępu. W kolejnym kroku należy rozważyć, czy użytkownik powinien mieć dostęp do całego obiektu typu tabela lub widok, czy może wystarczy mu dostęp do poszczególnych kolumn. Ze względu na bezpieczeństwo, administrator powinien zastanowić się, czy lepszym rozwiązaniem nie byłoby umożliwienie użytkownikowi lub grupie użytkowników dostępu do obiektów programowalnych typu procedury składowane, które wprowadzają kolejny stopień bezpieczeństwa i maskują fizyczną strukturę bazy danych. Podstawy teoretyczne W części tej poznasz podstawy języka T-SQL DCL (ang. Data Control Language) i T-SQL DDL (ang. Data Definition Language). Dowiesz się, w jaki sposób nadawać, odmawiać i usuwać prawa do wykonywania operacji na poszczególnych obiektach baz danych, takich jak tabele i widoki, oraz w jaki sposób zarządzać dostępem do programowalnych obiektów. Nauczysz się tworzyć, modyfikować i usuwać podstawowe obiekty. Polecenia DCL Instrukcje języka DCL służą do zarządzania uprawnieniami dostępu do obiektów bazy. Najważniejszymi poleceniami języka DCL są instrukcje: • GRANT – pozwala użytkownikowi lub roli na wykonywanie operacji określonej przez nadane uprawnienie. • DENY – odmawia użytkownikowi lub roli określonego uprawnienia i zapobiega odziedziczeniu go po innych rolach. • REVOKE – usuwa uprzednio nadane lub odmówione uprawnienie. Modyfikowanie dostępu do tabel Dostęp do tabeli należy do efektywnych uprawnień, jakimi dysponuje użytkownik. Dostępem tym można sterować poprzez zarządzanie uprawnieniami na poziomie tabel. Uprawnienia, którymi można zarządzać, zostały przedstawione w tab. 1. Tab. 1 Uprawnienia, którymi można zarządzać na poziomie tabel Usprawnienie Opis ALTER Umożliwia modyfikowanie właściwości tabeli CONTROL Zapewnia uprawnienia właściciela DELETE Umożliwia usuwanie wierszy tabeli INSERT Umożliwia wstawienia wierszy do tabeli REFERENCES Umożliwia odwoływanie się do tabel z obcego klucza SELECT Umożliwia wybieranie wierszy tabeli Strona 3/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL TAKE OWNERSHIP Umożliwia przejęcie prawa własności do tabeli UPDATE Umożliwia aktualizowanie wierszy tabeli VIEW DEFINITION Umożliwia dostęp do meta danych tabeli Przyznawanie praw dostępu do tabeli Za pomocą instrukcji GRANT można przyznawać prawa dostępu dla użytkownika oraz roli bazy danych. W poniższym przykładzie użytkownik otrzyma uprawnienia SELECT, INSERT oraz UPDATE do pewnej tabeli: GRANT SELECT, INSERT, UPDATE ON nazwa_tabeli TO nazwa_uzytkownika Ograniczanie praw dostępu do tabel W celu zabronienia użytkownikowi praw dostępu można zetknąć się z dwojaką sytuacją. 1. Jeśli użytkownik zostały przyznane uprawnienia do tabeli, aby je zdjąć, należy użyć instrukcji REVOKE: REVOKE SELECT ON nazwa_tabeli TO nazwa_uzytkownika 2. Może zdarzyć się sytuacja, że mimo zdjęcia uprawnień, użytkownik nadal dysponuje tymi uprawnieniami, jeżeli należy do roli, której to uprawnienie przyznano. W takim przypadku należy użyć instrukcji DENY: DENY DELETE ON nazwa_tabeli TO nazwa_uzytkownika Zapewnienie dostępu do pojedynczych kolumn Istnieje również możliwość przyznawania lub odmawiania praw dostępu nie tylko do tabel, ale również do poszczególnych kolumn. W tab. 2 pokazano uprawnienia dotyczące zarządzaniem kolumnami tabeli. Tab. 2 Uprawnienia dotyczące zarządzaniem kolumn tabeli Uprawnienia Opis SELECT Umożliwia wykonywanie selekcji na kolumnie UPDATE Umożliwia aktualizowanie kolumny REFERENCE Umożliwia odwoływanie się do kolumny z obcego klucza Nadawanie praw dostępu do kolumn Prawa dostępu do pojedynczej kolumny nadajemy poleceniem GRANT. W poniższym przykładzie użytkownikowi zostanie nadane uprawnienie SELECT oraz UPDATE dotyczące kolumn kolumna1, kolumna2 itd. w tabeli: GRANT SELECT, UPDATE(kolumna1[, kolumna2[,...n]]) ON nazwa_tabeli TO nazwa_uzytkownika Strona 4/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Odmawianie praw dostępu do kolumn Podobnie jak w przypadku tabel, tak również w przypadku poszczególnych kolumn przy odmawianiu praw dostępu użytkownikowi można zetknąć się z dwojaką sytuacją: 1. Jeśli użytkownik zostały przyznane uprawnienia do poszczególnych kolumn tabeli, aby je zdjąć, należy użyć instrukcji REVOKE: REVOKE UPDATE ON nazwa_tabeli TO nazwa_uzytkownika 2. Może zdarzyć się sytuacja, że mimo zdjęcia uprawnień, użytkownik nadal dysponuje tymi uprawnieniami, jeżeli należy do roli, której to uprawnienie przyznano. W takim przypadku należy użyć instrukcji DENY: DENY DELETE ON nazwa_tabeli TO nazwa_uzytkownika Zarządzanie dostępem do obiektów programowalnych Obiekty programowalne, takie jak procedury składowane, mają swój własny kontekst zabezpieczeń. Zatem po to, żeby użytkownik mógł wykonać procedurę składowaną, potrzebuje odpowiednich uprawnień. Kiedy aparat bazy danych sprawdzi uprawnienia do wykonywania procedury składowanej i są one właściwe, wówczas sprawdza, czy użytkownik posiada odpowiednie uprawnienia do wykonywania operacji wewnątrz obiektów. Tak jak i inne obiekty, procedury składowane muszą być w odpowiedni sposób zabezpieczone. Aspekt zabezpieczania procedur składowanych można potraktować dwojako. Z jednej strony potrzebne są uprawnienia na przykład do tworzenia procedur składowanych, a z drugiej strony użytkownicy muszą mieć odpowiednie uprawnienia do wywołania tej procedury. Tab. 3 przedstawia uprawnienia dotyczące procedur składowanych. Tab. 3 Uprawnienia dotyczące procedur składowanych Uprawnienia Opis ALTER Umożliwia modyfikację właściwości procedury składowanej CONTROL Zapewnia uprawnienia właściciela EXECUTE Umożliwia wykonywanie procedury składowanej TAKE OWNERSHIP Umożliwia przejęcie prawa własności do procedury składowanej VIEW DEFINITION Umożliwia przeglądanie meta danych procedury składowanej W momencie kiedy aplikacja żąda wywołania procedury składowanej, SQL Server musi sprawdzić, czy użytkownik posiada uprawnienia EXECUTE dotyczące tej procedury. GRANT EXECUTE On nazwa_procedury_skladowanej TO nazwa_uzytkownika W taki sam sposób możemy odwołać lub odmówić użytkownikowi uprawnienia EXECUTE. Polecenia DDL Instrukcje języka DDL służą do manipulowania bazą danych i jej obiektami. Pozwalają one na: • tworzenie nowych obiektów • modyfikowanie obiektów już istniejących • usuwanie obiektów Strona 5/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Do podstawowych instrukcji języka DDL należą: • CREATE – służy do tworzenie nowych obiektów. • ALTER – służy do modyfikacji obiektów już istniejących. • DROP – służy do usunięcia obiektu już istniejącego. Tworzenie nowych obiektów Tworzenie nowych obiektów omówimy w kontekście tabel i widoków. W celu stworzenia nowej tabeli wywołujemy instrukcję CREATE TABLE. Składnia częściowa tej instrukcji została przedstawiona poniżej: CREATE TABLE nazwa_tabeli ( nazwa_kolumny1 typ_danych [NULL | NOT NULL][, nazwa_kolumny2 typ_danych [NULL | NOT NULL][,...n]] ) Przy definiowaniu tabeli należy podać jej nazwę, nazwy jej atrybutów oraz typ danych, które te atrybuty mogą przyjmować. Dodatkowo określamy, czy dany atrybut może przyjmować wartość NULL czy nie. Przykład tworzenia tabeli pokazano poniżej: CREATE TABLE Osoba ( ID_Osoba int Nazwisko char(50) Imie char(20) Telefon int ) NOT NULL, NOT NULL, NOT NULL, NULL W podobny sposób tworzymy widoki. W celu stworzenia nowego widoku wywołujemy instrukcję CREATE VIEW. Składnia częściowa tej instrukcji została przedstawiona poniżej: CREATE VIEW nazwa_widoku[(kolumna1, [kolumna2[,...n])] AS SELECT wyrazenie_select Przy definiowaniu widoku należy podać jego nazwę, nazwę kolumn, które będą używane w widoku, oraz wyrażenie SELECT, które definiuje widok. Polecenie to może używać nie tylko jedna, ale również wiele tabel, jak również innych widoków. Przykład tworzenia widoku pokazano poniżej: CREATE VIEW Praca_dyplomowa(ID_Praca, Nazwisko, Imię, Tytuł) AS SELECT ID_Praca, Imię, Nazwisko, Tytuł FROM Praca Modyfikowanie obiektów Po stworzeniu obiektu powinniśmy móc go w razie jakiejkolwiek potrzeby zmodyfikować. Do modyfikacji obiektów (zarówno tabel jak i widoków) służy polecenie ALTER. W celu modyfikacji istniejącej tabeli należy zastosować polecenie ALTER TABLE, którego uproszczona składnię częściową pokazano poniżej: ALTER TABLE nazwa_tabeli { { ALTER COLUMN nazwa_kolumny | ADD <definicja_kolumny> } [{ NULL | NOT NULL }] } | DROP COLUMN nazwa_kolumny } <definicja_kolumny> ::= nazwa_kolumny typ_danych Najczęściej polecenie ALTER TABLE stosuje się do zmiany schematu relacji. Przykład zastosowania tego polecenia do dodania lub usunięcia kolumny z tabeli pokazano poniżej: ALTER TABLE nazwa_tabeli ADD nazwa_kolumny typ_danych ALTER TABLE nazwa_tabeli DROP COLUMN nazwa_kolumny Strona 6/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Podobnie jak tabelę możemy zmodyfikować widok. W celu modyfikacji istniejącego widoku należy zastosować polecenie ALTER VIEW, którego uproszczona składnię częściową pokazano poniżej: ALTER VIEW nazwa_widoku [(kolumna1[, kolumna2[,...n]])] AS SELECT wyrazenie_select Przy modyfikacji widoku należy podać nazwę modyfikowanego widoku, nazwę jednej lub wielu kolumn, z których składać się ma nowy widok oraz wyrażenie SELECT, które ma definiować nowy widok. Przykład zastosowania instrukcji modyfikacji widoku pokazano poniżej: ALTER VIEW Praca_dyplomowa(Nazwisko, Imię, Tytuł) AS SELECT Imię, Nazwisko, Tytuł FROM Praca Usuwanie obiektów Po stworzeniu obiektu powinniśmy móc go w razie jakiejkolwiek potrzeby usunąć. Do usuwania obiektów (zarówno tabel jak i widoków) służy polecenie DROP. W celu usunięcia istniejącej tabeli, należy zastosować polecenie DROP TABLE. Usuwa ono również schemat tabeli. Jego uproszczoną składnię częściową pokazano poniżej: DROP TABLE nazwa_tabeli gdzie w nazwie tabeli podajemy nazwę obiektu, który chcemy usunąć. Przykładowo: DROP TABLE Osoba W celu usunięcia istniejącego widoku należy zastosować polecenie DROP VIEW. Jego uproszczoną składnię częściową pokazano poniżej: DROP VIEW nazwa_widoku gdzie w nazwie widoku podajemy nazwę obiektu, który chcemy usunąć. Przykładowo: DROP VIEW Osoba, PracaDyplomowa Przykładowe rozwiązanie Dodawanie użytkowników Dodawać użytkowników można na dwa sposoby. Pierwszy polega na tworzeniu użytkowników z poziomu języka T-SQL używając procedur składowanych. Drugi na tworzeniu użytkowników z poziomu SQL Server Management Studio. Poniżej zaprezentujemy obydwie metody. Tworzenie użytkowników z poziomu języka T-SQL Pierwszym krokiem związanym z zarządzaniem użytkownikami jest stworzenie użytkowników serwera i bazy danych. W tym celu stosujemy systemową procedurę składowaną sp_addlogin. W naszym przykładzie stworzymy dwóch użytkowników: Konsultant1 i Konsultant2. EXEC sp_addlogin Konsultant1 EXEC sp_addlogin Konsultant2 Następnie powinniśmy zezwolić nowo stworzonym użytkownikom na dostęp do bazy danych. W tym celu używamy systemowej procedury składowanej sp_grantdbaccess. W naszym przykładzie mamy: EXEC sp_grantdbaccess Konsultant1 EXEC sp_grantdbaccess Konsultant2 Po stworzeniu użytkowników i daniu im możliwości dostępu do bazy danych, w kolejnym kroku powinniśmy dodać ich do roli. W tym celu używamy systemowej procedury składowanej sp_addrolemember. W naszym przykładzie mamy: Strona 7/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL EXEC sp_addrolemember Obsluga, Konsultant1 EXEC sp_addrolemember Obsluga, Konsultant2 W wyniku stworzyliśmy dwóch użytkowników: Konsultant1 i Konsultant2, którym nadaliśmy prawo dostępu do bazy danych, a następnie przydzieliliśmy ich do roli Obsluga. Tworzenie użytkowników z poziomu SQL Server Management Studio W celu stworzenia użytkowników poziomu SQL Server Menagemant Studio, w pierwszym kroku należy dodać użytkowników do serwera bazodanowego. W tym celu w obrębie Object Explorer wybieramy katalog Security, a następnie Login. W obrębie zakładki Login wybieramy prawym przyciskiem myszy New Login, a następnie dodajemy nazwę użytkownika, sposób autoryzacji, ustawiamy hasło, które użytkownik zmieni przy pierwszym logowaniu, domyślną bazę danych oraz język domyślny, co pokazano na rys. 2. Rys. 2 Zakładanie konta na SQL Server 2008 użytkownikowi W analogiczny sposób tworzymy drugiego użytkownika. W następnym etapie dodajemy obydwu użytkowników do bazy danych. W tym celu w obrębie Object Explorer wybieramy Datatabase, a następnie bazę danych, do której chcemy przypisać użytkowników. W naszym przypadku będzie to baza Obsluga. Następnie wybieramy zakładkę Security i Users. W obrębie zakładki Users wybieramy prawym przyciskiem myszy New User, a następnie dodajemy użytkownika, który został wcześniej stworzony na poziomie serwera, co pokazano na rys. 1. W analogiczny sposób postępujemy z drugim użytkownikiem. Strona 8/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Rys. 3 Dodawanie użytkownika do bazy danych Na końcu należy jeszcze zmienić ustawienia serwera tak, żeby nowi użytkownicy mogli się zalogować. W tym celu klikamy prawym przyciskiem myszy instancję serwera i wybieramy Properties, a następnie Security i zaznaczamy opcję SQL Server and Windows Authentication mode, co pokazano na rys. 4. Rys. 4 Ustawienie autoryzacji Zarządzanie uprawnieniami dostępu do tabeli Podobnie jak w przypadku dodawania użytkowników, tak i teraz podczas nadawania uprawnień dostępu do tabel możemy uczynić to na dwa sposoby. Pierwszy polega na nadawaniu uprawnień użytkownikom z poziomu języka T-SQL. Drugi na nadawaniu uprawnień użytkownikom z poziomu SQL Server Management Studio. Nadawanie uprawnień z poziomu języka T-SQL W celu przyznania użytkownikowi prawa dostępu stosujemy instrukcję GRANT. Przykładowo by nadać prawo przeglądania i wstawiania danych do tabeli Klienci stworzonemu wcześniej użytkownikowi Konsultant1 możemy zastosować następujące polecenie: GRANT SELECT, INSERT ON Klienci TO Konsultant1 W podobny sposób możemy nadać wspomniane wcześniej uprawnienia roli Obsluga: GRANT SELECT, INSERT ON Klienci TO Obsluga Analogicznie odmawiamy (DENY) lub usuwamy (REVOKE) użytkownikowi lub roli uprawnienia. W wielu sytuacjach znacznie bezpieczniejszym rozwiązaniem jest przydzielenie użytkownikowi prawa wykonania procedury składowanej. Załóżmy, że posiadamy procedurę składowaną proc_klienci, która zwraca w wyniku zbiór wierszy reprezentujących klientów. W naszym Strona 9/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL przykładzie przydzielimy prawo wykonania procedury składowanej użytkownikowi Konsultant2. Zatem będziemy mieli: GRANT EXECUTE ON proc_klienci TO Konsultant2 W analogiczny sposób możemy przydzielić prawo wykonywania procedury składowanej roli Obsluga. Zatem będziemy miel: GRANT EXECUTE ON proc_klienci TO Obsluga Nadawanie uprawnień z poziomu SQL Server Management Studio W celu nadania użytkownikowi uprawnień dostępu do obiektu typu tabela, należy w obrębie zakładki Tables wybrać tabelę Uzytkownik, a następnie kliknąć prawym przyciskiem myszy i wybrać Properties. W obrębie okna Table Proberties wybieramy zakładkę Permissions. Mając zdefiniowanego użytkownika na poziomie bazy danych Obsluga, nadajemy mu odpowiednie uprawnienia. W naszym przypadku dajemy mu możliwość przeglądania tabeli, co pokazano na rys. 5. Rys. 5 Nadanie uprawnień na tabeli Uzytkownik Operacje na obiektach Załóżmy, że chcemy stworzyć nowy obiekt w postaci tabeli, która będzie przechowywała informacje o klientach. W tym celu stosujemy polecenie CREATE TABLE, co pokazano poniżej: CREATE TABLE Klienci ( ID_Klient Firma Nazwisko Imie Telefon Fax email int char(100) char(50) char(20) int int char(20) NOT NULL, NOT NULL, NOT NULL, NOT NULL, NULL, NULL, NULL ) Strona 10/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Jeżeli użytkownikowi Konsultant2 chcemy nadać prawo przeglądania danych o klientach, możemy dla tabeli Klienci stworzyć widok z udostępnionymi danym, a użytkownikowi dać prawo dostępu do widoku. Zatem tworzymy widok jak poniżej i nadajemy prawo dostępu do widoku w analogiczny sposób, jak pokazano wyżej dla obiektu typu tabela. CREATE VIEW Klienci_Obsluga(Firma, Nazwisko, Imię, Telefon) AS SELECT Imię, Nazwisko, Firma, Telefon FROM Klienci Załóżmy, że chcemy dodać kolumnę przechowująca informacje o stronie internetowej do tabeli Klienci. Wówczas: ALTER TABLE Klienci ADD www char(50) NULL W analogiczny sposób możemy zmodyfikować widok Klienci_Obsluga tak, żeby użytkownik Konsultant2 mógł przeglądać adresy stron internetowych klientów. Zatem: ALTER VIEW Klienci_Obsluga (Firma, Nazwisko, Imię, Telefon, www) AS SELECT Imię, Nazwisko, Firma, Telefon, www FROM Klienci Załóżmy, że chcemy usunąć kolumnę przechowująca informacje o numerze faksu z tabeli Klienci. Wówczas: ALTER TABLE Klienci DROP COLUMN fax Porady praktyczne Język T-SQL DCL • Przyznawanie lub odmawianie praw dostępu do poszczególnych kolumn zwiększa elastyczność w zarządzaniu dostępem na przykład do poufnych danych z niektórych kolumn. • W zarządzaniu dostępem do obiektów programowalnych występuje zagadnienie łańcucha praw własności. Łańcuch praw własności jest sekwencją obiektów bazy danych uzyskujących dostęp do siebie nawzajem. W sytuacji, kiedy w tabeli są wiersze uzyskane z procedury składowanej, procedura ta jest obiektem wywołującym, a tabela obiektem wywoływanym. Gdy SQL Server napotka na taki łańcuch, aparat bazy danych sprawdza uprawnienia inaczej niż w przypadku indywidualnego dostępu do obiektów. • Tworzenie użytkowników oraz nadawanie im uprawnień może odbywać się na dwa sposoby. Pierwszy wymaga znajomości języka T-SQL. Drugi sposób polega na wykorzystaniu graficznych narzędzi dostępnych w SQL Server Menagement Studio. • W przypadku tworzenia użytkowników z poziomu języka T-SQL musimy znać odpowiednie procedury składowane, których należy w tym celu użyć. W procedurach składowanych zapisane są ustawienia, które zostaną wprowadzone podczas ich użycia. • Możemy nadawać uprawnienia do różnych obiektów w bazie danych. W rozdziale „Przykładowe rozwiązanie” pokazano w jaki sposób nadawać uprawnienia do obiektu typu tabela. W analogiczny sposób możemy nadawać uprawnienia do obiekty typu: widok, funkcja czy procedura składowana. • Użytkowników możemy grupować według nadanych im uprawnień. Wówczas możemy założyć role i pogrupować użytkowników według ról, jakie pełnią w bazie danych. W wyniku tego możemy przypisać dostęp do obiektów bazy danych nie tylko pojedynczemu użytkownikowi, ale również grupom użytkowników zapisanych w roli. Język T-SQL DDL • Poleceniem CREATE możemy utworzyć nie tylko tabelę czy widok, lecz również obiekt programowalny w postaci procedury składowanej. W tym celu wywołujemy instrukcję CREATE PROCEDURE. Przykładowa składnia częściowa instrukcji tworzenia procedury bez parametru została pokazana poniżej: Strona 11/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL CREATE PROCEDURE nazwa_procedury AS SELECT wyrazenie • Polecenie ALTER, podobnie CREATE, może być stosowane w odniesieniu do obiektu programowalnego w postaci procedury składowanej. W tym celu wywołujemy instrukcję ALTER PROCEDURE. Przykładowa składnia częściowa instrukcji modyfikowania procedury została pokazana poniżej: ALTER PROCEDURE nazwa_procedury [WITH { RECOMPILE | ENCRYPTION }] AS SELECT wyrazenie • W celu usunięcia istniejącej procedury składowanej należy zastosować polecenie DROP PROCEDURE. Jego uproszczoną składnię częściową pokazano poniżej: DROP PROCEDURE nazwa_widoku • Tworzenie, modyfikacja i usuwanie może odbywać się na obiektach typu: baza danych, funkcja, indeks, tabela, procedura składowana, widok, wyzwalacz. • Polecenie CREATE służy do tworzenia wszystkich obiektów baz danych: tabel (CREATE TABLE), widoków (CREATE VIEW), procedur składowanych (CREATE PROCEDURE), indeksów (CREATE INDEX), wyzwalaczy (CREATE TRIGGER). Tylko tymczasowe twory, takie jak zmienne czy kursory, deklaruje się (nie tworzy) za pomocą polecenia DECLARE. • Do istniejącej tabeli możemy zawsze dodać ograniczenia na istniejąca kolumnę, przykładowo: ALTER TABLE Osoba_1 ADD CONSTRAINT CK_Nr_Indeksu CHECK (Nr_Indeksu > 10000) Ograniczenie to wymusza wstawianie w kolumnie Nr_indeksu liczb całkowitych większych od 10000. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • rozumiesz zasadę zarządzania uprawnieniami do obiektów bazy danych • rozumiesz mechanizm manipulowania bazą danych i jej obiektami • umiesz podać przykłady obiektów baz danych, do których można zastosować składnię języka T-SQL DDL oraz T-SQL DCL Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Kalen Delaney, Microsoft SQL Server 2005: Rozwiązania praktyczne krok po kroku, Microsoft Press, 2006 W książce autor w przystępny i zrozumiały sposób przedstawia, między innymi, w jaki sposób nadawać prawa dostępu do bazy danych oraz jak zarządzać rolami. Następnie pokazuje, jak prosto można nadawać uprawnienia do obiektów bazy danych typu tabela i widok. 2. Edward Whalen, Microsoft SQL Server 2005 Administrator’s Companion, Microsoft Press, 2006 W książce autor pokazał, w jaki sposób można zorganizować nadawanie uprawnień do bazy danych oraz do obiektów bazy danych od strony administracyjnej. Przybliża również, jak należy planować politykę bezpieczeństwa serwera i bazy danych Strona 12/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL poprzez nadawanie odpowiednich uprawnień. Pozycja szczególnie polecana osobom chcącym poszerzyć wiedzę o tych elementach administracji serwerem. 3. Deren Bieniek, Randy Dyess, Mike Hotek, Javier Loria, Adam Machanic, Antonio Soto, Adolfo Wiernik, SQL Server 2005. Implementacja i obsługa, APN Promise, 2006 W książce przedstawiono obie składowe języka T-SQL: DCL i DDL. Pokazano, w jaki sposób tworzyć użytkowników, nadawać im uprawnienia oraz jak tworzyć, modyfikować i usuwać podstawowe obiekty bazy danych. Książka szczególnie warta polecenia ze względu na dużą zawartość ćwiczeń laboratoryjnych. 4. Dusan Petkovic, Microsoft SQL Server 2008: A Beginner's Guide, McGraw-Hill, 2008 Pozycja napisana w sposób przystępny. Wprowadza w SQL Server 2008 w sposób szybki i łatwy. Osoba początkująca w SQL Server 2008 znajdzie w niej podstawy z każdego tematu dotyczącego serwera bazodanowego. W prosty sposób dowiesz się, jak należy definiować użytkowników i nadawać im uprawnienia oraz jak tworzyć, modyfikować i usuwać podstawowe obiekty bazy. Pozycja szczególnie polecana dla osób początkujących. Strona 13/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Laboratorium podstawowe Problem 1 (czas realizacji 15 min) Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma planuje rozszerzenie systemu prac dyplomowych na Twoim woim wydziale, wydziale którym zarządza, na skalę uczelniana. Pierwsze zadanie, z jakie przed Tobą stoi, to zdefiniowanie nowych użytkowników oraz modyfikacja użytkowników istniejących. istniejących Zadanie Tok postępowania 1. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. Studio • W oknie logowania kliknij Connect. 2. Utwórz tabelę • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\Labs\Lab06\ddl.sql. • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (1) Ustawiamy PraceDyplomowe jako baze robocza USE PraceDyplomowe GO -- (2) Tworzymy w bazie danych CREATE TABLE Osoba_1( ID_Osoby smallint Imie varchar(10) Nazwisko varchar(10) Nr_Indeksu varchar(10) ID_Stopnien smallint ) 3. Zmodyfikuj tabelę tabele Osoba_1 NOT NULL, NOT NULL, NOT NULL, NULL, NULL • Mając otwarty skrypt ddl.sql w oknie Query zaznacz i uruchom poniższy fragment kodu odpowiedzialny za zmianę definicji kolumny Nazwisko: -- (3) zmiana definicji kolumny Nazwisko ALTER TABLE Osoba_1 ALTER COLUMN Nazwisko varchar(40) NOT NULL ALTER COLUMN Nr_Indeksu int NULL GO • Dodaj do tabeli Osoba_1 kolumnę przechowującą informacje o numerze telefonu. W tym celu zaznacz i uruchom (F5)) poniższy fragment kodu: ko -- (4) Dodanie kolumny Telefon ALTER TABLE Osoba_1 ADD Telefon int GO • Dodaj ograniczenia na kolumnę indeks. W tym celu zaznacz z i uruchom (F5 F5) poniższy fragment kodu. -- (5) Dodajmy ograniczenie na kolumne Nr_Indeksu ALTER TABLE Osoba_1 Strona 14/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL ADD CONSTRAINT T CK_Nr_Indeksu CHECK (Nr_Indeksu > 10000) GO • Usuń ograniczenia nałożone w poprzednim kroku. W tym celu zaznacz i uruchom (F5) ( poniższy fragment kodu. -- (6) Usuwamy ograniczenie na kolumnie Nr_Indeksu ALTER TABLE Osoba_1 DROP CONSTRAINT CK_Nr_Indeksu GO • Usuń kolumnę Telefon. W tym celu zaznacz aznacz i uruchom (F5) ( poniższy fragment kodu. kodu -- (7) Usuwamy kolumne Telefon ALTER TABLE Osoba_1 DROP COLUMN Telefon GO 4. Usuń tabelę • Usu Usuń tabelę Osoba_1. W tym celu mając ając otwarty skrypt ddl.sql zaznacz i uruchom (F5) ( poniższy fragment kodu. -- (8) Usuwamy tabele Osoba_1 DROP TABLE Osoba_1 GO Problem 2 (czas realizacji 30 min) W wyniku rozszerzenia systemu zarządzania pracami dyplomowymi na skalę uczelni, uczelni kolejne zadanie, jakie przed tobą stoi, stoi to przydzielenie nowo zdefiniowanym definiowanym użytkownikom odpowiednich praw dostępu do obiektów w Twojej bazie danych. Zadanie Tok postępowania 1. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. • W oknie logowania kliknij Connect. 2. Dodaj użytkowników do bazy danych • Z menu głównego wybierz File -> Open -> File. • Odszukaj pliku C:\Labs\Lab06\dcl_1.sql. • Zaznacz i uruchom (F5) ( poniższy fragment kodu. Wynik pokazano na rys. 6 6. -- (1) Ustawiamy PraceDyplomowe jako baze robocza USE PraceDyplomowe GO -- (2) Dodajmy dwoch nowych uzytkownikow serwera i bazy danych, Sekretariat1 1 i Sekretariat2, umiescmy ich w grupie Dziekanat EXEC sp_addlogin Sekretariat1 EXEC sp_addlogin Sekretariat2 EXEC sp_grantdbaccess Sekretariat1 EXEC sp_grantdbaccess Sekretariat2 Strona 15/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL EXEC sp_addrole Dziekanat EXEC sp_addrolemember Dziekanat, Sekretariat1 EXEC sp_addrolemember Dziekanat, Sekretariat2 GO Rys. 6 Dodanie użytkowników do bazy danych • • • • W oknie Object Explorer kliknij przycisk Connect -> Database Engine. W zakładce Authentication wybierz SQL Server Authentication. W polu Login wpisz użytkownika Sekretariat1. Hasło pozostaw puste. W wyniku powinieneś uzyskać połączenie do drugiej instancji serwera, co pokazano na rys. 7. Rys. 7 Podłączenie do drugiej instancji serwera • Odszukaj pliku C:\Labs\Lab06\dcl_2.sql. • Zaznacz i uruchom (F5) poniższy fragment kodu. Wynik pokazano na rys. 8: -- (1) Ustawmy PraceDyplomowe jako baze robocza USE PraceDyplomowe GO -- (2) sprawdzamy, czy mamy uprawnienia do wykonania -- polecenia SELECT na tabeli Osoba SELECT * FROM Osoba GO Strona 16/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Pamiętaj, taj, że powyższy fragment kodu zawarty w skrypcie dcl_2.sql wykonujemy z zalogowanym użytkownikiem Sekretatiat1 Rys. 8 Sprawdzenie uprawnienia wykonania polecenia SELECY na tabeli Osoba Wykonanie poprzedniego polecenia nie powiodło się, ponieważ domyślne omyślne uprawnienia nowego użytkownika nie pozwalają na wykonanie żadnego polecenia w bazie danych. Skoro nie mamy uprawnień do wykonywania poleceń, tym bardziej nie możemy ich nadawać. • Spróbuj nadać uprawnienia innemu użytkownikowi, użytkownikowi będąc zalogowan zalogowanym jako Sekretariat1. W tym celu zaznacz aznacz i uruchom (F5) ( poniższy fragment kodu: -- (3) Spróbujmy nadać uprawnienia innemu użytkownikowi użytkown GRANT SELECT ON Osoba TO Sekretariat2 S GO Podjąłeś nieudaną próbę nadania innemu użytkownikowi (Sekretariat2)) uprawnień do wykonywania polecenia SELECT w tabeli Osoba. 3. Nadaj uprawnienia • Przełącz się do okna ze skryptem dcl_1.sql. • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (3) Nadaj uprawnienia do wykonywania polecenia SELECT -- w tabeli Osoba użytkownikowi Sekretariat1 GRANT SELECT ON Osoba TO Sekretariat1 GO • Przełącz się do okna ze skryptem dcl_2.sql uruchomionego w kontekście użytkownika Sekretariat1. • Zaznacz i uruchom (F5) ( poniższy fragment kodu. Wynik uruchomienia pokazano na rys. 9: -- (1) Ustawmy PraceDyplomowe jako baze robocza USE PraceDyplomowe GO -- (2) sprawdzamy, czy mamy uprawnienia do wykonania -- polecenia SELECT na tabeli Osoba SELECT * FROM Osoba GO Strona 17/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Rys. 9 Sprawdzenie uprawnien do wykonania polecenia SELECT • Zaznacz i uruchom (F5) ( ponownie poniższy fragment kodu: kodu -- (3) Nadaj uprawnienia do wykonywania polecenia SELECT -- w tabeli Osoba użytkownikowi Sekretariat2 GRANT SELECT ON Osoba TO Sekretariat2 Sekretariat GO I tym razem nie udaje się nadać praw innemu użytkownikowi, użytkownikowi czyli nadanie uprawnień do wykonywania polecenia nie jest równoznaczne z umożliwieniem nadawania uprawnień innym użytkownikom. 4. Cofnij uprawnienia • Przełącz się do okna, w którym masz uruchomiony skrypt dcl_1.sql. • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (4) Cofnij uprawnienia do wykonywania polecenia SELECT -- w tabeli Osoba użytkownikowi Sekretariat1 REVOKE SELECT ON Osoba Osob FROM Sekretariat1 GO • Przełącz się do okna, w którym masz uruchomiony skrypt dcl_2.sql. • Zaznacz i uruchom (F5) ( ponownie poniższy fragment kodu: kodu -- (2) sprawdźmy, , czy mamy uprawnienia do wykonania -- polecenia SELECT na tabeli Osoba SELECT * FROM Osoba GO Po cofnięciu uprawnień do wykonania polecenia SELECT uruchomienie tego fragmentu skryptu powinno zwrócić informację o błędzie. 5. Odbierz uprawnienia • Przełącz się do okna, w którym masz uruchomiony skrypt dcl_1.sql. • Zaznacz i uruchom (F5) ( ponownie poniższy fragment kodu: kodu -- (3) Nadaj uprawnienia do wykonywania polecenia SELECT -- w tabeli Osoba użytkownikowi Sekretariat1 GRANT SELECT ON Osoba TO Sekretariat1 GO • Przełącz się do okna, w którym masz uruchomiony skrypt dcl_2.sql. • Zaznacz i uruchom (F5) ( ponownie poniższy fragment kodu: kodu -- (2) sprawdzmy, czy mamy uprawnienia do wykonania -- polecenia SELECT na tabeli Osoba Strona 18/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL SELECT * FROM Osoba GO • Przełącz się do okna, w którym masz uruchomiony skrypt dcl_1.sql. • Zaznacz i uruchom (F5) ( ponownie poniższy fragment ent kodu: kodu -- (5) Zabroń wykonywania polecenia SELECT -- w tabeli Osoba grupie Dziekanat DENY SELECT ON Osoba TO Dziekanat GO Powyższy kod spowoduje zabronienie wszystkim użytkownikom w grupie Dziekanat (czyli u nas konkretnie użytkownikom Sekretariat1 i Sekretariat2) wykonywania polecenia SELECT w tabeli Osoba. • Przełącz się do okna, w którym masz uruchomiony skrypt dcl_2.sql. • Zaznacz i uruchom (F5) ( ponownie poniższy fragment kodu: kodu -- (2) sprawdzmy, czy mamy uprawnienia do wykonania -- polecenia SELECT na tabeli Osoba SELECT * FROM Osoba GO Tym razem okaże się, że nie możemy wykonać polecenia SELECT. Dzieje się tak dlatego, że przed momentem zabroniliśmy grupie Dziekanat,, do której należy użytkownik, w którego kontekście pracujemy, wykonywania polecenia SELECT. 6. Przekaż uprawnienia • Przełącz się do okna w którym masz uruchomiony skrypt dcl_1.sql. • Zaznacz i uruchom (F5) ( ) ponownie poniższy fragment kodu: kodu -- (6) nadaj uprawnienia do wykonywania polecenia SELECT -- w tabeli Osoba uzytkownikowi Sekretariat1 -- z opcja nadawania przez uzytkownika uprawnien -- do wykonywania polecenia SELECT w tej tabeli GRANT SELECT ON Osoba TO Sekretariat1 WITH GRANT OPTION GO • Przełącz się do okna, w którym masz uruchomiony skrypt dcl_2.sql. • Zaznacz i uruchom (F5) ( ponownie poniższy niższy fragment kodu: kodu -- (3) sprobujmy nadac uprawnienia innemu uzytkownikowi GRANT SELECT ON Osoba TO Sekretariat2 GO Strona 19/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 5 Język SQL DCL, DDL Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma zarządzająca bazą AdventureWorks planuje rozszerzenie i modernizację systemu w celu spełnienia pewnych standardów. W związku z modernizacją systemu bazodanowego, najprawdopodobniej ulegną zmianie pewne obiekty w bazie danych (część najprawdopodobniej zostanie zmodyfikowanych, część stworzonych, a część usuniętych) oraz uprawnienia poszczególnych użytkowników oraz grup użytkowników do poszczególnych obiektów w bazie danych (tabel, widoków, procedur składowanych, funkcji itp.). Zadania, jakie przed Tobą stoją, to: 1. Podjęcie decyzji, które obiekty w bazie danych pozostaną bez zmian, a które zostaną zmodyfikowane lub usunięte. 2. Zdefiniowanie nowych użytkowników oraz zmodyfikowanie użytkowników istniejących w celu przydzielenia im praw do obiektów w zmodernizowanej bazie danych. 3. Przeorganizowanie grupy użytkowników i nadanie im uprawnień do obiektów bazy danych. Strona 20/20 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 6 Wersja 1.0 Język SQL – DML Spis treści Język SQL – DML ................................................................................................................................... 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 7 Porady praktyczne ....................................................................................................................... 9 Uwagi dla studenta .................................................................................................................... 10 Dodatkowe źródła informacji..................................................................................................... 10 Laboratorium podstawowe ................................................................................................................ 12 Problem 1 (czas realizacji 45 min).............................................................................................. 12 Laboratorium rozszerzone ................................................................................................................. 19 Zadanie 1 (czas realizacji 90 min)............................................................................................... 19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Informacje o module Opis modułu Język SQL składa się z trzech składowych: języka definiowania danych (DDL), języka sterowania danymi (DCL) oraz języka operowania na danych (DML). W module tym dowiesz się w jaki sposób można pobierać i przeglądać dane, formatować zestawy wyników oraz konstruować proste zapytania używając jeżyka T-SQL DML. Cel modułu Celem modułu jest zapoznanie słuchacza z podstawowymi instrukcjami języka T-SQL DML, służącego do manipulowania danymi, oraz pokazanie sposobu używania zaprezentowanych instrukcji. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • potrafił używać podstawowych instrukcji języka SQL DML • potrafił pobierać i modyfikować dane w zawarte w bazie • potrafił formatować zestaw wyników i przedstawiać je w przejrzystej formie • potrafił konstruować proste zapytania do bazy danych Microsoft SQL Server 2008 Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • wiedzieć, w jaki sposób stworzyć bazę danych wraz z jej podstawowymi obiektami (patrz: moduł 3) • wiedzieć, w jaki sposób poruszać się po Microsoft SQL Server Management Studio • potrafić definiować użytkowników i przydzielać im uprawnienia Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na rys. 1, przed przystąpieniem do realizacji tego modułu należy zapoznać się z materiałem zawartym w modułach 3 i 5. Rys. 1 Mapa zależności modułu Strona 2/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Przygotowanie teoretyczne Przykładowy problem Z bazy danych może korzystać wielu użytkowników, dysponujących różnorakimi uprawnieniami i mających dostęp do różnych obiektów w bazie danych. Głównym ich zadaniem jest przeszukiwanie danych w niej zawartych według pewnych reguł, które wcześniej zostały zdefiniowane przez administratora, projektanta i programistę bazy danych. W związku z tym podstawowym zadaniem, jakie stoi przed osobami odpowiedzialnymi za prawidłowe funkcjonowanie bazy danych, jest określenie, jakie polecenia będą używane do pobierania z niej danych Kolejnym problemem, z jakim często możemy się spotkać, jest wprowadzanie, modyfikacja oraz import i eksport danych pomiędzy różnymi bazami. Eksport nie powinien sprawiać większych kłopotów, natomiast problem może stanowić import danych z innych systemów zarządzania bazami danych. Może on wynikać z odmiennej wewnętrznej struktury przechowywania danych w różnych systemach, jak również z niespójności typów danych w nich zawartych. Dobrze jest wiedzieć, w jaki sposób można poradzić sobie z potencjalnymi problemami przy importowaniu danych. Podstawy teoretyczne W części tej pokazany zostanie sposób budowy poleceń odczytujących dane zawarte w bazie. Rozpoczniemy od prezentacji prostych poleceń SELECT. Następnie prześledzimy informacje na temat złączeń używanych do pobierania danych z wielu tabel. Na końcu prześledzimy, w jaki sposób można łatwo wprowadzać, modyfikować i kasować dane zawarte w bazie. Wybieranie potrzebnych danych Najprostszym sposobem pozyskiwania danych z pojedynczej tabeli jest wykonanie instrukcji SELECT. Instrukcja ta służy do odczytywania danych przechowywanych w bazie danych. Sposób wywołania instrukcji znajduje się poniżej: SELECT [{ ALL | DISTINCT }] lista_wyboru FROM nazwa_tabeli[,…n] WHERE warunek_wyszukiwania Jeżeli chcemy pobrać wszystkie kolumny z tabeli, możemy w liście wyboru podać gwiazdkę, przykładowo: SELECT * FROM nazwa_tabeli Powyższe polecenie zwraca wszystkie dane zawarte w wybranej tabeli. Zazwyczaj odczytywanie wszystkich kolumn z tabeli nie jest konieczne, a wykonywanie takiego zapytania może spowodować wiele problemów. Załóżmy, że potrzebne są nam dane tylko z niektórych kolumn z danej tabeli. Wówczas po słowie SELECT należy wymienić nazwy tych kolumn w takiej kolejności, w jakiej chcemy, aby zostały wyświetlone. Przykładowo: SELECT employeeid, lastname, firstname, title FROM employees Gdy tabela zawiera małą liczbę wierszy, czas potrzebny na ich zwrócenie jest akceptowalny. W sytuacji, gdy tabela składa się z milionów wierszy, zwracanie ich wszystkich nie jest dobrym rozwiązaniem, dlatego powinno się wydobywać tylko potrzebne wiersze. Należy w związku z tym odpowiedzieć sobie na pytania: które kolumny są potrzebne? Które wiersze są potrzebne? Udzielenie odpowiedzi na te pytania powinno pomóc przy tworzeniu przyjaznych dla serwera zapytań. Strona 3/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML W celu ograniczenia liczby wierszy dokonujemy filtrowania rekordów. Służy do tego klauzula WHERE, którą możemy zawrzeć w instrukcji SELECT. Przykładowo: SELECT SELECT employeeid, lastname, firstname, title FROM employees WHERE employeeid = 5 Należy pamiętać, iż warunki wyszukiwania, które możemy stosować po słowie WHERE, są różnorodne i dają dużą swobodę filtrowania rekordów. Warunki te mogą: • • • • • • korzystać z operatorów porównania korzystać z porównywania ciągów korzystać z operatorów logicznych pobierać zakresu wartości korzystać z listy wartości jako kryterium wyszukiwania pobrać wartości nieznane Operator porównania Operator porównania (=) użyty w klauzulu WHERE powoduje, że zwracane są tylko te rekordy, których wartość w zadanej kolumnie jest równa podanej. Przykładowo: SELECT lastname, city FROM employees WHERE country = 'USA' Operator LIKE Operator LIKE służy do porównywania ciągów znaków, które powinny być do siebie podobne. Wraz z operatorem LIKE można stosować znaki maskujące „%”, reprezentujące dowolny ciąg znaków. Przykładowo: SELECT companyname FROM customers WHERE companyname LIKE '%Restaurant%' W wyniku otrzymamy nazwy firm zawierające w sobie słowo „Restaurant”. Operatorem o odwrotnym działaniu jest operator NOT LIKE. Jego zastosowanie powoduje zwrócenie rekordów, które nie spełniają podanego warunku podobieństwa. Przykładowo: SELECT companyname FROM customers WHERE companyname NOT LIKE 'D%' W wyniku otrzymamy nazwy firm które nie rozpoczynają się na literę „D”. Operatory logiczne AND i OR Czasem zachodzi potrzeba połączenia kilku warunków w celu wyodrębnienia potrzebnych danych. Do łączenia warunków można użyć operatorów logicznych AND i OR. Operator AND zapewnia prawdziwość wielu warunków. Przykładowo: SELECT company, Date FROM customers WHERE (company LIKE '%Restaurant%') AND (Date='2001-07-08') W wyniku otrzymamy zestaw danych składający się z nazw firm zawierających w sobie słowo „Restaurant”, które to firmy zostały założone dnia 8 lipca 2001 roku. Operator OR używany jest wówczas, gdy przynajmniej jeden z warunków musi być spełniony. Przykładowo: Strona 4/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML SELECT company, Date FROM customers WHERE (company LIKE '%Restaurant%') OR (Date='2001-07-08') W wyniku otrzymamy zestaw danych składający się z nazw firm zawierających w sobie słowo „Restaurant” lub firmy, które to firmy zostały założone dnia 8 lipca 2001 roku. Często zachodzi potrzeba połączenia operatorów AND i OR w celu otrzymania wymaganych danych. Przykładowo: SELECT company, productid, Date FROM customers WHERE (company LIKE '%Restaurant%' OR productid=20) AND (Date='2001-07-08') W wyniku otrzymamy zestaw danych składających się z nazw firm zawierających w sobie słowo „Restaurant” lub numer identyfikacyjny o wartości 20, które to firmy zostały założone dnia 8 lipiec 2001 roku. Wyszukiwanie z listy wartości Do wyszukiwania wartości z podanej listy służy słowo IN. Przykładowo: SELECT companyname, country FROM suppliers WHERE country IN ('Japan', 'Italy') W wyniku zapytania otrzymamy wszystkie nazwy firm, które mieszczą się w Japonii lub we Włoszech. Wyszukiwanie wartości nieznanych Bazy danych pozwalają na przechowywanie wartości NULL w niektórych polach. Wyszukiwanie rekordów o nieokreślonych lub pustych wartościach ma wiele praktycznych zastosowań. Przykładowo: SELECT companyname, fax FROM suppliers WHERE fax IS NULL W wyniku wykonania zapytania otrzymamy wszystkie nazwy firm, dla których wartość pola fax jest pusta. Wprowadzanie danych Podstawą dodawania informacji jest instrukcja INSERT. Korzysta ona z następującej składni: INSERT INTO [nazwa_serwera.][nazwa_bazy_danych.] [nazwa_schematu.]nazwa_tabeli (nazwa_pola1[,nazwa_pola2[,…n]]) VALUES (wartosc1[,wartosc2[,…n]]) Przykładowo: INSERT INTO customers (customersid, companyname, address, city, phone, fax) VALUES (‘PECOF’, ‘Pecos Coffee Company’, ‘1900 Street’, ‘London’, ‘(604)555-3392’, ‘(604)555-3393’) Czasami zachodzi potrzeba wstawienia pustego wiersza do tabeli. Wstawianie takie dokonuje się w następujący sposób: INSERT INTO [nazwa_serwera.][nazwa_bazy_danych.] [nazwa_schematu.]nazwa_tabeli DEFAULT VALUES Strona 5/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Zdarza się, że występuje potrzeba przeniesienia informacji z jednego systemu bazodanowego do drugiego bez utraty danych. Zadanie to można zrealizować przy pomocy wielu metod. Omówimy tutaj dwa sposoby przenoszenia danych: z wykorzystaniem narzędzia BCP oraz instrukcji BULK INSERT. Narzędzie BCP uruchamiane jest z wiersza poleceń. Pozwala ono na import i eksport danych wielkich rozmiarów. BCP wymaga podania nazwy bazy danych źródła, nazwy tabeli lub widoku, identyfikatora działania (in lub out) oraz nazwy zewnętrznego pliku danych. Podstawowa składnia jest następująca: BCP baza_danych.schemat.{ nazwa_tabeli | nazwa_widoku } { in | out } nazwa_pliku_zewnętrznego modyfikator_zabezpieczeń modyfikator_formatu Poniższy przykład eksportuje rekordy z tabeli Product do pliku CSV: bcp AdventureWorks.Production.Product out "Products.txt" –T -c Następnie można zaimportować dane za pomocą składni: bcp AdventureWorks.Production.Product2 in "Products.txt" –T -c Może zdarzyć się sytuacja, że zajdzie potrzeba zaimportowania informacji do bazy danych, ale ze względów bezpieczeństwa nie będzie można użyć narzędzia BCP. Istnieje polecenie T-SQL, które pozwala na rozwiązanie tego problemu. Do wstawiania danych do bazy z poziomu języka T-SQL służy instrukcja BULK INSERT, której przykładowe wywołanie ma postać: BULK INSERT [AdventureWorks].[Production].[Product2] FROM 'C:\Product.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', CODEPAGE = 'ACP' ) Usuwanie danych Istnieją sytuacje, kiedy musimy usunąć część lub wszystkie informacje z bazy danych. Przykładem może być skasowanie błędnie wprowadzonych rekordów lub gdy chcemy pozbyć się starych informacji z tabel historycznych. We wszystkich tych sytuacjach korzysta się z polecenia DELETE. Poniżej przedstawiono podstawową składnię polecenia DELETE. DELETE FROM [nazwa_serwera.][nazwa_bazy_danych.] [nazwa_schematu.]nazwa_tabeli WHERE warunki Wiersze można usunąć korzystając z dowolnych kolumn tabeli w klauzuli WHERE. Przykładowo: DELETE FROM AdventureWorks.Person.Address WHERE AddressID = 1 Warunek w klauzuli WHERE może zostać użyty z dowolnymi argumentami do usuwania informacji, także tymi, które określają zakresy danych i korzystają z logicznych kombinacji AND, OR i NOT. Przykładowo: DELETE FROM Production.Product WHERE (MakeFlag = 1) AND (ReorderPoint BETWEEN 200 AND 600) Strona 6/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML AND (SellStarDate<CONVERT(DATETIME, '2000-01-01 00:00:00', 102)) Czasami istnieje potrzeba usunięcia wierszy z tabeli na postawie warunków dotyczących innej tabeli lub tabel. Najlepszym sposobem jest wówczas użycie operatora IN. Przykładowo: DELETE FROM [AdventureWorks].[Production].[ProductInventory] WHERE ProductID In ( SELECT ProductID FROM Production.Product WHERE (MakeFlag = 1) AND (ReorderPoint BETWEEN 200 AND 600) AND (SellStarDate<CONVERT(DATATIME,'2000-01-01 00:00:00', 102)) Najlepszą kontrolę nad operacjami w bazie danych zapewniają procedury składowane. W takiej sytuacji implementacja procedury składowanej jest podobna do implementacji innych działań definiowanych wewnątrz procedury składowanej. Przykładowo: CREATE PROCEDURE [Sales].[CurrencyRate_Delete] @id int AS DELETE FROM [AdventureWorks].[Sales].[CurrencyRate] WHERE CurrencyRateID = @id GO Uaktualnianie danych Do modyfikacji danych w tabelach używa się polecenia UPDATE. Jego podstawowa składnia jest następująca: UPDATE [nazwa_serwera.][nazwa_bazy_danych.] [nazwa_schematu.]nazwa_tabeli SET nazwa_kolumny = nowa_wartosc [WHERE warunek] Polecenie UPDATE oczywiście można stosować bez warunku WHERE. Przykładowe rozwiązanie Wprowadzanie danych Żebyśmy mogli wybierać jakiekolwiek dane, w pierwszym kroku powinniśmy zasilić naszą bazę danych przykładowymi wartościami. Załóżmy, że mamy tabelę Ksiazki w bazie danych Biblioteka. Strukturę tabeli Ksiazki pokazano na rys. 2. Rys. 2 Tabela Ksiazki w bazie danych Biblioteka Pokażemy dwa sposoby wstawiania przykładowych danych do tabeli Ksiazki. Sposób pierwszy polega na wstawieniu pojedynczego wiersza za pomocą instrukcji INSERT. Przykładowo: INSERT INTO Ksiazki (ID_Ksiazka, Nazwisko, Imie, Tytul, Wydawnictwo, Rok_wydania, CD) VALUES ('1', 'Kowalski', 'Jan', 'Programowanie baz danych', 'Microsoft Press', '2006', '1') W wyniku wykonania powyższej instrukcji tabela Ksiazki będzie zawierała jeden rekord, co pokazano na rys. 3. Strona 7/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Rys. 3 Tabela Ksiazki po wstawieniu rekordu Ja widać sposób ten nie jest zbyt efektywny przy wstawianiu większej liczby danych. W sytuacji kiedy mamy do zaimportowania tysiące rekordów, lepszym rozwiązaniem jest użycie na przykład instrukcji BULK INSERT. Załóżmy że dane, które chcemy zaimportować, znajdują się w pliku ksiazki.txt, w postaci jak pokazano na rys. 4. Rys. 4 Dane zawarte w pliku książki.txt Wówczas wywołanie instrukcji importu będzie wyglądało w następujący sposób: BULK INSERT Ksiazki FROM 'C:\ksiazki.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', CODEPAGE = 'ACP' ) Poważny problem pojawiłby się w sytuacji, kiedy w kolumnie CD przechowywalibyśmy wartości typu logicznego. Wówczas przy eksporcie danych do pliku wartość logiczna TRUE lub FALSE zostałaby zamieniona na wartość tekstową 0 lub 1. Jeżeli w kolejnym kroku chcielibyśmy zaimportować te same dane do bazy, wówczas pojawiłby się błąd związany z niezgodnością typów danych (kolumna ma typ logiczny, a z pliku importujemy dane tekstowe). Wybieranie danych Jeżeli nasza baza danych jest już uzupełniona danymi, to w kolejnym kroku możemy zastanowić się, jakie dane mogą być najczęściej wybierane przez użytkowników. Przykładowo dla tabeli Ksiazki użytkownik najczęściej może wyszukiwać książki po: • • • • • imionach autorów wydawnictwie roku wydania informacji o płycie CD kombinacji: autor, wydawnictwo, rok wydania i informacje o płycie CD Przykładowo jeżeli chcielibyśmy znaleźć autora o nazwisku Kowalski, wówczas instrukcja SELECT mogłaby mieć następującą postać: SELECT Nazwisko, Imie, Tytul FROM Ksiazki WHERE Nazwisko='Kowalski' Natomiast jeżeli chcielibyśmy znaleźć autorów o nazwisku Kowalski lub Andziński, wówczas instrukcja SELECT mogłaby wyglądać w ten sposób: SELECT Nazwisko, Imie, Tytul FROM Ksiazki WHERE (Nazwisko='Kowalski') OR (Nazwisko='Andziński') Strona 8/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML W sytuacji kiedy chcielibyśmy znaleźć autorów, których nazwisko kończy się na -ski, wówczas moglibyśmy sformułować instrukcję SELECT następująco: SELECT Nazwisko, Imie, Tytul FROM Ksiazki WHERE Nazwisko LIKE '%ski' Oczywiście moglibyśmy do tego dołączyć jeszcze wyszukiwanie po dacie, wówczas otrzymalibyśmy: SELECT Nazwisko, Imie, Tytul, Rok FROM Ksiazki WHERE (Nazwisko LIKE '%ski') AND (Rok='2003') W sytuacji kiedy chcemy znaleźć autora o nazwisku zakończonym na -ski, który wydał w 2003 roku książkę z dołączoną płytą CD, możemy użyć następującego zapytania: SELECT Nazwisko, Imie, Tytul, Rok, CD FROM Ksiazki WHERE (Nazwisko LIKE '%ski' OR Rok='2003') AND (CD='1') Najbardziej skomplikowanego zapytania potrzebujemy wówczas, gdy chcemy znaleźć autora o nazwisku zakończonym na -ski, którego książka wraz z dołączoną płytą CD została wydana w 2003 roku nakładem wydawnictwa Selion. Wówczas zapytanie może przyjąć postać: SELECT Nazwisko, Imie, Tytul, Rok, Wydawnictwo, CD FROM Ksiazki WHERE (Nazwisko LIKE='%ski' OR Rok='2003') AND (Wydawnictwo='Selion') AND (CD='1') Porady praktyczne Uwagi ogólne • Najlepszą kontrolę nad operacjami wykonywanymi na bazie danych zapewniają procedury składowane. Dzięki nim możesz zapewnić jednolity model dostępu do bazy z poziomu aplikacji, a także poprawić bezpieczeństwo i wydajność. Z tych powodów powinieneś rozważyć użycie procedur składowanych we własnych aplikacjach. • Tworzenie dynamicznych poleceń wstawiania danych może zagrażać bezpieczeństwu bazy, dlatego wielce prawdopodobnie jest, że administrator będzie preferował zabezpieczenia tabel przez odmowę uprawnień zapisu do tabeli. Z tego powodu dobrym rozwiązaniem jest zarządzanie operacjami wstawiania danych za pomocą procedur składowanych. Wybieranie danych • Użycie polecenia SELECT * FROM Department odczytuje wszystkie kolumny z tabeli. Zazwyczaj nie potrzebujemy informacji o wszystkich kolumnach, natomiast wykonanie takiego zapytania bez potrzeby może spowodować sporo problemów. Przykładowo: a) Aplikacje mogą działać nieprawidłowo po dodaniu nowych kolumn do tabeli. Jeśli ich twórcy nie przewidzieli takiego możliwości, nieoczekiwane kolumny zostaną niepoprawnie obsłużone. b) Jeśli zostaną wybrane wszystkie kolumny, optymalizator zapytań nie będzie używał niektórych indeksów. • Jeśli zajdzie potrzeba wykorzystania w klauzuli WHERE operatorów logicznych AND i OR, warto rozważyć stosowanie nawiasów. Pozwalają one precyzyjnie określić kolejność wykonywania operacji logicznych. • W wielu przypadkach możemy na wiele sposobów otrzymać tan sam efekt wywołania zapytania. Przykładowo następujące dwa zapytania zwracają te same rekordy: SELECT company, Date FROM customers WHERE year(ShipDate)=2001 and month(ShipDate)=7 SELECT company, Date Strona 9/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML FROM customers WHERE ShipDate between '2001-07-01' and '2001-07-31' Pierwsze z zapytań odczytuje datę i miesiąc. Po odczytaniu wszystkich wierszy wykonuje obliczenia i je porównuje. Drugie zapytanie wykonuje tylko porównanie, bez obliczeń, ponadto jeżeli na kolumnie ShipDate znajduje się indeks, to zostanie on użyty – a zatem zapytanie drugie jest szybsze. • Można używać jednej, kilku lub wszystkich kolumn do utworzenia warunku w klauzuli WHERE. Jego wydajność można poprawić poprzez: a) zastosowanie klucza głównego w warunku b) użycie kolumn, które są indeksowane Wprowadzanie, usuwanie i uaktualnianie danych • Aby skasować wszystkie wiersze z tabeli, zamiast instrukcji DELETE można użyć instrukcji TRUNCATE TABLE. Różnica w stosunku do instrukcji DELETE polega na tym, iż zadanie kasowania odbywa się szybciej. Używając TRUNCATE TABLE trzeba mieć pewność, że tabela nie ma żadnych związków z innymi tabelami. • Możne usuwać wiersze z tabeli za pośrednictwem widoków, jednak występują tutaj pewne ograniczenia: a) Można usunąć wiersze tylko z jednej tabeli. b) Użytkownik musi posiadać uprawnienia do usuwania dla widoku. • Można wykonywać zadania uaktualniające korzystając z widoków. W takiej sytuacji istnieją pewne ograniczenia: a) Uaktualnienia są dozwolone tylko dla kolumn z pojedynczej tabeli. b) Użytkownik musi mieć uprawnienia do zapisu dla widoku. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • • • • rozumiesz składnię języka T-SQL DML umiesz skonstruować podstawowe zapytania do bazy danych umiesz zaimportować dane do swojej bazy danych umiesz modyfikować dane w swojej bazie danych Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Kalen Delaney, Microsoft SQL Server 2005: Rozwiązania praktyczne krok po kroku, Microsoft Press, 2006 W książce autor przedstawia między innymi w jaki sposób pobierać dane z instancji SQL Server za pomocą języka T-SQL. Pozycja polecana dla osób, które chciałyby dowiedzieć się nieco więcej na temat praktycznych metod pobierania danych. 2. Kalen Delaney, Podstawy baz danych krok po kroku, APN Promise, 2006 Bardzo dobra książka dla osób początkujących. W łatwy i przejrzysty sposób pokazano, jak należy odczytywać dane z SQL Server, jak je wybierać, modyfikować, usuwać i uaktualniać. Książka oprócz teorii zawiera dużo przykładów. Strona 10/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML 3. Deren Bieniek, Randy Dyess, Mike Hotek, Javier Loria, Adam Machanic, Antonio Soto, Adolfo Wiernik, SQL Server 2005. Implementacja i obsługa, APN Promise, Warszawa 2006 W książce przedstawiono pracę z językiem T-SQL DML. Pokazano, w jaki sposób tworzyć zapytania, formatować wynikowy zbiór wierszy oraz modyfikować dane. Książka szczególnie polecana ze względu na dużą zawartość ćwiczeń laboratoryjnych. 4. Dusan Petkovic, Microsoft SQL Server 2008: A Beginner's Guide, McGraw-Hill, 2008 Pozycja napisana w sposób przystępny. Wprowadza w SQL Server 2008 w sposób szybki i łatwy. Osoba początkująca w SQL Server 2008 znajdzie w niej podstawy z każdego tematu dotyczącego serwera bazodanowego. W prosty sposób dowiesz się jak należy tworzyć zapytania, formatować wyniki zapytań oraz modyfikować dane. Pozycja szczególnie polecana dla osób początkujących. Strona 11/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Laboratorium podstawowe Problem 1 (czas realizacji 45 min) Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma planuje rozszerzenie na skalę uczelnianą systemu prac dyplomowych, dyplomowych którym zarządzała dotąd na Twoim wydziale.. Zadanie, Zadanie jakie przed Tobą stoi, to zdefiniowanie nowych zapytań, które najczęściej będą wykonywali użytkownicy na Twojej bazie danych. Zadanie Tok postępowania 1. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku pl D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. Studio • W oknie logowania kliknij Connect. 2. Utwórz tabelę testową • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\Labs\Lab06\dml_1.sql. • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (1) Przygotuj tabele do testowania polecen jezyka DML USE PraceDyplomowe GO SELECT ID_Osoby, Imie, Nazwisko, Nr_Indeksu, ID_Stopnian INTO Osoba_kopia FROM Osoba GO INSERT INTO Osoba_kopia(ID_Osoby, Osoba_kopia(ID_Osoby, Imie, Nazwisko, Nr_Indeksu, ID_Stopnian) VALUES ('6','Pawel','Zaremba','65432','3') GO 3. Zapoznaj się z poleceniem SELECT • Zaznacz i uruchom (F5) ( ) poniższy fragment kodu odpowiedzialny za wyświetlenie zawartości całej tabeli Osoba.. Wynik działania pokazano na rys. 5: -- (2) Wyswietl cala zawartosc tabeli Osoba_kopia Osoba_k SELECT * FROM Osoba_kopia Osoba_kopi GO Strona 12/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Rys. 5 Wynik wyświetlenia całej zawartości tabeli Osoba_kopia • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za wyświetlenie dwóch kolumn: Nazwisko i Imie. Wynik działania pokazano na rys. 6: -- (3) Wybierz kolumny, ktore chcemy wyswietlic SELECT Nazwisko, Imie FROM Osoba_kopia GO Rys. 6 Wynik wyświetlenia dwóch kolumn Nazwisko i Imię • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za dodanie literału i aliasu. Wynik działania pokazano na rys. 7: -- (4) Dodajemy literal i alias SELECT 'Imie i nazwisko: ' + Nazwisko + ' ' + Imie AS Osoba FROM Osoba_kopia GO Strona 13/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Rys. 7 Wynik dodania literału i aliasu Alias nie jest nazwą własną. Jest to tylko tymczasowy (istniejący tylko dla zapytania, w którym został zdefiniowany, nie zapisywany nigdzie na stałe) nagłówek kolumny. Może zawierać napis będący nazwą innej kolumny lub obiektu bazy danych. • Zaznacz i uruchom (F5) ( ) poniższy fragment kodu odpowiedzialny za nie wyświetlanie duplikatu. Wynik działania pokazano na rys. 8: -- (5) Nie wyswietlajmy duplikatow SELECT DISTINCT Imie FROM Osoba_kopia GO Rys. 8 Wynik zapytania bez wyświetlania duplikatów Słowo DISTINCT, oprócz usunięcia duplikatów z wyników, ignoruje także wartości puste w zbiorze rekordów (tzn. gdy w wybranym zestawie zdarzy się wiersz, w którym wszystkie wszystki pola są puste, nie zostanie on wyświetlony). • Zaznacz i uruchom (F5) ( ) poniższy fragment kodu odpowiedzialny odpowied za sortowanie rosnące i malejące. Wynik działania pokazano na rys. 9: -- (6) sortujmy rekordy rosnaco (ASC) i malejaco (DESC) SELECT Imie, nazwisko Nr_Indeksu FROM Osoba_kopia ORDER BY Nr_Indeksu – DESC GO Strona 14/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Rys. 9 Wynik sortowania • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za ogranicenie liczby rekordów. Wynik działania pokazano na rys. 10. -- (7) ograniczmy liczbe rekordow SELECT Imie, Nazwisko FROM Osoba_kopia WHERE Nazwisko = 'Rawa' GO Rys. 10 Wynik ograniczenia liczby rekordów • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za ogranicenie liczby rekordów z użyciem operatora wiekszości. Wynik działania pokazano na rys. 11: -- (8) wyprobujmy operator wiekszosci SELECT Imie, Nazwisko, Nr_Indeksu FROM Osoba_kopia WHERE Nr_Indeksu >= 110 GO Strona 15/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Rys. 11 Wynik ograniczenia liczby rekordów z uzyciem operatora większości • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za ogranicenie liczby rekordów z użyciem operatora OR. Wynik działania pokazano na rys. 12: -- (9) wyprobujmy operator OR SELECT Imie, Nazwisko, Nr_Indeksu FROM Osoba_kopia WHERE Nr_Indeksu < 110 OR Nr_Indeksu >= 115 GO Rys. 12 Wynik ograniczenia liczby rekordów z uzyciem operatora OR • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za ogranicenie liczny rekordów z wyszukiwaniem w zbiorze wartości. Wynik działania pokazano na rys. 13. -- (10) wyszukajmy w zbiorze wartosci SELECT Imie, Nazwisko FROM Osoba_kopia WHERE Nazwisko IN ('Rawa','Nowak') GO Strona 16/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Rys. 13 Wynik ograniczenia liczby rekordów z wyszukiwaniem w zbiorze wartości • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za ogranicenie liczny rekordów z wyszukiwaniem w przedziale wartości. Wynik działania pokazano na rys. 14. -- (11) wyszukajmy w przedziale wartosci SELECT Imie, Nazwisko, Nr_Indeksu FROM Osoba_kopia WHERE Nr_Indeksu BETWEEN 110 AND 115 GO Rys. 14 Wynik ograniczenia liczby rekordów z wyszukiwaniem w przedziale wartości • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za ogranicenie liczny rekordów z użyciem operatora LIKE. Wynik działania pokazano na rys. 15. -- (12) uzyjmy operatora LIKE SELECT Imie, Nazwisko, Nr_Indeksu FROM Osoba_kopia WHERE Nazwisko LIKE '[A-F]%' GO Rys. 15 Wynik ograniczenia liczby rekordów z użyciem operatora LIKE • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za zliczanie liczny rekordów. Wynik działania pokazano na rys. 16. -- (13) zliczmy rekordy w tabeli SELECT Count(*) AS [Liczba osob] FROM Osoba_kopia GO Strona 17/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Rys. 16 Zliczanie liczby rekordów • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za dodanie nowego rekordu: -- (14) dodajmy nowy rekord INSERT INTO Osoba_kopia(ID_Osoby, Imie, Nazwisko, Nr_Indeksu, ID_Stopnian) VALUES ('7','Marek','Kogut','35472','2') GO • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za zmianę istniejącego rekordu: -- (15) zmienmy istniejacy rekord UPDATE Osoba_kopia SET Nazwisko = 'Kogucinski' WHERE LastName = 'Kogut' GO • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za zmianę istniejącego rekordu: -- (16) usunmy rekord DELETE FROM Osoba_kopia WHERE Nazwisko = 'Kogucinski' GO • Zaznacz i uruchom (F5) poniższy fragment kodu odpowiedzialny za usunięcie tabeli: -- (17) usunmy zawartosc tabeli TRUNCATE TABLE Osoba_kopia GO Strona 18/19 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 6 Język SQL DML Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma zarządzająca bazą AdventureWorks planuje rozszerzenie i modernizacje systemu w celu spełnienia pewnych standardów. Rozszerzenie to wiąże się z modyfikacją struktury bazy danych oraz importem do bazy danych wielu milionów rekordów. W konsekwencji w związku z modernizacją systemu bazodanowego oraz spełnienia standardów muszą zostać przebudowane zapytania wysyłane do obiektów bazy danych. W związku z tym część zapytań powinna zostać usunięta, część zmodyfikowana, a część od nowa utworzona. Zadania jakie przed Tobą stoją to: 1. Podjęcie decyzji, w jaki sposób usprawnić proces importu wielu milionów danych do systemu bazodanowego. 2. Podjęcie decyzji, które zapytania w bazie danych pozostaną bez zmian, a które zostaną zmodyfikowane lub usunięte. 3. Podjęcie decyzji, jakie nowe zapytania powinny zostać utworzone. Strona 19/19 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 7 Wersja 1.0 Indeksy i transakcje Spis treści Indeksy i transakcje .............................................................................................................................. 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 9 Porady praktyczne ..................................................................................................................... 12 Uwagi dla studenta .................................................................................................................... 13 Dodatkowe źródła informacji..................................................................................................... 14 Laboratorium podstawowe ................................................................................................................ 15 Problem 1 (czas realizacji 30 min).............................................................................................. 15 Problem 2 (czas realizacji 15 min).............................................................................................. 18 Laboratorium rozszerzone ................................................................................................................. 20 Zadanie 1 (czas realizacji 90 min)............................................................................................... 20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Informacje o module Opis modułu W module tym znajdziesz informacje na temat dostępu fizycznego do danych oraz optymalizacji dostępu. Poznasz indeksy i ich rodzaje, a następnie dowiesz się, jakie operacje wykonywane są na indeksach. W drugiej części poznasz transakcje, które służą do zapewnienia spójności bazy danych i mają wpływ na wydajność bazy danych. Dowiesz się, że obsługa transakcji nie jest rzeczą łatwą i wymaga rozwiązywania wielu trudnych problemów. Cel modułu Celem modułu jest zapoznanie czytelnika z podstawowymi mechanizmami indeksowania oraz struktury pisania transakcji. Zostaną przedstawione proste przykłady, które mają pokazać mechanizmy obowiązujące w metodach indeksowania oraz w transakcjach. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • • • • wiedział, na czym polega zasada działania indeksów potrafił we właściwy sposób dobierać politykę indeksowania znał zasadę funkcjonowania transakcji potrafił we właściwy sposób pisać proste transakcje Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • umieć stworzyć bazę danych wraz z jej podstawowymi obiektami (patrz: moduł 3) • znać zaawansowane mechanizmy programowania w języku T-SQL (patrz: moduł 9) • znać podstawowe mechanizmy bezpieczeństwa (patrz: moduł 11) Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na rys. 1, przed przystąpieniem do realizacji tego modułu należy zapoznać się z materiałem zawartym w modułach 3, 8 i 11. Rys. 1 Mapa zależności modułu Strona 2/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Przygotowanie teoretyczne Przykładowy problem Tak jak już Wiesz z bazy danych może korzystać wielu użytkowników, dysponujących różnorakimi uprawnieniami i mających dostęp do różnych obiektów w bazie danych. W związku z tym jednym z podstawowych zadań, jakie stoi przed osobami odpowiedzialnymi za prawidłowe funkcjonowanie bazy danych, jest dobór odpowiedniej polityki indeksowania, która pozwoli na szybsze przeszukiwanie bazy danych. Bezpośrednio z polityką indeksowania bazy danych związana jest optymalizacja i strojenie bazy danych, między innymi poprzez przebudowę indeksów. Kolejnym mechanizmem, z jakim bardzo często możemy się spotkać, są transakcje. Według definicji są to operacje, które są niepodzielne i muszą być wykonane w całości. Innym ważnym zadaniem transakcji jest zapewnienie spójności bazy danych oraz umożliwienie równoległych operacji na niej. W celu dobrego pisania transakcji potrzebna jest znajomość zaawansowanego programowania w języku T-SQL. Transakcje stanowią bardzo ważny element programowania baz danych i powinny być pisane profesjonalnie. Przykładem transakcji może być wypłata pieniędzy z bankomatu, płatność kartą debetową itp. Podstawy teoretyczne Dostęp fizyczny do danych Zrozumienie mechanizmu dostępu do danych zapisanych w bazie danych jest bardzo istotne dla zrozumienia zasad działania indeksów. Jak wiadomo, dane w bazach danych w sposób trwały są zapisywane na dyskach optycznych, magnetycznych lub rodzinach nośników o dostępie bezpośrednim, takich jak macierze RAID (ang. Redundant Array of Independent Disks). Zasady działania tego typu nośników oraz pojęcia głowicy, cylindrów, strony danych itp. powinny być Ci znane z przedmiotu „Podstawy Informatyki” lub podobnego. System zarządzania bazami danych najczęściej nie zajmuje się fizyczną obsługą dysków. W procesie dostępu do danych biorą udział: • Menedżer plików – posiada wiedzę o strukturze systemu plików i jest odpowiedzialny za odszukanie odpowiedniego pliku. • Menedżer dysku – posiada wiedzę na temat fizycznej organizacji dysku i jest odpowiedzialny za odnalezienie odpowiedniej strony danych. Schemat łańcucha dostępu do danych pokazany jest na rys. 2. Rys. 2 Schemat dostępu do danych Strona 3/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Optymalizacja dostępu Zasadniczy czas dostępu do danych bazy to czas odczytu danych z dysków. W celu optymalizacji tego dostępu stosuje się metodę zwaną klastrowaniem. Klastrowanie polega na dążeniu do utrzymania logicznie powiązanych rekordów blisko siebie na dysku. Taka organizacja danych znacznie przyspiesza dostęp do nich. Aby odczytać dane powiązane, głowica nie musi wykonywać dużych ruchów, a tym samym maleją czasy wyszukiwania. Rozróżniamy dwa rodzaje klastrowania: • Klastrowanie wewnątrzplikowe – polega na grupowaniu rekordów obok siebie wewnątrz jednego pliku. • Klastrowanie międzyplikowe – polega na umieszczaniu na stronie obok siebie rekordów pochodzących z więcej niż jednego pliku (tabeli). Optymalizacja dostępu do danych sprowadza się w zasadzie do odpowiedniego zarządzania stronami i decydowania, w jaki sposób dane mają być klastrowane. Więcej na temat fizycznej struktury danych możesz znaleźć w module 4 Indeksy i ich zastosowanie Zastanowimy się teraz nad problemem wyszukiwania danych w tabeli. Na przykład załóżmy, że w tabeli Studenci chcemy znaleźć studenta o nazwisku Nowak. Tab. 1 Przykładowa tabela bazy studentów ID Nazwisko Imie Wydzial 1 Olacki Jan Elektryczny 2 Babicki Adam Mechaniczny 3 Nowak Jerzy Elektryczny 1 Adamski Adam Elektronika Wiersze zapisane są w bazie w kolejności ich wpisywania i nie są w szczególny sposób sortowane. Co robi wobec tego system, kiedy wydajemy polecenie odnalezienia rekordu zawierającego informacje o Nowaku, np.: SELECT imie, nazwisko FROM Studenci WHERE Nazwisko = 'Nowak' System musi przeszukać całą tabelę (skanowanie wszystkich stron danych zawierających dane z tabeli) i przejrzeć wszystkie rekordy tej tabeli, aby mieć pewność, że odnalazł rekordy zawierające nazwisko Nowak. Operacja taka jest oczywiście czasochłonna. Podobnie jest, gdy w książce poszukujemy jakiegoś hasła (na przykład w podręczniku do baz danych szukamy informacji o indeksach). Aby znaleźć szukaną informację, powinniśmy przeczytać całą książkę. Na szczęście niektóre książki są wyposażone na końcu w specjalne zestawienie haseł – czyli w indeks. Nasze postępowanie przebiega wówczas następująco: 1. Odszukujemy poszukiwane hasło w indeksie, który jest uporządkowany alfabetycznie (co znacznie ułatwia nam odnalezienie hasła). 2. Odczytujemy w indeksie numer strony, na której hasło to występuje w książce. 3. Otwieramy książkę na odpowiedniej stronie. 4. Przeglądamy stronę w poszukiwaniu naszego hasła. 5. Odczytujemy informacje związane z szukanym hasłem. Strona 4/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Idea działania indeksów w bazie danych jest dokładnie taka sama. Indeks określony na atrybucie A relacji jest mechanizmem, który pozwala na efektywne wyszukiwanie krotek o ustalonej wartości składowej atrybutu A. Jak więc wyglądałby indeks dla tabeli Studenci? Indeks określany jest dla konkretnego pola. Mówimy wówczas, że pole to jest polem indeksowanym. W wypadku tabeli Studenci możemy jako pole indeksowane wybrać pole Nazwisko, wówczas założenie indeksu na tym polu będzie oznaczało założenie przez system dodatkowej tabeli, w której umieszczone zostaną nazwiska studentów z tabeli Studenci oraz przesłanki, gdzie należy szukać (na której stronie danych) pełnej informacji o wybranych studentach. Dodatkowo rekordy w tabeli indeksu zostaną posortowane w kolejności alfabetycznej nazwisk. Poszukiwanie naszego studenta Nowaka będzie teraz przebiegać znacznie szybciej. Działanie i rola indeksów polega głównie na przyspieszeniu wyszukiwania rekordów w bazie danych. Niestety obciążają one dodatkowo system w czasie aktualizacji lub wstawiania danych, bowiem oprócz umieszczenia rekordu w bazie musi on również dokonać wpisu w tabeli indeksu oraz ponownie posortować trzymane w niej rekordy. Zalety i wady stosowania indeksów zebrano w tab. 2. Tab. 2 Zalety i wady stosowania indeksów Zalety Wady Przyspieszają dostęp do danych Zajmują miejsce na dysku Wymuszają unikatowość wierszy Zwiększają obciążenie systemu Niektóre z pól warto indeksować, inne natomiast nie powinny być nigdy indeksowane. Do pierwszej grupy można zaliczyć: • klucze podstawowe i obce (często są indeksowane automatycznie) • pola, po których często następuje wyszukiwanie • pola, do których dostęp następuje w ustalonej, uporządkowanej kolejności Nie należy indeksować: • pól, do których rzadko odwołują się zapytania • pól, które zawierają tylko kilka wartości unikatowych • pól zawierających dane typu image, bit czy obiekt OLE Indeksy mogą być zakładane na jednym polu lub na kilku jednocześnie. Rodzaje indeksów Indeksy można klasyfikować w różny sposób. My podzielimy indeksy na dwie grupy: • indeksy grupowane (klastrowe) • indeksy niegrupowane (nieklastrowe) Indeksy grupowane Indeks grupowany działa na podobnej zasadzie, co książka telefoniczna. Zawiera strony szybkiego dostępu do danych (w książce telefonicznej na początku znajduje się alfabetyczny spis mówiący o tym, na której stronie szukać nazwisk, firm czy instytucji zaczynających się na daną literę alfabetu). Strony te są ułożone w odwrócone drzewo i przechowują tylko ułożone alfabetycznie wartości indeksowanego pola oraz wskaźniki do stron znajdujących się w niższej warstwie drzewa. Strona 5/20 Włodzimierz Dąbrowski, Przemysław emysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Na samym dole drzewa znajdują się strony zawierające posortowane wg indeksowanego indek pola dane (w książce telefonicznej zawartość też jest posortowana – wg nazwisk lub nazw firm czy instytucji). Przeszukiwanie indeksu odbywa się z góry na dół na następującej zasadzie: porównywana jest szukana wartość pola indeksowanego z wartościami wartościami zapisanymi (i posortowanymi) na stronach indeksu – jeśli znajdzie się wartość „większa” od wartości szukanej, wtedy następuje skok jeden poziom niżej do strony wskazywanej przez ostatnią pozycję (na ostatnio sprawdzanej stronie), która nie była „większa”” od szukanej wartości. Każda pozycja na stronach zawiera wskaźnik do strony danych jeden poziom niżej w hierarchii indeksu. Dzięki takiej strukturze przeszukiwane są tylko wybrane strony z danymi, nie zaś wszystkie strony zawierające dane z wybranej tabeli. tabel Rys. 3 Indeks grupowany Indeksy niegrupowane Indeks niegrupowany działa na podobnej zasadzie, co indeks w typowej książce (ale nie w telefonicznej). Indeks niegrupowany budowany jest na stronach danych, które nie są sortowane. Składa się z co najmniej dwó óch poziomów: poziomu niepomocniczego i poziomów pomocniczych. pomocniczych Na stronach poziomu niepomocniczego, podobnie jak w przypadku indeksu grupowanego, przechowywane są wartości indeksowanego pola ze wskaźnikami do poziomu niżej w drzewie drze indeksu. Strony poziomu pomocniczego zwane też liśćmi i zawierają wskaźniki do konkretnych stron danych (które nie są posortowane). Wskaźnik taki zawiera następujące dane: ID pliku, numer strony, numer wiersza na stronie. Przeszukiwanie indeksu niegrupowanego niegrupowanego odbywa się na podobnej zasadzie, jak w indeksie grupowanym. Po dojściu do poziomu pomocniczego następują skoki do stron danych (do konkretnych wierszy). Rys. 4 Indeks niegrupowany Strona 6/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Operacje na indeksach Indeksy są najczęściej tworzone automatycznie dla kluczy głównych oraz pól, dla których ma być wymuszona unikatowość. Można też tworzyć je dla innych pól, korzystając z polecenia języka SQL CREATE INDEX. Poniżej podano przykład utworzenia indeksu grupowanego dla dla pola Nazwisko w tabeli Recenzent: USE PraceDyplomowe CREATE CLUSTERED INDEX cl_nazwisko ON Recenzent (Nazwisko) Indeks może też być zakładany na kilku polach jednocześnie. Poniższy przykład pokazuje sposób definiowania unikalnego indeksu na polach Nazwisko i Imie tabeli Osoba: CREATE UNIQUE INDEX Indeks_Osoba ON Osoba (Nazwisko, Imie) Założenie takiego indeksu spowoduje, że będzie możliwe wprowadzanie jedynie unikatowych par imię-nazwisko. Transakcje Transakcja jest ciągiem operacji wykonywanych na bazie danych, które są niepodzielne i muszą być wykonane w całości. Jest więc jednostką logiczną operowania na bazie. Podlega ona kontroli i sterowaniu. Każda transakcja może składać się z następujących operacji: • • • • czytanie danej x przez transakcję T zapisanie danej x przez transakcję T wycofanie transakcji T zatwierdzenie transakcji T Transakcje służą do zapewnienia spójności bazy danych oraz umożliwiają równoległe wykonywanie operacji na niej. Jeśli wiele procesów działa jednocześnie na bazie danych, to może łatwo dojść do utraty spójności danych, a co za tym idzie do błędów i otrzymywania niewłaściwych rezultatów operacji. Transakcja zabezpiecza również przed częściowym wykonaniem zbioru operacji, które mogą być przerwane, na przykład w wyniku awarii. Klasycznym przykładem jest operacja polegająca na wypłacaniu pieniędzy z bankomatu. W uproszczeniu operacje realizowane w czasie wypłaty pieniędzy z bankomatu są następujące: 1. 2. 3. 4. 5. 6. 7. Klient wczytuje kartę magnetyczną i jest rozpoznawany. Klient określa sumę wypłaty. Konto klienta jest sprawdzane. Konto jest zmniejszane o sumę wypłaty. Wysyłane jest zlecenie do kasy. Bankomat odlicza sumę i koryguje stan gotówki w bankomacie. Bankomat wypłaca klientowi pieniądze. Zaistnienie awarii w kroku 5 lub 6 może prowadzić do niezbyt przyjemnej sytuacji dla posiadacza konta. Transakcje pozwalają na uniknięcie tego typu niespodzianek. Postulaty AICD Każda transakcja powinna spełniać cztery postulaty. Są to tak zwane postulaty AICD. Strona 7/20 Włodzimierz Dąbrowski, Przemysław emysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje 1. Atomowość (ang. atomicity) atomicity – w ramach jednej transakcji wykonują się albo wszystkie operacje, albo żadna. 2. Spójność (ang. consistency) consistency – o ile transakcja zastała bazę danych w spójnym stanie, po jej zakończeniu stan jest również spójny (w międzyczasie stan może być chwilowo niespójny). 3. Izolacja (ang. isolation) isolation – transakcja nie wie nic o innych transakcjach i nie musi uwzględniać ich działania. Czynności wykonane przez daną transakcję transakcję są niewidoczne dla innych transakcji aż do jej zakończenia. 4. Trwałość (ang. durability) durability – po zakończeniu transakcji jej skutki są na trwale zapamiętane (na dysku) i nie mogą być odwrócone przez zdarzenia losowe (np. wyłączenie prądu). Transakcje w SQL W języku SQL każda transakcja rozpoczyna się słowem BEGIN TRANSACTION, TRANSACTION a kończy operacją COMMIT oznaczającą pomyślne zakończenie transakcji lub operacją ROLLBACK, ROLLBACK oznaczającą wycofanie transakcji. Dowolne polecenie SELECT, SELECT INSERT, UPDATE, DELETE czy CREATE rozpoczyna transakcję. Transakcja trwa aż do wydania komendy COMMIT (potwierdzającej) lub ROLLBACK (zrywającej, cofającej). Transakcja może objąć dowolną liczbę poleceń SELECT, INSERT, INSERT UPDATE, DELETE, CREATE i innych. Stosowanie zamków oraz problem z zakleszczaniem Zarządzanie transakcjami wymaga zastosowania specjalnego modułu (zwanego modułem planisty) oraz protokołu zarządzania transakcjami. W celu uniknięcia problemów ze współbieżnym dostępem stosuje się mechanizmy blokady dostępu do danych, danych tzw. zamki. Wyróżniamy dwa typy zamków: • Zamek typu X – założenie zamka tego typu całkowicie blokuje dostęp do obiektu dla innych transakcji. • Zamek typu S – założenie zamka tego typu powoduje, że inne transakcje mogą czytać dane, ale nie mogą ich modyfikować. Najczęściej ajczęściej stosowanym w bazach relacyjnych protokołem zarządzania transakcjami jest protokół blokowania dwufazowego 2PL (ang. two-phase locking). ). Reguły pracy protokołu 2PL są następujące: 1. Jeśli dana operacja pi(x) może być wykonana, to planista zakłada blokadę bl na daną x dla transakcji Ti i operację przekazuje do wykonania. Jeśli natomiast operacja ta nie może być wykonana, to umieszcza ją w kolejce. 2. Zdjęcie założonej blokady może nastąpić dopiero wtedy, gdy operacja zostanie wykonana. 3. Jeśli nastąpiło zdjęcie ie jakiejkolwiek blokady założonej dla transakcji T, to dla tej transakcji nie można założyć żadnej innej blokady. Postępując zgodnie z tymi zasadami przebieg wykonania transakcji wymusza dwie fazy obsługi transakcji. W pierwszej fazie są zakładane blokady, blokady, a w drugiej następuje ich zdejmowanie. Faza druga jest znacznie szybsza od pierwszej. Rys. 5 Protokół blokowania dwufazowego 2PL Strona 8/20 Włodzimierz Dąbrowski, Przemysław emysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Stosowanie zamków może prowadzić do zjawiska zwanego zakleszczaniem.. Zakleszczanie polega na tym, że transakcje blokują się, oczekując siebie nawzajem. Powodem powstania zakleszczeń jest konieczność oczekiwania na zwolnienie zasobu, do którego dostęp potrzebują. Weźmy pod uwagę dwie transakcje A i B. Transakcja A blokuje zasób X i żąda dostępu do zasobu Y. Transakcja B blokuje zasób Y i żąda dostępu do zasobu X. W wyniku tego dochodzi do zakleszczenia i żadna z transakcji nie może wykonywać swojej akcji. Inne przykłady zakleszczeń są pokazane na rys. 6. Rys. 6 Zakleszczenie transakcji Stemple czasowe oraz ziarnistość transakcji Każda transakcja w momencie startu dostaje dostaje unikalny stempel czasowy. Stempel ten jest na tyle precyzyjny, aby móc po nim rozróżniać transakcje. Żadna zmiana nie jest nanoszona do bazy danych, transakcja działa na swoich własnych kopiach aż do potwierdzenia. Każdy obiekt bazy danych przechowuje dwa stemple czasowe: transakcji, która ostatnio brała obiekt do czytania zytania i transakcji, która ostatnio brała obiekt do modyfikacji. W momencie potwierdzenia sprawdza się stemple transakcji oraz wszystkich pobranych przez nią obiektów. Można dość łatwo wyprowadzić reguły zgodności, np. jeżeli obiekt był aktualizowany i stempel st na obiekcie do aktualizacji jest taki sam, jak stempel transakcji, to transakcja może zostać wykonana, w przeciwnym razie należy ją zerwać i uruchomić od nowa. Jeżeli obiekt był tylko czytany i stempel na obiekcie do aktualizacji jest starszy niż stempel ste transakcji, to transakcja może zostać wykonana, wykonana w przeciwnym razie należy ją zerwać i uruchomić od nowa. Z problemem zakładania zamków wiąże się również problem ziarnistości. Ziarnistość oznacza decyzję, co będzie niepodzielną jednostką, na którą zakłada zakłada się blokady. Poziomy ziarnistości mogą dotyczyć: bazy danych, relacji, rekordu, elementu rekordu, pojedynczego atrybutu, fizycznej strony pamięci. Grube ziarna mogą zapewnić znaczny poziom bezpieczeństwa, jednak dają niewielki stopień współbieżności procesów. rocesów. Z kolei małe ziarna wiążą się z dużymi nakładami na zakładanie zamków oraz ich obsługę. Przykładowe rozwiązanie Optymalizacja bazy danych Bardzo często działająca od jakiegoś czasu baza danych, na której wykonuje się bardzo dużo operacji, zaczyna działać woniej niż podczas pierwszego uruchomienia. Wówczas do głównego zadania administratora bazy danych należy zoptymalizowanie jej oraz przebudowa indeksów. Do tego celu może posłużyć nam narzędzie SQL Server Profiler. Strona 9/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje SQL Server Profiler to potężne choć rzadko wykorzystywane narzędzie do analizy problemów z wydajnością bazy danych. Wykorzystując profiler do przechwytywania śladów (ang. traces) aktywności bazy danych można analizować wzorce zapytań, aby wykryć problemy z wydajnością nawet przed ich uwidocznieniem w aplikacjach. W pierwszym kroku należy zdefiniować ślad. Wewnątrz silnika bazy danych SQL Server udostępnia podsystem zdarzeń nazwany SQL Trace, który opiera się na zewnętrznych interfejsie. Interfejs ten pozwala na wywoływanie SQL Trace z wykorzystaniem różnorodnych parametrów. SQL Server Profiler uruchamia się z menu SQL Server 2008 Performance Tools. Po jego otworzeniu należy wybrać File, a następnie New Trace, co pokazano na rys. 7. Rys. 7 Definicja śladu Każdy definiowany ślad musi zostać nazwany (w naszym przykładzie użyliśmy nazwy Test). Następnie następuje wybór wzorca. Istnieje kilka wzorców, które najczęściej są monitorowane. Oczywiście możemy ustawić pusty wzorzec i sami zdefiniować opcje. Na rys. 7 użyliśmy predefiniowanego wzorca Tuning. Następnie ustawiamy sposób zapisu. Mamy możliwość zapisu do pliku lub do tabeli. Zapis do tabeli nie jest polecany, gdyż SQL Trace może generować setki tysięcy wierszy danych śladu na minutę na obciążonym serwerze. Gdy ślad jest w pełni zdefiniowany, należy go tylko uruchomić i zbierać dane. W tym celu należy kliknąć Run. Wynik działania śladu pokazano na rys. 8. Strona 10/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Rys. 8 Uruchomienie śladu Po zakończeniu zbierania śladu kolejnym etapem jest użycie narzędzia Database Engine Tuning Advisor (DTA). Odgrywa ono ważną rolę w rozwiązywaniu problemów związanych z wydajnością, pozwalając wpływać na optymizator zapytań w celu otrzymania zaleceń dla indeksów, indeksowanych widoków lub partycji, które mogą zwiększyć wydajność. W celu uruchomienia DTA należy z zakładki Tools wybrać Database Engine Tuning Advisor. Następnie należy połączyć się z serwerem, wybrać plik obciążający do analizy – ten, do którego zapisaliśmy zbierany ślad (rys. 9) – oraz określić opcje strojenia (rys. 10). Rys. 9 Definiowanie ogólnych opcji strojenia bazy danych Strona 11/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Rys. 10 Definiowanie strojenia bazy danych Po skonfigurowaniu opcji strojenia DTA można zacząć analizę klikając Start Analysis, co pokazano na rys. 11. Rys. 11 Strojenie bazy danych Po wykonaniu analizy otrzymujemy zalecenia na przykład dotyczące przebudowy indeksów, które możemy zastosować względem naszej bazy danych. Porady praktyczne Indeksowanie kolumn • Indeksy powinny być planowane z myślą o najczęściej wykonywanych w Twojej bazie danych zapytaniach SELECT z klauzulą WHERE. Pierwszym krokiem powinno być zatem wypisanie najczęściej wykonywanych zapytań (koniecznie z klauzulą WHERE) • Microsoft SQL Server umożliwia utworzenie w tabeli jednego indeksu grupowanego oraz 249 indeksów niegrupowanych. Pojedynczy indeks można założyć na maksymalnie 16 polach. To Strona 12/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje jednak tylko maksymalne możliwości serwera. W praktyce w bazach danych OLTP (ang. online transaction processing) nie tworzy się więcej niż 8 do 10 indeksów związanych z pojedynczą tabelą. • Należy pamiętać, iż nie wszystkie zapytania wykorzystują indeksy. Np. w Microsoft SQL Server zapytanie: SELECT imie, nazwisko FROM osoby WHERE nazwisko LIKE '%mar%' nie wykorzysta indeksu grupowanego na polu nazwisko, ponieważ niemożliwe będzie porównanie wartości wzorca z wartościami na stronach indeksu. • Indeksy mają kluczowe znaczenie dla optymalizacji wydajności baz danych. Dobrze zaprojektowane indeksy mogą znacząco poprawić szybkość operacji przeszukiwania bazy danych (najczęściej wykonywana operacja i dotyczy największych ilości danych), ale źle zaplanowane mogą spowodować efekt odwrotny do pożądanego. Z tego powodu należy starannie zaplanować ich strukturę. • Database Engine Tuning Advisor (DTA) to znacznie udoskonalony następca narzędzia Index Tuning Wizard dostarczanego wraz z SQL Server 2000. • Żeby Database Engine Tuning Advisor (DTA) mógł przeprowadzić optymalizację bazy danych w oparciu o plik zawierający ślad, musi on mieć co najmniej 2 MB zebranych danych. Transakcje • Zakleszczenia są poważnym problemem i mają istotny wpływ na wydajność systemu. Walka z zakleszczeniami może przebiegać według dwu metod: a) Wykrywanie zakleszczeń i rozrywanie pętli zakleszczenia – detekcja zakleszczenia wymaga skonstruowania grafu czekania (ang. wait-for graph) i tranzytywnego domknięcia tego grafu (złożoność gorsza niż n * n). Rozrywanie pętli zakleszczenia polega na wybraniu transakcji „ofiary” uczestniczącej w zakleszczeniu, a następnie jej zerwaniu i uruchomieniu od nowa. Wybór „ofiary” podlega różnym kryteriom – może nią być transakcja najmłodsza, najmniej pracochłonna, o niskim priorytecie itp. b) Niedopuszczanie do zakleszczeń – istnieje wiele tego rodzaju metod, np.: • Wstępne żądanie zasobów – przed uruchomieniem każda transakcja określa potrzebne jej zasoby. Nie może później nic więcej żądać. Wada: zgrubne oszacowanie żądanych zasobów prowadzi do zmniejszenia stopnia współbieżności. • Czekasz-umieraj (ang. wait-die) – jeżeli transakcja próbuje dostać się do zasobu, który jest zablokowany, to natychmiast jest zrywana i powtarzana od nowa. Metoda może być nieskuteczna dla systemów interakcyjnych (użytkownik może się denerwować koniecznością dwukrotnego wprowadzania tych samych danych) oraz prowadzi do spadku efektywności (sporo pracy idzie na marne). • Postulat możliwości odtworzenia stanu systemu sprzed wywołani transakcji w wypadku jej awarii (wycofania) możliwy jest dzięki m.in. zastosowaniu osobnego dziennika transakcji. Mogą być w nim zapisywane wszystkie dane, na których pracuje transakcja lub też tylko dane różnicowe. Należy jednak pamiętać, że obsługa transakcji wiąże się z dodatkowymi nakładami i obciążeniem dla systemu. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • • • • rozumiesz mechanizm działania i polityki indeksowania rozumiesz zasadę działania transakcji znasz składnię nakładania indeksów na poszczególne pola rozumiesz sposób działania transakcji Strona 13/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje • rozumiesz mechanizm zakleszczania transakcji Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Kalen Delaney, Microsoft SQL Server 2005: Rozwiązania praktyczne krok po kroku, Microsoft Press, 2006 W książce autor przedstawia między innymi w jaki sposób należy stosować transakcje w celu zapewnienia bezpiecznej współbieżności bazy danych. Pokazuje jak należy definiować transakcje w SQL Server oraz jak zarządzać odseparowanymi transakcjami. W pozycji tej znajdziesz dużo rozwiązań praktycznych. 2. Deren Bieniek, Randy Dyess, Mike Hotek, Javier Loria, Adam Machanic, Antonio Soto, Adolfo Wiernik, SQL Server 2005. Implementacja i obsługa, APN Promise, 2006 W książce obszernie przedstawiono zagadnienia związane z tworzeniem indeksów oraz transakcjami. Znajdziesz tu potrzebne informacje na temat struktury indeksu, tworzenia indeksów klastrowych i nieklastrowych oraz na temat tworzenia transakcji. Znajdziesz tutaj również szczegółowe informacje na temat optymalizacji bazy danych oraz przebudowy indeksów. Książka szczególnie polecana ze względu na dużą zawartość ćwiczeń laboratoryjnych. 3. Ramez Elmasri, Shamkant B. Navathe, Wprowadzenie do systemów baz danych, Helion, 2005 W książce tej znajdziemy dużo szczegółowych informacji na temat indeksowania oraz zagadnień związanych z przetwarzaniem transakcji. Pozycja szczególnie polecana dla osób pragnących poszerzyć swoją wiedzę z tej tematyki. Strona 14/20 Włodzimierz Dąbrowski, Przemysław emysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Laboratorium podstawowe Problem 1 (czas realizacji 30 min) Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma planuje rozszerzenie na skalę uczelnianą systemu prac dyplomowych, dyplomowych którym zarządzała dotąd na Twoim wydziale.. Zadanie, Zadanie jakie przed Tobą stoi, to zaplanowanie struktury indeksów. Zadanie Tok postępowania 1. Stwórz listę najczęściej wykonywanych zapytań • Wypisz najczęściej wykonywane zapytania na PraceDyplomowe służące do wyszukiwania prac: PraceDyplomowe, — — — — bazie danych według tytułów według autorów według promotorów według recenzentów Zastanów się, jakie inne zapytania z klauzulą WHERE można utworzyć dla bazy danych PraceDyplomowe. 2. Wybierz pola do indeksowania • Mając przed sobą listę najczęściej wykonywanych zapytań oraz strukturę tabel zaplanuj strukturę indeksów. indeksów Kandydatami do indeksowania są kolumny lub kombinacje kolumn, które: — narzucają porządek sortowania (indeks grupowy) — przechowują wartości częściej odczytywane ytywane niż modyfikowane — są wykorzystywane do łączenia (JOIN)) lub wyszukiwania (WHERE) ( danych — przechowują różnorodne wartości Zastanów się, jakie inne kolumny są dobrymi kandydatami na to, to żeby założyć na nie indeks. 3. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. Studio • W oknie logowania kliknij Connect. 4. Przygotuj tabelę • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\Lab08\Indeksy.sql i kliknij Open.. • Kliknij w menu głównym programu SQL Server Management M Studio na Tools -> Customize. • W oknie Customize kliknij przycisk Keybord. • W pozycji odpowiadającej kombinacji klawiszy Ctrl+F1 wpisz sp_helpindex i wciśnij OK.. Wynik powyższych operacji pokazano na rys. 12 12. Strona 15/20 Włodzimierz Dąbrowski, Przemysław emysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Rys. 12 Definicja klawiszy skrótu Dzięki zdefiniowaniu klawiszy skrótu w prosty sposób sp będziesz mógł wywoływać z klawiatury procedurę składowaną sp_helpindex, która wyświetla informacje o indeksach w wybranej tabeli. • Stwórz kopie tabeli Osoba: -- (2) Tworzymy kopie tabeli Osoba IF EXISTS ( SELECT name FROM sysobjects WHERE name='Osoba_kopia') DROP TABLE Osoba_kopia GO SELECT Imie, Nazwisko, Nr_Indeksu INTO Osoba_kopia FROM Osoba GO • Uruchom zapytanie do tabeli Osoba_kopia: -- (3) Wyswietl zawartość tabeli Osoba_kopia SELECT * FROM Osoba_kopia Osoba GO • Podkreśl w edytorze słowo Osoba (nazwa twojej tabeli) i wciśnij CTRL+F1 lub wykonaj poniższy fragment skryptu. Powinieneś zobaczyć informację pokazaną na rys. 13. -- (4) zobaczmy indeksy w tabeli EXEC sp_helpindex Osoba_kopia GO Strona 16/20 Włodzimierz Dąbrowski, Przemysław emysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Rys. 13 Informacja macja o indeksach w tabeli Osoba Zastanów się, dlaczego w wyniku wywołania procedury składowanej odpowiedzialnej za wyświetlanie informacji o indeksach pojawia się wpis z indeksem PK_Osoba,, skoro żaden indeks nie został założony? • Włącz pomiar statystyk wejścia/wyjścia ilości skanowanych stron wykonując poniższe polecenie: -- (5) Wlacz statystyki wejscia/wyjscia ilosci skanowanych stron SET statistic io on GO • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (6) wykonajmy proste wyszukiwanie po Nr_Indeksu -- oraz po nazwisku SELECT * FROM Osoba WHERE Nr_Indeksu > 1000 AND Nazwisko = 'K%' GO 5. Utwórz indeks • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (7) utworzmy indeks niegrupowany CREATE INDEX index_Osoba ON Osoba(Nazwisko, Nr_Indeksu) GO • Ponownie podkreśl w edytorze słowo Osoba (nazwa twojej tabeli) i wciśnij CTRL+F1.. Powinieneś zobaczyć informację pokazaną na rys. 14. Rys. 14 Informacja o indeksach w tabeli Osoba 6. Przetestuj indeks • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (6) wykonajmy proste wyszukiwanie po Nr_Indeksu -- oraz po nazwisku SELECT * FROM Osoba WHERE Nr_Indeksu > 1000 AND Nazwisko = 'K%' GO Zauważ, iż wynik będzie oczywiście taki sam, ale pojawi się różnica w statystykach. Strona 17/20 Włodzimierz Dąbrowski, Przemysław emysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Problem 2 (czas realizacji 15 min) Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma planuje rozszerzenie na skalę uczelnianą systemu prac dyplomowych, dyplomowych którym zarządzała dotąd na Twoim wydziale.. Zadanie jakie przed Tobą Tob stoi to stworzeniee transakcji dla rozwijanej bazy danych. Zadanie Tok postępowania 1. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Manageme Studio. • W oknie logowania kliknij Connect. 2. Przygotuj tabelę • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\Lab08\Transakcje.sql i kliknij Open. Open • Zaznacz kod, który wyświetla fragment tabeli, oznaczony w komentarzu (1) i (2). -- (1) Ustaw sie na bazie danych PraceDyplomowe USE PraceDyplomowe GO -- (2) Wyswietlamy dwa pierwsze rekordy z tabeli Osoba SELECT * FROM Osoba WHERE ID_Osoby IN (1,2) • Zaznacz kod, który próbuje wykonać transakcje: transakcje -- (3) Przykladowa transakcja BEGIN TRANSACTION BEGIN TRY UPDATE Osoba SET Nazwisko = 'Kochan' WHERE ID_Osoby = 2 UPDATE Osoba SET Nazwisko = 'Kowalski' WHERE ID_Osoby = 6 END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() as ErrorState, ERROR_PROCEDURE() as ErrorProcedure, ERROR_LINE() as ErrorLine, ERROR_MESSAGE() as ErrorMessage IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION END CATCH IF @@TRANCOUNT > 0 COMMIT TRANSACTION GO Strona 18/20 Włodzimierz Dąbrowski, Przemysław emysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Powyższy kod podejmuje próbę wykonania konania transakcji złożonej z dwóch operacji UPDATE.. Próba wykonania pierwszej z nich spowoduje błąd, ponieważ wartości w kolumnie ID_Osoby w tabeli Osoby muszą być unikalne, a polecenie próbuje wstawić duplikat wartości 2, która już istnieje w rekordzie drugim rugim tabeli. Przechwytywanie błędów odbywa się przy użyciu bloków TRY...CATCH,, które poznałeś w module 9. Zastanów się, jak powinieneś zmodyfikować powyższą transakcję, żeby zakończyła się powodzeniem? Strona 19/20 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 7 Indeksy i transakcje Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma zarządzająca bazą AdventureWorks planuje rozszerzenie i modernizację systemu w celu spełnienia pewnych standardów. W związku z modernizacją systemu bazodanowego, a zatem zmianą struktury fizycznej bazy danych, najprawdopodobniej będzie musiała nastąpić przebudowa struktury indeksów. Poza przebudową indeksów będzie musiała zapewne nastąpić modernizacja istniejących transakcji tak, żeby odpowiadały one nowej strukturze fizycznej przebudowanej bazy danych. Zadania jakie przed Tobą stoją to: 1. Podjęcie decyzji, które obiekty w bazie danych pozostaną bez zmian, a które zostaną zmodyfikowane lub usunięte. 2. Podjęcie decyzji, na które pola opłaca się nałożyć indeks i jakiego typu te indeksy powinny być. 3. Podjęcie decyzji, które transakcje należy zmodernizować i czy nie trzeba będzie dodać nowych transakcji. Strona 20/20 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 8 Wersja 1.0 Programowanie zaawansowane w T-SQL Spis treści Programowanie zaawansowane w T-SQL ........................................................................................... 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 6 Porady praktyczne ....................................................................................................................... 6 Uwagi dla studenta ...................................................................................................................... 7 Dodatkowe źródła informacji....................................................................................................... 7 Laboratorium podstawowe .................................................................................................................. 8 Problem 1 (czas realizacji 30 minut) ............................................................................................ 8 Problem 2 (czas realizacji 15 minut) .......................................................................................... 10 Laboratorium rozszerzone ................................................................................................................. 12 Zadanie 1 (czas realizacji 90 min)............................................................................................... 12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL Informacje o module Opis modułu Programowanie w języku zapytań to ważna umiejętność. Powinni ją opanować zarówno programiści, jak i administratorzy. Różne dialekty języka SQL oferują różne składnie, jednak reguły, jakimi powinien kierować się tworzący kod, są te same niezależnie od systemu zarządzania bazami danych. W module tym znajdziesz informację na temat zaawansowanego programowania w T-SQL. Dowiesz się w jaki sposób korzystać z instrukcji sterujących, kursorów oraz jak funkcjonuje obsługa błędów. Cel modułu Celem modułu jest zapoznanie czytelnika z zaawansowanymi elementami języka T-SQL, takimi jak instrukcje sterujące, kursory, obsługa błędów itp. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • potrafił użyć instrukcji sterujących w języku T-SQL • rozumiał sposób działania i funkcjonowania kursorów • wiedział, w jaki sposób działa obsługa błędów Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • potrafić stworzyć bazę danych wraz z jej podstawowymi obiektami (patrz: moduł 3) • potrafić napisać podstawowe instrukcje w języku T-SQL DCL i T-SQL DDL (patrz: moduł 5) • potrafić pisać zapytania w języku T-SQL DML (patrz: moduł 6) • rozumieć podstawową składnię języka T-SQL Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na rys. 1, przed przystąpieniem do realizacji tego modułu należy zapoznać się z materiałem zawartym w modułach 3, 5 i 6. Rys. 1 Mapa zależności modułu Strona 2/12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL Przygotowanie teoretyczne Przykładowy problem Podczas wytwarzania bazy danych wiąże ze sobą grupę osób, do której należą projektant bazy danych, administrator systemu zarządzania bazą danych, administrator bazy danych oraz programista bazy danych. Bardzo ważne jest, żeby wszyscy biorący udział w wytwarzaniu systemu bazodanowego współdziałali ze sobą na różnych etapach. Najwięcej wspólnego z programowaniem w T-SQL ma programista bazy danych. Od niego w dużej mierze zależy, czy wytworzone funkcje, procedury składowane, wyzwalacze i inne elementy będą działały we właściwy sposób. To on jest odpowiedzialny za przygotowanie odpowiednich elementów programowych, które następnie będzie wykorzystywał projektant aplikacji i programista aplikacji dostępowej. Również od niego w pewnym stopniu zależy bezpieczeństwo danych gromadzonych w bazie. W związku z tym powinien on dysponować odpowiednią wiedzą i posiadać pewne umiejętności z zakresu zaawansowanego programowania w języku T-SQL. Znajomość tego języka oraz dobre nawyki wynikające z praktyki programowania są bardzo ważne. Podstawowymi składowymi języka T-SQL są instrukcje sterujące, kursory i obsługa błędów. Podstawy teoretyczne Język T-SQL stale ewoluuje. Z języka zapytań stał się właściwie językiem programowania baz danych. Programiści tworzący oprogramowanie mogą łatwo nauczyć się T-SQL dzięki istniejącym analogiom do tradycyjnych języków programowania proceduralnego. Jednymi z częściej używanych konstrukcji są instrukcje sterujące. Instrukcje sterujące Instrukcja sterująca IF…ELSE daje możliwość warunkowego wykonywania bloków kodu. W implementacji T-SQL wygląda ona jak poniżej: IF warunek_logiczny { wyrazenie_sql | wyrazenie_blokowe } ELSE { wyrazenie_sql | wyrazenie_blokowe } Należy zwrócić uwagę, że jeśli blok po słowie IF lub ELSE składa się z wielu linii kodu, musisz użyć składni BEGIN…END. Wówczas: IF warunek_logiczny BEGIN { wyrazenie_sql | wyrazenie_blokowe } END ELSE BEGIN { wyrazenie_sql | wyrazenie_blokowe } END Poniższy kod przedstawia przykładowe użycie instrukcji sterującej IF…ELSE: IF @zmienna > 100 PRINT 'Zmienna jest większa niż 100' ELSE BEGIN PRINT 'Zmienna jest mniejsza niż 100' SET @zmienna = 0 -- zerowanie zmiennej END Kolejna instrukcja sterująca to pętla WHILE. W T-SQL wygląda ona następująco: WHILE wyrazenie_logiczne { wyrazenie_sql | wyrazenie_blokowe } Strona 3/12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL [ BREAK ] { wyrazenie_sql | wyrazenie_blokowe } [ CONTINUE ] { wyrazenie_sql | wyrazenie_blokowe } Wyrażenie logiczne powinno zwracać wartość TRUE lub FALSE. Podobnie jak w przypadku instrukcji sterującej IF…ELSE, jeśli wyrażenie SQL składa się z wielu linii kodu, musisz użyć właśnie składni BEGIN…END. W instrukcji WHILE występują dwie istotne instrukcje: • BREAK – powoduje wyjście z pętli WHILE • CONTINUE – powoduje rozpoczęcie kolejnej interacji pętli WHILE Poniższy kod przedstawia przykładowe użycie instrukcji sterującej WHILE: DECLARE @zmienna int SET @zmienna = 0 WHILE @zmienna < 10 BEGIN PRINT 'Iteracja nr ' + CAST(@zmienna AS varchar(2)) SET @zmienna = @zmienna + 1 END Należy pamiętać, że pętla WHILE może być wykonywana w nieskończoność, jeśli programista nie zapewni wyjścia z pętli. Kursory Kursor to obiekt, który umożliwia poruszanie się po wynikach zapytania rekord po rekordzie. Umożliwia on przetwarzanie rekordów jeden po drugim, co daje możliwość zaawansowanego formatowania wyników wyszukiwania danych (ale w ściśle określonej kolejności, determinowanej przez wynik zapytania użytego w definicji kursora). Deklaracja kursora w języku T-SQL wygląda następująco: DECLARE nazwa_kursora CURSOR [ { LOCAL | GLOBAL } ] [ { FORWARD_ONLY | SCROLL } ] [ { STATIC | KEYSET | DYNAMIC | FAST_FORWARD } ] [ { READ_ONLY | SCROLL_LOCKS | OPTIMISTIC } ] [ TYPE_WARNING ] FOR wyrazenie_select [ FOR UPDATE [ OF nazwa_kolumny [,…n] ] ] [;] Poniższy kod przedstawia przykładowe użycie kursora: DECLARE Employee_Cursor CURSOR FOR SELECT LastName, FirstName FROM Northwind.dbo.Employees WHERE LastName like 'B%' OPEN Employee_Cursor FETCH NEXT FROM Employee_Cursor WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM Employee_Cursor END CLOSE Employee_Cursor DEALLOCATE Employee_Cursor Strona 4/12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL Składnia specjalna Nowoczesne dialekty języka SQL obfitują w specjalne elementy składniowe, które znacznie rozszerzają jego funkcjonalność. Przykładem takiej składni może być PIVOT. Składnia ta umożliwia stworzenie tabeli wynikowej z zapytania SELECT, w której w nagłówkach wierszy i kolumn znajdują się wartości z tabel źródłowych. USE AdventureWorks GO SELECT VendorID, [164] AS Emp1, [198] AS Emp2, [223] AS Emp3, [231] AS Emp4, [233] AS Emp5 FROM (SELECT PurchaseOrderID, EmployeeID, VendorID FROM Purchasing.PurchaseOrderHeader) p PIVOT ( COUNT (PurchaseOrderID) FOR EmployeeID IN ( [164], [198], [223], [231], [233] ) ) AS pvt ORDER BY VendorID; Zapytanie zamieszczony powyżej może przykładowo wygenerować następujący wynik: VendorID 1 2 3 4 5 Emp1 4 4 4 4 5 Emp2 3 1 3 2 1 Emp3 5 5 5 5 5 Emp4 4 5 4 5 5 Emp5 4 5 4 4 5 Powyższy wynik obrazuje możliwości tej składni, umożliwiając zbudowanie tabeli wyświetlającej ilość zamówień u wybranych producentów, dokonanych przez pięciu pracowników (każdy pracownik o określonym EmployeeID). Obsługa błędów W trakcie wykonywania kodu SQL mogą wystąpić nieprzewidziane błędy, wynikające z różnych przyczyn. Mogą to być błędy powstałe wskutek narzuconych w bazie danych ograniczeń lub na przykład błędy spowodowane próbami wykonania niedozwolonych operacji. Wykrycie tych błędów i odpowiednia reakcja na nie to zadanie dla programisty baz danych. Błędy wykrywamy najczęściej w: • transakcjach – po wykryciu błędu wycofujemy transakcję • procedurach składowanych – wykrywamy błędy powstałe głównie w wyniku niepoprawnych wartości parametrów podanych przez użytkownika • wyzwalaczach – podobnie jak w transakcjach, po napotkaniu błędu wycofywana jest transakcja wywołująca wyzwalacz • blokach kodu SQL – wszelkie rozbudowane bloki kodu wymagają wykrywania błędów Metod pozwalających na wykrycie błędów jest wiele. Można zastosować instrukcje sterujące, np. IF…ELSE, do sprawdzania wartości zmiennych, by w ten sposób zapobiegać wystąpieniu błędów. Drugą metodą jest wykorzystanie istniejących w systemie zarządzania bazami danych funkcji pozwających wykrywać błędy. W systemie Microsoft SQL Server taką funkcją jest @@ERROR, która zwraca numer ostatnio napotkanego błędu w bieżącej sesji. Aktualnie istnieją także inne, przez wielu uznawane za lepsze metody wykrywania i obsługi błędów. Chodzi o strukturalną obsługę wyjątków. Przez wyjątek rozumiemy błąd, który wymaga obsługi. Poniżej pokazano składnię TRY…CATCH (ang. try – próbuj, catch – przechwyć): Strona 5/12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL BEGIN TRY { wyrazenie_sql | wyrazenie_blokowe } END TRY BEGIN CATCH { wyrazenie_sql | wyrazenie_blokowe } END CATCH Jeśli wyrażenie SQL składa się z wielu linii kodu, podobnie jak w przypadku instrukcji sterujących IF…ELSE i WHILE musisz użyć składni BEGIN…END. Przykładowe rozwiązanie Przykładowe użycie instrukcji sterującej Rozważmy przykład, w którym średnia cena produktu jest mniejsza od 100 zł. Jeżeli maksymalna cena jest większa od 300 zł, wówczas w pętli WHILE podwajamy ją. Pętla ta wykonuje się do momentu, gdy maksymalna cena jest większa od 300 zł. Po spełnieniu warunku wychodzimy z pętli i wyświetlamy komunikat dla użytkownika. USE AdventureWorks; GO WHILE (SELECT AVG(ListPrice) FROM Production.Product) < 100 BEGIN UPDATE Production.Product SET ListPrice = ListPrice * 2 SELECT MAX(ListPrice) FROM Production.Product IF (SELECT MAX(ListPrice) FROM Production.Product) > 300 BREAK END PRINT 'Wyświetlony komunikat po wyjściu z pętli'; Przykładowe użycie TRY…CATCH Poniższy fragment kodu obrazuje przykładową obsługę wyjątków przy pomocy składni TRY…CATCH. W celu zilustrowania obsługi błędów, wewnątrz bloku TRY dokonujemy dzielenia przez zero, które jest niewykonalne. Wówczas wywoływany jest wyjątek, który jest przechwytywany w bloku CATCH. Po przechwyceniu wyjątku wyświetlany jest odpowiedni komunikat zdefiniowany przez programistę. BEGIN TRY -- generujemy błąd SELECT 1/0; END TRY BEGIN CATCH -- obsługujemy błąd RAISERROR('Nie dzielimy przez zero',16,1) END CATCH Porady praktyczne • Funkcja wykrywania błędów @@ERROR zwraca numer ostatniego błędu lub 0, jeśli wykonanie polecenia T-SQL zakończyło się powodzeniem. Na poniższym przykładzie pokazano użycie funkcji @@ERROR do sprawdzenia naruszenia ograniczenia, do którego może dojść w sytuacji modyfikacji danych: UPDATE EmployeePayHistory SET PayFrequency = 4 WHERE EmployeeID = 1 IF @@ERROR = 547 Strona 6/12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL PRINT 'naruszone ograniczenie.' GO • Informacje na temat błędu mogą być uzyskiwane przy użyciu funkcji ERROR_NUMBER (numer błędu) i ERROR_MESSAGE (komunikat błędu). • SQL Server udostępnia trzy rodzaje programowalnych obiektów: funkcje, procedury składowane i wyzwalacze. W celu poprawnego pisania elementów programowalnych należy znać zaawansowane elementy języka T-SQL. Zamiast wykonywania pojedynczego polecenia lub komendy, obiekty te umożliwiają tworzenie bogatej logiki programistycznej, która zawiera pętle, kontrolę przepływu, podejmowanie decyzji i rozwidlenia. • Zdolność do uruchamiania transakcji i przeznaczenie ich do pozostawienia lub wycofania nie wystarczy do efektywnego radzenia sobie z problemem. W tym przypadku niezbędnym składnikiem jest zdolność do programowanego wykrywania i obsłużenia błędów. • Wewnątrz bloku CATCH możemy ustalić co spowodowało błąd i przekazać informacje na jego temat używając systemu obsługi błędów języka T-SQL. Najczęściej używanymi funkcjami tego rodzaju są ERROR_NUMBER i ERROR_MESSAGE. Zwracają one numer i opis błędu. • Używając funkcji ERROR_NUMBER i ERROR_MESSAGE w bloku instrukcji CATCH możemy zdecydować, czy potrzeba użyć ROLLBACK do cofnięcia transakcji. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • • • • rozumiesz, co oznacza instrukcja sterująca rozumiesz zasadę działania kursorów umiesz zdefiniować prostą pętlę umiesz podać przykład obsługi błędów Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Kalen Delaney, Microsoft SQL Server 2005: Rozwiązania praktyczne krok po kroku, Microsoft Press, 2006 W książce autor w przystępny i zrozumiały sposób przedstawia podstawowe mechanizmy zaawansowanego programowania w języku T-SQL. Książka polecana szczególnie dla osób początkujących. 2. Edward Whalen, Microsoft SQL Server 2005 Administrator’s Companion, Microsoft Press, 2006 W książce autor pokazał zaawansowane mechanizmy programowania w języku T-SQL, które mogą zostać wykorzystane do programowania w bazach danych takich obiektów jak funkcje, procedury składowane, wyzwalacze i transakcje. Pozycja szczególnie polecana dla osób chcących poszerzyć swoją wiedzę na temat programowania baz danych. 3. Deren Bieniek, Randy Dyess, Mike Hotek, Javier Loria, Adam Machanic, Antonio Soto, Adolfo Wiernik, SQL Server 2005. Implementacja i obsługa, APN Promise, 2006 W książce tej, podobnie jak w powyższej pozycji, przedstawiono elementy zaawansowanego programowania w języku T-SQL. Pokazano praktyczne zastosowanie zaawansowanych mechanizmów T-SQL. Książka polecana dla osób początkujących, jak również chcących poszerzyć swoją wiedzę. Strona 7/12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL T Laboratorium podstawowe Problem 1 (czas realizacji 30 minut) Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma planuje rozszerzenie na skalę uczelnianą uczelnian systemu prac dyplomowych, dyplomowych którym zarządzała dotąd na Twoim woim wydziale. Zadanie jakie przed Tobą Tob stoi to stworzenie zaawansowanego mechanizmu wybierania danych z twojej bazy danych oraz przedstawienie tych danych w odpowiedniej formie. Zadanie Tok postępowania 1. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. Studio • W oknie logowania kliknij Connect. 2. Przetestuj instrukcję sterującą CASE • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\Labs\Lab06\Case.sql. • Zaznacz i uruchom kod ze skryptu Case.sql.. Wynik działania pokazano na rys. 2. USE PraceDyplomowe GO SELECT C.Nazwisko, C.Imie, CASE WHEN E.ID_Ocena = '2' THEN 'trzy' ELSE 'inna' END AS Gender FROM Ocena E INNER JOIN Osoba C ON E.ID_Ocena = C.ID_Osoby GO Strona 8/12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL Rys. 2 Wynik działania skryptu z użyciem instrukcji CASE 3. Zastosuj stronicowanie danych • Z menu głównego wybierz File -> Open -> File. • Odszukaj pliku C:\Labs\Lab06\Stronicowanie.sql • Zaznacz i uruchom kod ze skryptu Stronicowanie.sql. Wynik działania pokazano na rys. 3. USE PraceDyplomowe GO SELECT T.Nazwisko FROM ( SELECT Nazwisko, ROW_NUMBER() OVER(ORDER BY ID_Stopnian) AS Pozytywna FROM Osoba ) AS T WHERE T.Pozytywna BETWEEN 2 AND 6 GO Strona 9/12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL T Rys. 3 Wynik stronicowania danych Powyższe zapytanie stanowi rozwiązanie problemu stronicowania danych. W tym wypadku wynikiem jest lista osób z tabeli Osoby, przy czym wyświetlone zostają nazwiska osób, które z pracy otrzymały ocenę pomiędzy 3 a 5, biorąc pod uwagę sortowanie według kolumny kolum ID_Stopnian. Zapytanie zadziała tak samo, nawet gdy numeracja w tej kolumnie nie będzie ciągła. Wykorzystuje ono podzapytanie, w którym dla każdego wiersza generowana jest liczba porządkowa za pomocą funkcji ROW_NUMBER (funkcja ta musi przed generowaniem generowanie wartości określić kryterium sortowania, stąd klauzula ORDER BY). BY Problem 2 (czas realizacji 15 minut) Kolejne zadanie związane z rozbudową systemu prac dyplomowych jakie przed Tobą stoi to oprogramowanie obsługi błędów (przechwytywanie i obsługa) z użyciem użyc zaawansowanych mechanizmów, jakimi dysponuje SQL Server. Zadanie Tok postępowania 1. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Manageme Studio. • W oknie logowania kliknij Connect. 2. Utwórz tabelę archiwizacji błędów • Z menu głównego wybierz File -> Open -> File. • Odszukaj pliku C:\Labs\Lab09\Errors.sql • Zaznacz i uruchom kod ze skryptu Errors.sql,, który tworzy tabele, w której będą zapisywane informacje o błędach Strona 10/12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL T -- (1) Ustawiamy się na baze danych PraceDyplomowe USE PraceDyplomowe GO -- (2) ) Tworzymy tabele w ktorej bedzie przechowywana informacja o -- bledach CREATE TABLE TabelaBledow ( ErrorID int IDENTITY(1,1) PRIMARY KEY, ErrorNumber int NOT NULL, ErrorMessage nvarchar(200) NOT NULL, ErrorDate datetime DEFAULT GETDATE() ) GO Powyższy kod tworzy tabelę TabelaBledow,, która będzie zawierała informacje o występujących błędach. W kolumnie ErrorNumber zapisany zostanie numer błędu, w kolumnie ErrorMessage – komunikat błędu, zaś w kolumnie ErrorDate – data i godzina wystąpienia błędu (wartość domyślna – bieżąca data i czas – jest generowana przy pomocy funkcji systemowej GETDATE). GETDATE 3. Przechwytywa nie błędów • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (3) Implementacja obslugi przechwytywania bledow BEGIN TRY SELECT 1/0 END TRY BEGIN CATCH INSERT TabelaBledow(ErrorNumber, ErrorMessage) SELECT ERROR_NUMBER(), ERROR_MESSAGE() END CATCH GO 4. Przeglądanie informacji o wystąpieniu błędu • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (4) Wyswietlenie zawartosci tabeli bledow SELECT * FROM TabelaBledow GO Wynik działania pokazano na rys. 4. Rys. 4 Informacja o błędzie Strona 11/12 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 8 Programowanie zaawansowane w T-SQL Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma zarządzająca bazą AdventureWorks planuje rozszerzenie i modernizacje systemu w celu spełnienia pewnych standardów. W związku z modernizacją systemu bazodanowego najprawdopodobniej ulegną zmianie pewne metody wybierania danych. Wydaje się zasadne stworzenie bardziej wyrafinowanych metod wybierania danych w oparciu o zaawansowane konstrukcje języka T-SQL. Prawdopodobnie również w związku z wejściem na wyższy poziom programowania w T-SQL będziesz musiał wprowadzić strukturalną obsługę błędów. Zadanie jakie przed Toba stoi to: 1. Podjęcie decyzji, które zapytania w bazie danych pozostaną bez zmian, które zostaną zmodyfikowane i zastąpione czymś bardziej złożonym wykorzystując zaawansowane możliwości języka T-SQL, a które będą musiały zostać całkowicie usunięte. 2. Zaplanowanie struktury obsługi błędów dla zapytań istniejących w systemie bazodanowym. Strona 12/12 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 9 Wersja 1.0 Procedury składowane i wyzwalacze Spis treści Procedury składowane i wyzwalacze ................................................................................................... 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 8 Porady praktyczne ..................................................................................................................... 13 Uwagi dla studenta .................................................................................................................... 14 Dodatkowe źródła informacji..................................................................................................... 14 Laboratorium podstawowe ................................................................................................................ 16 Problem 1 (czas realizacji 10 min).............................................................................................. 16 Problem 2 (czas realizacji 10 min).............................................................................................. 17 Problem 3 (czas realizacji 15 min).............................................................................................. 18 Problem 4 (czas realizacji 10 min).............................................................................................. 19 Laboratorium rozszerzone ................................................................................................................. 21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Informacje o module Opis modułu W tym module znajdziesz informacje na temat sposobu działania oraz podstaw tworzenia procedur składowanych. Dowiesz się, na czym polega różnica pomiędzy zwykłym zapytaniem T-SQL a procedurą składowaną oraz co to jest kompilacja i rekompilacja procedury. Poznasz również specjalny rodzaj procedury składowanej – wyzwalacz. Cel modułu Celem modułu jest zapoznanie czytelnika z procedurami składowanymi oraz wyzwalaczami w środowisku bazodanowym Microsoft SQL Server 2008 oraz zaprezentowanie, jak wykorzystać je w przykładowym projekcie. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • • • • • wiedział, jak napisać własną procedurę składowaną umiał rozbudowywać gotowe procedury składowane umiał tworzyć proste wyzwalacze umiał zarządzać wyzwalaczami umiał wykorzystywać wyzwalacze do optymalizacji i automatyzacji działania SQL Server 2008 Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • potrafić samodzielnie stworzyć bazę danych wraz z jej obiektami (patrz: moduł 4) • znać podstawową składnię języka T-SQL • umieć napisać własne zapytania w języku T-SQL (patrz: moduły 5 i 6) • znać zaawansowane mechanizmy języka T-SQL (patrz: moduł 8) • wiedzieć, na czym polega bezpieczeństwo w bazach danych (patrz: moduł 10) Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na rys. 1, przed przystąpieniem do realizacji tego modułu należy zapoznać się z materiałem zawartym w modułach 3, 5, 6, 8 i 10. Rys. 1 Mapa zależności modułu Strona 2/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Przygotowanie teoretyczne Przykładowy problem Podczas wytwarzania bazy danych wiąże ze sobą grupę osób, do której należą projektant bazy danych, administrator systemu zarządzania bazą danych, administrator bazy danych oraz programista bazy danych. Bardzo ważne jest, żeby wszyscy biorący udział w wytwarzaniu systemu bazodanowego współdziałali ze sobą na różnych etapach. Najwięcej wspólnego z programowaniem w T-SQL ma programista bazy danych. Od niego w dużej mierze zależy, czy wytworzone funkcje, procedury składowane, wyzwalacze i inne element będą działały we właściwy sposób. To on jest odpowiedzialny za przygotowanie odpowiednich elementów programowych, które następnie będzie wykorzystywał projektant aplikacji i programista aplikacji dostępowej. Kolejnym zadaniem jakie stoi przed programistą i administratorem bazy danych jest stworzenie odpowiedniej liczby wyzwalaczy, które są pewnym rodzajem procedur składowanych, z tymże wywoływanych niejawnie. Należy pamiętać, iż użycie procedur składowanych prowadzi do powstania kolejnej warstwy separującej użytkownika końcowego od fizycznych danych, tym samym powodując maskowanie fizycznej struktury bazy. Z tego powodu bardzo ważne jest przemyślane i odpowiednie przygotowanie zbioru procedur składowanych. Podstawy teoretyczne Procedury składowane Procedura składowana (ang. stored procedure) jest nazwanym zbiorem poleceń w języku SQL, który jest przechowywany na serwerze baz danych i jest kompilowany przy pierwszym wykonaniu. Procedury wnoszą do środowiska bazodanowego przetwarzanie warunkowe i możliwości programistyczne. W systemie zarządzania bazami danych wykonanie dowolnego fragmentu kodu języka SQL wiąże się z pewnym ciągiem czynności – począwszy od sprawdzenia składni, aż po kompilację i wykonanie. Proces wykonywania zapytania przez SQL Server Proces wykonania pojedynczego zapytania w języku T-SQL w Microsoft SQL Server 2008 dzieli się na następujące etapy: 1. Sprawdzenie i rozdzielenie kodu na fragmenty - dokonywany jest podział kodu na fragmenty nazywane symbolami. Proces ten nazywamy często nazywany jest analizą leksykalną. 2. Sprawdzenie kodu pod względem poprawności semantycznej i syntaktycznej – dokonywana jest kontrola poprawności semantycznej, czyli sprawdzenie, czy kod nie odwołuje się do nieistniejących obiektów lub nie używa nieistniejących poleceń oraz kontrola poprawności syntaktycznej, podczas której sprawdzana jest poprawność użytej składni. 3. Standaryzacja wyodrębnionej części kodu – silnik wykonywania zapytań zapisuje kod w jednoznacznej postaci (np. usuwa niepotrzebne symbole). 4. Optymalizacja – Microsoft SQL Server posiada wewnętrzny proces zwany Optymalizatorem Zapytań, który wybiera optymalny sposób dostępu do danych, tzn. taki plan wykonania zapytania (ang. execution plan), w którym serwer będzie skanował (przeszukiwał) najmniejszą ilość stron danych (o fizycznej strukturze danych w Microsoft SQL Server możesz przeczytać w module 6). Na optymalizację szczególny wpływ ma struktura indeksów oraz sposób łączenia tabel. 5. Kompilacja i wykonanie – zapytanie jest kompilowane według optymalnego planu wykonania i w takiej postaci wykonywane. 6. Zwrócenie wyników – wyniki zapytania zwracane są do klienta. Strona 3/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Proces wykonywania procedury składowanej Wykonywanie procedur składowanych odbywa się inaczej niż wykonywanie pojedynczego pojedyncz zapytania SQL. Utworzeniee i pierwsze wykonanie procedury w Microsoft icrosoft SQL Server można podzielić na następujące kroki: krok 1. Utworzenie definicji procedury składowanej – wykonywane ywane jest polecenie CREATE PROCEDURE. 2. Sprawdzanie kodu procedury pod względem poprawności – dokonywana jest kontrola poprawności syntaktycznej kodu procedury. procedury 3. Zapamiętanie procedury w bazie danych – nazwa procedury i jej kod (tzw. ciało procedury) są zapisywane do odpowiednich widoków systemowych bazy danych (sysobjects ( oraz syscomments). łanie procedury – procedura składowanaa jest wywoływana z odpowiednimi 4. Wywołanie parametrami poleceniem EXEC. 5. Właściwe wykonanie procedury – optymalizacja planu wykonania i kompilacja. 6. Buforowanie planu wykonania – skompilowany kompilowany optymalny plan wykonania jest zapisywany zapisywan w tzw. buforze procedur, procedur skąd jest wczytywany przy następnym wywołaniu procedury. Na rys. 2 pokazano schemat tworzenia i wykonania procedury składowanej w środowisku SQL Server 2008. Rys. 2 Tworzenie i wykonanie procedury składowanej w SQL Server 2008 Rekompilacja procedur składowanych Czasami zachodzi potrzeba ponownej kompilacji procedury składowanej. Dzieje się tak, gdy wydajność skompilowanej procedury gwałtownie spada (może tak być z wielu powodów, np. zmiany struktury indeksów lub zapisania dużej ilości rekordów), gdy istnieje potrzeba potr kompilacji procedury przy każdym jej wykonaniu (powody mogą być te same, co w pierwszej sytuacji) lub gdy zmianie ulega kod samej procedury (gdy użyjemy polecenia ALTER PROCEDURE). PROCEDURE Rekompilacji, czyli ponownej kompilacji procedury, można dokonać na dwa dwa sposoby: • dodając w definicji procedury klauzulę WITH RECOMPILE. • używając żywając specjalnej systemowej procedury rekompilującej (w Microsoft SQL Server jest to procedura sp_recompile). sp_recompile Strona 4/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Tworzenie procedur składowanych Do tworzenia procedur składowanych używamy polecenia języka SQL CREATE PROCEDURE (lub w skrócie CREATE PROC): CREATE { PROC | PROCEDURE } [nazwa_schematu.]nazwa_procedury [ @parametr typ_danych[,…n] ] [ WITH <opcje_procedury> [,…n] ] [ FOR REPLICATION ] AS cialo_procedury <opcja_procedury> ::= [ ENCRYPTION ] [ RECOMPILE ] [ EXECUTE_AS_Clause ] W definicji procedury składowanej określamy: • • • • • nazwę procedury nazwy typy danych kierunek działania parametrów procedury ciało procedury (kod wykonywany przez procedurę) Opcjonalnie możemy również zadeklarować, czy procedura ma być przy każdym wykonaniu rekompilowana. Poniżej podano przykład utworzenia prostej procedury składowanej nie zawierającej żadnych parametrów: CREATE PROCEDURE p_pracownicy AS SELECT imie, nazwisko FROM Osoby Wywołanie procedury składowanej Do wywołania procedury składowanej służy polecenie EXECUTE (lub w skrócie EXEC): [ { EXEC | EXECUTE } ] [ @return_status = ] { module_name [ ;numer ] | @module_name_var } [ [ @parametr = ] { wartość | @zmienna [ OUTPUT ] | [ DEFAULT ] } ] [,…n] [ WITH RECOMPILE ] Przykładowo dla utworzonej wcześniej procedury składowanej p_pracownicy wywołanie będzie wyglądało w następujący sposób: EXEC p_pracownicy GO Parametry procedur składowanych Procedury składowane mogą przyjmować parametry wywołania. Ilość i typ danych, które należy podać przy wywołaniu procedury składowanej, określamy w trakcie tworzenia procedury (używając polecenia CREATE PROCEDURE). W zależności od tego, czy parametry będą potrzebne do Strona 5/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze wykonania procedury, czy też mają być one przez procedurę zwrócone, wyróżniamy dwa rodzaje parametrów: wejściowe (INPUT) oraz wyjściowe (OUTPUT). Możliwe jest też zdefiniowanie w procedurze parametru przejściowego (będącego jednocześnie wejściowym i wyjściowym), czyli parametru, którego wartość podajemy przy wywołaniu, a która może zostać zmieniona podczas działania procedury. CREATE PROCEDURE p_pracownicy @nazwisko varchar(40)='Smith' AS SELECT imie, nazwisko FROM Osoby WHERE nazwisko=@nazwisko GO Zalety i wady procedur składowanych Procedury składowane dzięki temu, że są zapisane na serwerze oraz dzięki skompilowanemu planowi wykonania przechowywanemu w buforze procedur posiadają dwie zasadnicze zalety: • zwiększają wydajność bazy danych • ograniczają ruch w sieci (przesyłane są tylko nazwy procedur i wartości parametrów) Ponadto procedury składowane mają kilka zalet z punktu widzenia programistów aplikacji bazodanowych: • Zapewniają jedną logikę biznesową dla wszystkich aplikacji klienckich. • Przesłaniają szczegóły tabel w bazie danych (przezroczystość struktury dla zwykłego użytkownika aplikacji). • Umożliwiają modyfikację danych bez bezpośredniego dostępu do tabel bazy danych. • Dostarczają mechanizmów bezpieczeństwa (można nadawać uprawnienia do wykonywania procedur poszczególnym użytkownikom bazy danych). • Umożliwiają programowania modularne (procedura zostaje zapisana w bazie danych, skąd można ją wielokrotnie wywoływać; procedurę może pisać osoba wyspecjalizowana w bazach danych – programista aplikacji jedynie ją wywoła). • Zapewniają szybsze wykonanie (jeśli wymagane jest wykonanie dużej liczby zapytań, procedury składowane są szybsze, ponieważ wykonują się na serwerze, są optymalizowane i umieszczane w pamięci przy pierwszym wykonaniu). • Zmniejszają ruch sieciowy (jeśli zachodzi potrzeba wykonania wielu zapytań w T-SQL na raz, można je zastąpić wywołaniem jednej procedury składowanej). Jeśli w ogóle można mówić o wadach procedur składowanych, to w zasadzie można wspomnieć o kilku aspektach: • Następstwem rekompilacji czasem jest zmniejszenie wydajności procedury (czyli administrator baz danych musi wiedzieć, kiedy przeprowadzić rekompilację). • W przypadku zagnieżdżania procedur składowanych należy pamiętać o tym, że zmienia się kontekst wykonania (procedura zagnieżdżana wykonuje się z uprawnieniami innej procedury). • Wreszcie, aby tworzyć dobre (tzn. poprawnie działające) procedury składowane niezbędne jest poznanie zaawansowanych mechanizmów języka programowania baz danych (np. TSQL), takich jak zmienne, funkcje i procedury systemowe czy obsługa błędów. Wyzwalacze Wyzwalacz (ang. trigger) jest specjalnym rodzajem procedury składowanej. W przeciwieństwie do zwykłej procedury składowanej wyzwalacz nie może zostać jawnie wywołany. Strona 6/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Wyzwalacz jest wywoływany w reakcji na określone akcje. Akcje te to wykonanie przez użytkownika określonego polecenia SQL (INSERT, UPDATE, DELETE) na danej tabeli, dla której został określony wyzwalacz. Tworzenie wyzwalaczy Wyzwalacze tworzymy używając polecenia CREATE TRIGGER. W definicji wyzwalacza określamy: • • • • • nazwę wyzwalacza dla jakiej tabeli tworzymy wyzwalacz na jakie akcje wyzwalacz będzie reagował jakiego typu wyzwalacz tworzymy ciało wyzwalacza (odpowiednik ciała procedury składowanej) – czyli kod wykonywany przez wyzwalacz W SQL Server 2008 istnieją trzy rodzaje wyzwalaczy: 1. Wyzwalacze obsługujące operacje DML (ang. Data Manipulation Language), czyli INSERT, UPDATE oraz DELETE wykonywane na tabeli lub widoku. CREATE TRIGGER [nazwa_schematu.]nazwa_wyzwalacza ON { table | view } [ WITH <dml_opcje_wyzwalacza> [,…n] ] { FOR | AFTER | INSTEAD OF } [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] [ WITH APPEND ] [ NOT FOR REPLICATION ] AS wyrazenie_sql [ ; ] [,…n] <dml_opcje_wyzwalacza> ::= [ ENCRYPTION ] [ EXECUTE AS Clause ] 2. Wyzwalacze obsługujące operacje DDL (ang. Data Definition Language), czyli CREATE, ALTER, DROP oraz pewne procedury składowane, które wykonują operacje DDL. CREATE TRIGGER nazwa_wyzwalacza ON { ALL SERVER | DATABASE } [ WITH <ddl_opcje_wyzwalacza> [,…n] ] { FOR | AFTER } { rodzaj_zdarzenia | event_group } [,…n] AS wyrazenie_sql [ ; ] [,…n] <ddl_opcje_wyzwalacza> ::= [ ENCRYPTION ] [ EXECUTE AS Clause ] 3. Wyzwalacze obsługujące zdarzenie logowania (LOGON), które jest wywoływane, kiedy ustalana jest sesja logującego się użytkownika. CREATE TRIGGER nazwa_wyzwalacza ON ALL SERVER [ WITH <opcje_wyzwalacza_logon> [,…n] ] { FOR | AFTER } LOGON AS wyrazenie_sql [ ; ] [,…n] <opcje_wyzwalacza_logon> ::= [ ENCRYPTION ] [ EXECUTE AS Clause ] Strona 7/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Zastosowanie wyzwalaczy Wyzwalacze znajdują wiele zastosowań w bazach danych. Przede wszystkim stosujemy wyzwalacze wszędzie tam, gdzie w inny sposób nie da się weryfikować integralności danych, a zwłaszcza ich zgodności z regułami logiki biznesowej. Na przykład chcemy, by w pewnej kolumnie tabeli wstawiane były tylko wartości unikalne, ale jednocześnie zezwalamy na wstawienie wartości NULL. Jedynym rozwiązaniem jest użycie wyzwalacza, który sprawdzi, czy wstawiana właśnie wartość już w danym polu wystąpiła, a jeżeli użytkownik wstawia wartość NULL, to wyzwalacz mu na to pozwoli (tego efektu nie można osiągnąć innymi metodami, np. używając indeksów, ustawiając właściwość unikalności kolumny lub używając kryteriów sprawdzających dane wstawiane w kolumnę). Drugie zastosowanie to wszelkiego typu automatyzacja zadań administracyjnych w bazie danych (wszelkiego rodzaju „przypominacze”, obsługa nietypowych działań czy chociażby wysyłanie wiadomości przez email lub pager). Wreszcie z uwagi na pewne cechy wyzwalacze pozwalają na określony typ przetwarzania transakcyjnego. Przykładowe rozwiązanie Tworzenie i uruchomienie procedury składowanej W cel utworzenia nowej procedury składowanej należy z paska narzędziowego wybrać New Query i wpisać kod procedury. Przykładowo: CREATE PROCEDURE dbo.getAllCustomers AS BEGIN SELECT [CustomerID], [CompanyName] FROM [Northwind].[dbo].[Customers] END Następnie należy wykonać skrypt wciskając F5 lub wybierając z paska narzędziowego Execute. Jeśli procedura składowana została utworzona poprawnie, powinieneś otrzymać komunikat „Command(s) completed successfully” oraz zauważyć, że została dodana nowa procedura składowana w obszarze Object Explorer, w gałęzi Databases -> Northwind -> Programmability -> StoredProcedures, co pokazano na rys. 3. Jeśli procedury nie widać w wyżej wymienionej gałęzi, należy ją odświeżyć. Jeśli procedura jest już utworzona, a mimo to zażądano kolejnego jej utworzenia, to otrzymamy następujący komunikat: „There is already an object named ‘getAllCustomers’ in the databases”. Strona 8/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Rys. 3 Tworzenie nowej procedury Aby uruchomić procedurę składowaną, wystarczy użyć polecenia EXECUTE (lub krócej EXEC). Można także kliknąć prawym klawiszem myszki procedurę i wybrać Execute Stored Procedure, co wywoła okienko, w którym można przekazać do procedury jakieś parametry. Na rys. 4 widać, że rozwijane menu udostępnia także inne opcje, takie jak modyfikacja lub usunięcie. Rys. 4 Wywołanie procedury Inne metody tworzenia procedur składowanych Inną metoda tworzenia procedury składowanej jest skorzystanie z gotowego schematu procedury. W tym celu kliknij prawym przyciskiem myszy na gałęzi Stored Procedures i wybierz New StoredProcedure – uzyskasz w ten sposób gotowy schemat procedury składowanej, co pokazano na rys. 5. Strona 9/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Rys. 5 Tworzenie nowej procedury według wzorca Procedury składowane a polisy W SQL Server 2008 wprowadzono politykę opartą o Management Framework dla silnika SQL, dzięki której zarządzanie serwerem będzie bardziej zautomatyzowane w oparciu o pewne reguły, a nie skrypty. Zadaniem DMF (z ang. Declarative Management Framework) jest umożliwienie administratorowi zarządzania serwerami za pomocą definiowanych przez administratora reguł. W SQL Server 2008 mamy gotowe szablony reguł oparte o najlepsze praktyki zaimplementowane w narzędziu Best Practices Analyzer, używanym przez administratorów z poprzednimi wersjami systemu SQL Server. Korzystając z mechanizmu polis możemy stworzyć restrykcje dla procedur składowanych o postaci: brak możliwości definiowania przez programistę bazy danych procedur składowanych z prefiksem „sp_”. Restrykcję tę wprowadzimy na bazie danych Biblioteka. W ramach Object Explorer rozwijamy zakładkę Management a następnie Policy Menagement. W pierwszym kroku należy dodać warunki, jakie będą dołączone do polisy. Jako pierwszy stwórzmy warunek, który będzie pilnował, żeby nazwa procedury składowanej nie posiadała prefiksu „sp_”. Konfigurację tego warunku pokazano na rys. 6. Strona 10/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Rys. 6 Stworzenie warunku na procedurę składowaną Następnie należy stworzyć warunek dotyczący bazy danych, na której polisa, którą za chwilę założymy, będzie działała. Zostało to zilustrowane na rys. 7. Rys. 7 Stworzenie warunku na bazę danych W kolejnym kroku należy wystawić polisę i dodać do niej wcześniej stworzone warunki. Konfiguracje wystawiania polisy pokazano na rys. 8. Strona 11/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Rys. 8 Założenie polisy Kiedy mamy już wystawiona polisę i chcemy ją przetestować, powinniśmy kliknąć prawym przyciskiem myszy bazę danych Biblioteka i wybrać New Query. Następnie w edytorze możemy wpisać następujący kod, służący do utworzenia pustej procedury składowanej: CREATE PROCEDURE sp_testowa AS GO Zauważmy, ze wystąpił błąd. Procedura nie została utworzona, gdyż zadziałała restrykcja DMF, co pokazano na rys. 9. Rys. 9 Błąd procedury i zadziałanie polisy Strona 12/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Tworzenie wyzwalacza Stwórzmy wyzwalacz, którego zadaniem będzie nie dopuścić do zalogowania wskazanego przez nas użytkownika. W tym celu na początku dodajemy użytkownika zbd_user i kojarzymy go z bazą danych AdventureWorks. Następnie tworzymy odpowiedni wyzwalacz, który nie pozwoli użytkownikowi zalogować się do Microsoft SQL Server Management Studio. W tym celu klikamy prawym przyciskiem myszy bazę AdventureWorks i z menu kontekstowego wybieramy New Query. W oknie edycji zapytania wpisujemy następujący kod: USE AdventureWorks GO CREATE TRIGGER trgRestrictUser ON ALL SERVER WITH EXECUTE AS 'sa' FOR LOGON AS BEGIN IF (ORIGINAL_LOGIN() = 'zbd_user' AND APP_NAME() = 'Microsoft SQL Server Management Studio') ROLLBACK; END Aby przetestować działanie utworzonego wyzwalacza, uruchamiamy drugą instancję SQL Server Management Studio. W oknie Connect to Server Authentication wybieramy SQL Server Authentication, w polu Login wpisujemy zbd_user, a w polu Password – user. Następnie klikamy Connect. W efekcie powinien pokazać się błąd logowania jak na rys. 10. Rys. 10 Bład logowania Porady praktyczne Procedury składowane • W Microsoft SQL Server przy kontroli poprawności kodu procedury w trakcie jej tworzenia serwer nie sprawdza, czy istnieją obiekty (tabele, widoki), do których procedura się odwołuje. Sprawdzenie to następuje dopiero przy wykonaniu procedury (w przypadku odwołania do nieistniejącego obiektu procedura zgłosi błąd). • Rekompilacja procedury składowanej nie oznacza utworzenia procedury na nowo. Oznacza utworzenie nowego planu wykonania i zapisanie go do bufora procedury na miejsce poprzednio skompilowanego planu tej samej procedury. • Systemowe procedury składowane w systemie Microsoft SQL Server 2008 są przechowywane w bazie master, zaś w ich nazwach pojawia się prefiks „sp_”. • Zgodnie z dobra praktyka programowania baz danych, procedury składowane użytkownika w SQL Server 2008 nie powinny zaczynać się od prefiksu „sp_”. Prefiksem tym obarczone są systemowe procedury składowane. W sytuacji kiedy kompilator zobaczy procedurę składowaną o takiej nazwie, będzie jej szukał w procedurach systemowych jako tych, które już są skompilowane, a ich plan wykonania jest zapamiętany w buforze procedur. Dopiero kiedy jej tam nie znajdzie zacznie ją kompilować według poznanego schematu. Spowoduje to wydłużenie czasu wykonania procedury składowanej. Strona 13/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze • Stworzenie polisy, która nie pozwoli programiście utworzyć procedury składowanej zaczynającej się od prefiksu „sp_” spowoduje, że pierwsza próba stworzenia procedury o takiej nazwie pociągnie za sobą konieczność uruchomienia sprawdzenia polisy, a zatem czas wykonania polecenia nieznacznie się wydłuży. Kolejna próba stworzenia procedury niezgodnej z polisą spowoduje natychmiastowe wyświetlenie komunikatu o naruszeniu restrykcji. • Z punktu widzenia bezpieczeństwa fizycznej struktury bazy danych procedury składowane stanowią dodatkowy poziom izolacji pomiędzy warstwą aplikacji dostępowej do bazy danych a warstwą fizyczna bazy danych. • Poprzez zastosowanie procedur składowanych możemy uniknąć jednego z najpopularniejszych ataków na bazę danych, tzw. Wstrzykiwania kodu SQL z racji tego iż w sieci pomiędzy bazą danych a aplikacją dostępową nie jest przesyłany kod SQL tylko nazwa procedury składowanej wraz z jej parametrami. Wyzwalacze • Wyzwalacze mogą być tworzone bezpośrednio w Microsoft SQL Server 2008 Database Engine za pomocą zwykłych zapytań napisanych w języku T-SQL lub poprzez specjalne metody w Microsoft .NET Framework Common Language Runtime (CLR), które po utworzeniu importowane są do instancji serwera bazodanowego. • Microsoft SQL Server 2008 pozwala na tworzenie wielu wyzwalaczy dla specyficznego zdarzenia. • Do tworzenia wyzwalaczy potrzebne są specjalne uprawnienia w bazie danych. • Następujące instrukcje języka T-SQL nie są dozwolone w wyzwalaczach DML: ALTER DATABASE, LOAD DATABASE, RESTORE DATABASE, CREATE DATABASE, LOAD LOG, RESTORE LOG, DROP DATABASE i RECONFGURE. Dodatkowo powyższe instrukcje nie mogą być użyte wewnątrz ciała wyzwalacza DML. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • • • • • rozumiesz, co to jest procedura składowana oraz wyzwalacz rozumiesz zasadę działania procedur składowanych i wyzwalaczy znasz składnię zaawansowanego języka Transact-SQL umiesz dodawać użytkowników do SQL Server rozumiesz różnicę pomiędzy różnymi rodzajami wyzwalaczy Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Deren Bieniek, Randy Dyess, Mike Hotek, Javier Loria, Adam Machanic, Antonio Soto, Adolfo Wiernik, SQL Server 2005 Implementacja i obsługa, APN Promise, 2006 W książce obszernie przedstawiono zagadnienia związane z programowaniem baz danych. Szczegółowo omówiono zagadnienia dotyczące procedur składowanych i wyzwalaczy. Omówiono w niej implementacje procedur składowanych oraz w jaki sposób przyznawać do nich uprawnienia. Pokazano implementacje wyzwalaczy (DML i DDL). Książka szczególnie polecana ze względu na dużą zawartość ćwiczeń laboratoryjnych. 2. Kalen Delaney, Podstawy baz danych krok po kroku, APN Promise, 2006 Strona 14/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Bardzo dobra książka dla osób początkujących. Pokazano w niej praktyczne zastosowanie wyzwalaczy i procedur składowanych. Książka oprócz teorii zawiera wiele przykładów. 3. Dusan Petkovic, Microsoft SQL Server 2008: A Beginner's Guide, McGraw-Hill, 2008 Pozycja napisana w sposób prosty. Wprowadza w SQL Server 2008 w sposób szybki i łatwy. Osoba początkująca w SQL Server 2008 znajdzie w niej podstawy z każdego tematu dotyczącego serwera bazodanowego. W prosty sposób dowiesz się, jak tworzyć proste procedury składowane bez parametrów i z parametrami oraz jak posługiwać się wyzwalaczami. Pozycja polecana zarówno dla osób początkujących, jak i zaawansowanych. Strona 15/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Laboratorium podstawowe Problem 1 (czas realizacji 10 min) Jesteś programistą bazodanowym w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma planuje rozszerzenie rozszerz na skalę uczelnianą systemu prac dyplomowych, którym zarządzała jak dotąd na Twoim wydziale. wydziale Pierwsze zadanie, jakie przed Tobą Tob stoi to analiza już istniejących procedur składowanych. Zadanie Tok postępowania 1. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Mirosoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. Studio • W oknie logowania kliknij Connect. 2. Uzyskaj informacje o bazie danych • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\Labs\Lab09\ProcedurySystemowe ProcedurySystemowe.sql i kliknij Open. • Zaznacz i uruchom (F5) poniższy fragment kodu, który wywołuje procedurę systemową sp_helpdb: -- (1) Ustawiamy sie na baze danych PraceDyplomowe USE PraceDyplomowe GO -- (2) Wywolanie procedury systemowej sp_helpdb EXEC sp_helpdb PraceDyplomowe Procedura sp_helpdb zwraca informacje o wybranej bazie danych (rozmiar, listę plików i informacje o nich). 3. Uzyskaj informacje o obiektach bazy danych • Zaznacz i uruchom (F5) poniższy fragment kodu, który wywołuje procedurę systemową sp_help: -- (3) Wywolanie procedury systemowej sp_help EXEC sp_help dbo.Prace Procedura sp_help zwraca informacje o wybranym obiekcie bazy danych. Czy w tabeli dbo.Prace jest jakakolwiek kolumna typu bit? 4. Uzyskaj informacje o indeksach tabeli • Zaznacz kod, który wywołuje procedurę systemową sp_helpindex. -- (4) Wywolanie procedury systemowej sp_helpindex EXEC sp_helpindex dbo.Prace • Wciśnij F5,, aby uruchomić zaznaczony fragment kodu. Procedura sp_helpindex zwraca listę i opis indeksów założonych na kolumnach w wybranej tabeli. Czy w tabeli dbo.Prace jest nałożony jakiś indeks? Strona 16/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Problem 2 (czas realizacji 10 min) Po dokonaniu analizy procedur już istniejących, istniejących kolejne zadanie, jakie zostało przed Tobą postawione, to zdefiniowanie procedur składowanych dla nowych użytkowników oraz modyfikacja już istniejących procedur składowanych. W pierwszej kolejności powinieneś zająć się procedurami składowanymi bez parametrów. Zadanie Tok postępowania 1. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. Studio • W oknie logowania kliknij Connect. 2. Utwórz procedurę składowaną • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\Labs\Lab10\Procedura_bez_parametrow.sql _bez_parametrow.sql i kliknij Open Open. • Zaznacz kod, który wywołuje procedurę składowaną Promotorzy: -- (1) Ustawiamy sie na baze danych PraceDyplomowe raceDyplomowe USE PraceDyplomowe GO -- (2) Tworzymy procedure skladowana uzytkownika CREATE PROCEDURE Promotorzy AS BEGIN SELECT [Nazwisko], [Imie] FROM Promotor END Innym sposobem stworzenia procedury składowanej jest kliknięcie prawym przyciskiem myszy gałęzi Stored ed Procedures i wybranie New StoredProcedure – uzyskasz w ten sposób gotowy schemat procedury składowanej. • Wciśnij F5,, aby uruchomić zaznaczony fragment kodu. Jeśli procedura składowana została utworzona poprawnie, powinieneś otrzymać komunikat „Command(s) completed successfully” successfully oraz zauważyć, że została dodana nowa procedura składowana w Object Explorer, w gałęzi Databases -> PraceDyplomowe -> Programmability -> StoredProcedures. Jeśli procedury nie widać w w/w gałęzi, odśwież ją. Jeśli procedura jest już utworzona, a mimo to zażądano kolejnego jej utworzenia, to powinieneś otrzymać komunikat „There is already object name ‘Promotorzy’ in the database”. 3. Uruchom procedurę składowaną • Zaznacz kod, który wywołuje procedurę Promotorzy: Promotorzy -- (3) Wywolujemy procedure skladowana Promotorzy EXEC Promotorzy GO Innym sposobem na wywołanie procedury składowanej jest kliknięcie Strona 17/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze prawym przyciskiem myszy na procedurze Promotorzy i wybranie Execute Stored Procedure, co wywoła okienko, w którym można przekazać do procedury jakieś parametry,, jak na rys. 11. Rys. 11 Wywołanie procedury składowanej z parametrem • Wciśnij F5, aby uruchomić zaznaczony fragment kodu. Problem 3 (czas realizacji 15 min) Kolejne zadanie, jakie powinieneś wykonać, wykonać to zdefiniowanie procedur składowanych dla nowych użytkowników oraz modyfikacja już istniejących procedur składowanych z parametrami. parametrami Zadanie Tok postępowania 1. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. Studio • W oknie logowania kliknij Connect. 2. Utwórz procedurę składowaną • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\Labs\Lab10\Procedura_z_parametr C z_parametrami.sql i kliknij Open Open. • Zaznacz kod, który wywołuje procedurę składowaną Promotorzy: -- (1) Ustawiamy sie na baze danych PraceDyplomowe USE PraceDyplomowe GO -- (2) Tworzymy procedure skladowana użytkownika z parametrem CREATE REATE PROCEDURE dbo.Promotorzy dbo. @Nazwisko Nazwisko VARCHAR(30) AS BEGIN SELECT * FROM [PraceDyplomowe].[dbo].[Osoba] [ WHERE [PraceDyplomowe].[dbo].[Osoba].[nazwisko [ nazwisko] = @Nazwisko END • Wciśnij Wciś F5,, aby uruchomić zaznaczony fragment kodu. 3. Uruchom procedurę składowaną • Zaznacz kod, który wywołuje procedurę Promotorzy. Promotorzy Wciśnij F5, aby uruchomić zaznaczony fragment kodu: kodu -- (3) Wywolujemy procedure skladowana z parametrem EXEC Promotorzy @Nazwisko='Kowalski' GO Strona 18/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Problem 4 (czas realizacji 10 min) Po zdefiniowaniu procedur składowanych wynikających ze z zmian, jakie zachodzą w firmie, firmie w której pracujesz, kolejnym etapem jest stworzenie odpowiedniej liczby wyzwalaczy. Jeden z wyzwalaczy powinien en obsługiwać następujący warunek: każdy opiekun może mieć maksymalnie 10 dyplomantów. Zadanie Tok postępowania 1. Nawiąż połączenie z SQL Server 2008 • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Manageme Studio. • W oknie logowania kliknij Connect. 2. Utwórz wyzwalacz • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik C:\Labs\Lab10\Wyzwalacz_1.sql i kliknij Open. • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (1) Ustawiamy się na baze danych PraceDyplomowe USE PraceDyplomowe GO -- (2) przygotujmy tabele do testowania wyzwalaczy SELECT ID_Osoby, Nazwisko, Imie, Nr_Indeksu, ID_Stopnian INTO Osoba_kopi FROM Osoba GO • Zaznacz i uruchom (F5) ( ) fragment kodu oznaczonego w komentarzu (3). ( Wynik pokazano na rys. 12: -- (3) zobaczmy, co znajduje sie w tabeli SELECT * FROM Osoba_kopi GO Rys. 12 Sprawdzenie zawartości tabeli tabe • W obrębie okna Object Explorer wybierz Osoba ->> Triggers. Strona 19/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze • Wci Wciśnij prawy przycisk myszy i wybierz New Trigger. Trigger • Zaznacz i uruchom (F5) ( poniższy fragment kodu: -- (4) Tworzymy nowy wyzwalacz CREATE TRIGGER Ocenay ON Osoba AFTER INSERT, UPDATE AS DECLARE @username as varchar(30) SELECT @username = SYSTEM_USER PRINT 'Uzytkownik '+ @username + ' zmienil zawartosc tabeli Osoba!!!' GO • W celu zobaczenia działania wyzwalacza wywołaj następujące zapytanie: -- (5) Sprawdzamy dzialanie wyzwalacza UPDATE Osoba O SET [Nazwisko] = 'Nowak' WHERE ID_Osoby=1 GO Jeśli wyzwalacz zadziałał poprawnie, w oknie Messages powinien pojawić się komunikat o treści ci przedstawionej na rys. 13. Rys. 13 Sprawdzanie efektu działania wyzwalacza Strona 20/21 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy danych Moduł 9 Procedury składowane i wyzwalacze Laboratorium rozszerzone Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma zarządzająca bazą AdventureWorks planuje rozszerzenie i modernizacje systemu. W związku z modernizacją systemu bazodanowego oraz w celu spełnienia standardów bezpieczeństwa, dostęp do obiektów bazy danych powinien odbywać się poprzez procedury składowane. W wyniku tego część procedur składowanych powinna zostać zmodyfikowana i przekompilowana, część powinna zostać napisana od początku, a część powinna zostać usunięta. Kolejnym pojawiającym się problemem jest kwestia spójności zmodyfikowanej bazy danych. W tym celu powinny zostać zmodyfikowane, utworzone lub usunięte wyzwalacze służące do zaimplementowania pewnych warunków. Zadanie, jakie przed Tobą stoi, to: 1. Podjęcie decyzji, jakie nowe procedury składowane i wyzwalacze powinny zostać utworzone w celu poprawienia bezpieczeństwa bazy danych. 2. Podjęcie decyzji, które procedury składowane w bazie danych pozostaną bez zmian, a które zostaną zmodyfikowane lub usunięte. 3. Podjęcie decyzji, które wyzwalacze w bazie danych pozostaną bez zmian, a które zostaną zmodyfikowane lub usunięte. Strona 21/21 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 10 Wersja 2.0 Bezpieczeństwo w bazach danych Spis treści Bezpieczeństwo w bazach danych ....................................................................................................... 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 6 Porady praktyczne ..................................................................................................................... 10 Uwagi dla studenta .................................................................................................................... 10 Dodatkowe źródła informacji..................................................................................................... 10 Laboratorium podstawowe ................................................................................................................ 12 Problem 1 (czas realizacji 45 min).............................................................................................. 12 Laboratorium rozszerzone ................................................................................................................. 17 Zadanie 1 (czas realizacji 90 min)............................................................................................... 17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Informacje o module Opis modułu W tym module dowiesz się, jak należy rozumieć bezpieczeństwo baz danych oraz jakie są poziomy bezpieczeństwa. Ponadto dowiesz się, jakim zagrożeniom należy przeciwdziałać, a jakich nie da się uniknąć oraz jak należy planować implementację poszczególnych poziomów bezpieczeństwa w aplikacji bazodanowej. Cel modułu Celem modułu jest przedstawienie czytelnikowi typowych zagadnień związanych z zabezpieczeniami dostępu do danych w SQL Server 2008. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • wiedział jakie mechanizmy uwierzytelniania wspiera SQL Server 2008 • potrafił dodać użytkownika i nadać mu odpowiednie prawa • rozumiał czym są schematy zabezpieczeń Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • wiedzieć, jak używać oprogramowania Microsoft Virtual PC • znać podstawy obsługi systemu Windows 2000 lub nowszego • znać podstawy obsługi SQL Server Management Studio Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na rys. 1, istnieje konieczność wykonania wcześniej modułu 3. Rys. 1 Mapa zależności modułu Strona 2/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Przygotowanie teoretyczne Przykładowy problem Firma National Insurance wdrożyła Microsoft SQL Server 2008. Założono na nim kilka baz i hurtowni danych. Ze względu na pilne potrzeby firmy szybko też zasilono bazy z dostępnych źródeł danych. Dostęp do poszczególnych baz danych zrealizowany jest poprzez dedykowane aplikacje łączące się z serwerem Microsoft SQL Server 2008 na prawach administratora. W pierwszych tygodniach po wdrożeniu system dział sprawnie lecz później pojawiły się problemy z wydajnością i dostępem do danych. Niektórzy menadżerowie zauważyli szereg niezgodności, informacje jakie wprowadzali nie zgadzały się z danymi w raportach uzyskanych z systemu. Po krótkim czasie okazało się, że osoby nieuprawnione mają dostęp do poufnych danych, nie ma także żadnej polityki bezpieczeństwa dla serwerów bazodanowych. Rozwiązanie tego problemu złożono na barki głównego informatyka, jako osoby kompetentnej i odpowiedzialnej za rozwój systemu bazodanowego firmy. W pierwszymi krokami jakie podjął on po otrzymaniu zadania był dokładny przegląd stanu obecnego systemu i porównanie go z wytycznymi i najlepszymi praktykami z zakresu bezpieczeństwa bazodanowego. Podstawy teoretyczne Pojęcie bezpieczeństwa baz danych wiąże się nieodłącznie z bezpieczeństwem serwera baz danych. W hierarchii bezpieczeństwo takiego serwera stoi wyżej niż bezpieczeństwo pojedynczej bazy, ponieważ brak zabezpieczeń na tym poziomie pociąga za sobą brak zaufania do pojedynczych baz danych znajdujących się na serwerze. Bezpieczeństwo serwera baz danych to: • • • • zapewnienie stabilnego i w miarę możliwości bezawaryjnego działania serwera baz danych zapewnienie uprawnionym użytkownikom dostępu do odpowiednich baz danych ograniczenie dostępu do danych dla użytkowników nieuprawnionych zapewnienie jak najmniejszej ingerencji serwera baz danych w działanie systemu operacyjnego komputera Bezpieczeństwo baz danych natomiast dotyczy następujących aspektów: • umożliwienie tylko autoryzowanym użytkownikom wykonywania odpowiednich operacji na bazie danych • zapewnienie bezpieczeństwa fizycznego bazy danych (odpowiednia strategia kopii zapasowych) Mówiąc o bezpieczeństwie należy rozróżniać dwa pojęcia: uwierzytelnienie oraz autoryzacja. Pierwsze pojęcie oznacza identyfikację użytkownika na podstawie jego nazwy i hasła. Z kolei autoryzacja jest fazą następującą po poprawnym uwierzytelnieniu i polega na określeniu uprawnień przypadających uwierzytelnionemu użytkownikowi. Poziomy bezpieczeństwa W najogólniejszym ujęciu można wyodrębnić następujące poziomy bezpieczeństwa: • • • • • • • bezpieczeństwo fizyczne danych bezpieczeństwo sieci bezpieczeństwo domeny bezpieczeństwo maszyny lokalnej bezpieczeństwo serwera baz danych bezpieczeństwo bazy danych bezpieczeństwo aplikacji bazodanowej Strona 3/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Bezpieczeństwa doskonałego nie można w praktyce nigdy zapewnić, ale można podjąć kroki, by zapobiegać skutkom wszelkich awarii, katastrof lub niepożądanych ingerencji czynnika ludzkiego. Aby zadbać o globalne bezpieczeństwo, należy zaplanować strategię na każdym z wymienionych poziomów. Bezpieczeństwo fizyczne danych Poziom bezpieczeństwa fizycznego danych określa, czy w przypadku awarii sprzętu, katastrofy (jako katastrofę rozumiemy nie tylko czynniki naturalne, jak np. powodzie, lecz także kradzieże i inne wpływy czynnika ludzkiego) lub fizycznego uszkodzenia plików danych jesteśmy w stanie odtworzyć dane i jak długo baza danych (lub serwer baz danych) będzie niedostępny dla użytkowników. Na tym poziomie należy też odpowiedzieć na pytanie, czy kopie danych są bezpieczne (m.in. czy niepowołane osoby nie mają do nich dostępu). Bezpieczeństwo sieci Poziom bezpieczeństwa sieci określa, czy dane są bezpiecznie przesyłane w sieci. Szczególnie dotyczy to ściśle poufnych danych, tj. numerów kart kredytowych czy danych personalnych klientów firmy. Bezpieczeństwo domeny Poziom bezpieczeństwa domeny określa, czy komputery w domenie (w szczególności kontrolery domeny) są odpowiednio zabezpieczone. W dobie integracji serwerów baz danych (np. Microsoft SQL Server) z systemami operacyjnymi, w przypadku braku zabezpieczeń w systemie operacyjnym bezpieczeństwo serwera baz danych spada do minimum. Bezpieczeństwo serwera baz danych Poziom bezpieczeństwa serwera baz danych określa, czy serwer baz danych jest odpowiednio zabezpieczony przed nieuprawnionymi użytkownikami (fizycznie – maszyna – oraz wirtualnie – odpowiednie mechanizmy uwierzytelniające). Bezpieczeństwo bazy danych Poziom bezpieczeństwa bazy danych określa, czy dostęp do bazy danych i ról w bazie danych jest odpowiednio skonfigurowany (na ogół jest to sprawa konfiguracji w systemie bazodanowym). Bezpieczeństwo aplikacji bazodanowej Poziom bezpieczeństwa aplikacji bazodanowej określa, czy kod aplikacji klienckiej współpracującej z bazą danych jest napisany w sposób bezpieczny (czy aplikacja nie umożliwia zmniejszenia bezpieczeństwa na którymkolwiek z pozostałych poziomów). Szczególnie należy tu zwrócić uwagę na dane wprowadzane przez użytkowników. Implementacja różnych poziomów bezpieczeństwa Każdy z poziomów bezpieczeństwa wymaga podjęcia określonych kroków przez administratorów systemów i baz danych. Implementacja bezpieczeństwa fizycznego Zadaniem administratora baz danych jest zapewnienie tolerancji błędów dysków fizycznych dla systemu i dla danych oraz zaplanowanie strategii sporządzania i przechowywania kopii zapasowych. Tolerancję błędów dysków fizycznych można osiągnąć używając woluminów RAID (ang. Redundant Array of Independent Disks) typu RAID-1 lub RAID-5. Implementacja RAID-1 polega na jednoczesnym przechowywaniu danych na dwóch fizycznych dyskach stanowiący jeden dysk logiczny (dwie kopie danych – w przypadku awarii jednego dysku, drugi nadal umożliwia dostęp do danych). Oznacza to, że 50% pojemności woluminu typu RAID-1 Strona 4/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 jest przeznaczone na przechowywanie danych, a druga połowa służy do przechowywania kopii danych. RAID-5 to dysk logiczny składający się z co najmniej trzech dysków fizycznych (z każdego dysku wolumin zabiera tyle samo przestrzeni dyskowej). W woluminach typu RAID-5 część przestrzeni dyskowej jest poświęcana na zapis tzw. danych parzystości (niezbędnych do odzyskania danych w przypadku awarii jednego z dysków wchodzących w skład woluminu). Im więcej dysków wchodzi w skład woluminu, tym mniej przestrzeni dyskowej zajmują dane parzystości (mniejsza nadmiarowość danych). Najlepszym rozwiązaniem w kwestii zapewnienia tolerancji błędów dysków fizycznych są sprzętowe woluminy RAID pracujące z kontrolerami SCSI, z uwagi na szybszą pracę niż RAID programowy. Niestety jest to jednocześnie najdroższe rozwiązanie. Kopie bezpieczeństwa, zwane też kopiami zapasowymi (ang. backup), powinny być przechowywane bądź na zewnętrznym nośniku (taśmy, płyty CD lub inne nośniki) lub na innym komputerze niż ten, z którego kopiujemy dane. Ponadto nośniki z kopiami zapasowymi powinny być przechowywane w innym miejscu niż maszyna, z której pochodzą dane (zmniejszamy ryzyko utraty danych w przypadku pożarów czy powodzi). Strategia kopii zapasowych powinna być zaplanowana przez administratora baz danych i administratora systemu operacyjnego. Należy zaplanować strategię, która odpowiada potrzebom firmy, tzn. należy odpowiedzieć na pytanie, czy ważniejsze jest szybkie sporządzanie kopii zapasowych, czy też istotniejsze jest jak najszybsze przywracanie danych po awarii. Na ogół strategia musi uwzględnić obie kwestie. Stąd najczęściej powtarzanym schematem sporządzania kopii zapasowych jest wykonywanie co tydzień kopii wszystkich danych oraz codzienne wykonywanie kopii przyrostowych (tylko dane zmodyfikowane danego dnia). W budowaniu strategii kopii zapasowych należy też uwzględnić „godziny szczytu” pracy serwera (proces wykonywania kopii zapasowych pociąga za sobą dodatkowe obciążenie serwera). Dlatego na ogół operacje te są wykonywane w godzinach nocnych i są planowane w ten sposób, by nie kolidowały z czasem, gdy użytkowanie serwera przez klientów jest najintensywniejsze. Implementacja bezpieczeństwa sieci Przy planowaniu bezpieczeństwa sieci należy zadać sobie pytanie, czy dane przesyłane z naszego serwera baz danych są poufne. Jeśli tak, to możemy zastosować dostępne protokoły szyfrujące, takie jak SSH czy IPSec. Oprócz implementacji sieciowych protokołów szyfrujących do transmisji danych, należy ograniczyć ilość danych wysyłanych w świat do niezbędnego minimum (najlepiej nie „przedstawiać się” zbytnio w sieci – ujawnienie oprogramowania serwera baz danych to pierwszy krok do zachwiania bezpieczeństwa naszego serwera). Implementacja bezpieczeństwa komputerów i domen Aby zapewnić komputerom i domenom niezbędny poziom bezpieczeństwa, należy trzymać się kilku zasad. Nie należy instalować serwerów baz danych na serwerach kluczowych dla domeny (kontrolery domeny). Najlepsza struktura domeny to taka, w której każdy serwer pełni pojedynczą funkcję (np. serwer aplikacji, serwer plików, serwer baz danych itd.). Niezbędna jest odpowiednia polityka administratorów systemu (lub domeny), czyli: • utrzymywanie aktualnego poziomu zabezpieczeń systemu operacyjnego oraz serwera baz danych • odpowiednia polityka bezpiecznych haseł użytkowników • zmiana nazw kont administratorskich • monitorowanie logowania do systemu (domeny) Strona 5/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych • • • • • • Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 ograniczanie dostępu do plików i folderów nadawanie minimalnych wymaganych uprawnień dla użytkowników i grup jak najmniejsze wykorzystywanie kont administratorskich implementacja „zapór ogniowych” (ang. firewall) ograniczenie fizycznego dostępu do serwerów i kontrolerów domeny uruchamianie usług serwera baz danych przy użyciu konta użytkownika specjalnie stworzonego w tym celu (nie administratora) i zapewnienie stabilności tego konta (np. nigdy nie wygasające hasło) Implementacja bezpieczeństwa serwera baz danych i samych baz Pod hasłem bezpieczeństwa serwera baz danych rozumiemy umożliwienie korzystania z serwera tylko osobom do tego uprawnionym. Większość systemów zarządzania bazami danych oferuje uwierzytelnianie użytkowników na dwóch poziomach: na poziomie serwera (użytkownik może dostać się do serwera) oraz na poziomie bazy danych (użytkownik serwera ma dostęp do konkretnej bazy danych). Mechanizmy uwierzytelniania i autoryzacji są różne i zależą od konkretnego środowiska bazodanowego. Zazwyczaj użytkownicy dzieleni są na role (grupy), natomiast rolom nadawane są określone uprawnienia. Ponadto niezbędnym nawykiem administratora baz danych powinno być rejestrowanie i monitorowanie zdarzeń na serwerze w poszukiwaniu nietypowych zdarzeń. Implementacja bezpieczeństwa aplikacji bazodanowej Piętą achillesową systemu informatycznego współpracującego z bazą danych często jest interfejs użytkownika (od strony programistycznej i implementacji logiki biznesowej). Szczególnie chodzi tu o umożliwienie użytkownikom oddziaływania na serwer baz danych lub nawet na system operacyjny serwera z poziomu aplikacji klienckiej. Należy ze szczególną uwagą projektować aplikacje bazodanowe. Oto kilka zasad, którymi należy się kierować przy tworzeniu interfejsów dla tych aplikacji: • zachowaj przezroczystość aplikacji i bazy danych (nie pokazuj informacji o źródle aplikacji i o strukturze bazy danych), szczególnie uważaj na komunikaty domyślne aplikacji (lepiej ustawić swoje, które powiedzą tylko, że wystąpił błąd) • nigdy nie ufaj użytkownikowi aplikacji i wpisywanym przez niego wartościom • sprawdzaj, czy wejście jest tym, czego oczekujesz i odrzucaj wszystko inne wartości • walidację wejścia przeprowadzaj na wielu poziomach • używaj wyrażeń regularnych • staraj się nie używać konkatenacji do tworzenia zapytań SQL (zamiast tego użyj procedur z parametrami) • łącz się z bazą danych używając w miarę najmniej uprzywilejowanego konta użytkownika Przykładowe rozwiązanie Zapewnienie bezpieczeństwa serwerowi bazodanowemu jest sprawą złożoną i rozciągniętą na kilka poziomów. Z punktu widzenia administratora systemu podstawowym poziomem jest kwestia autoryzacji użytkowników, którzy mają dostęp do serwera SQL. Narzędzie SQL Server Management Studio umożliwia kontrolę nad wieloma parametrami nie tylko bazy danych, ale też samego serwera. Jedną z grup interesujących nas parametrów jest sposób uwierzytelniania użytkowników, co ilustruje rys. 2. Serwer SQL może wykorzystywać do uwierzytelniania własne konta użytkowników lub dodatkowo honorować konta systemu operacyjnego. Strona 6/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Rys. 2 Opcje bezpieczeństwa serwera Mieszany tryb uwierzytelniania, który jest zaznaczony na rys. 2, pozwala na łączenie się z serwerem także użytkownikom, którzy nie mają kont w systemie Windows w sieci, w której pracuje serwer. Dobrą praktyką jest monitorowanie nieudanych prób logowania do systemu, co zapewnia opcja Login auditing. Inną interesującą grupą są obiekty związane wewnętrznymi kontami użytkowników serwera SQL dostępne w polu Logins. Procedura tworzenia nowego użytkownika jest podobna do analogicznej procedury w systemie operacyjnym co ilustruje rys. 3. Rys. 3 Tworzenie nowego loginu Jeśli Microsoft SQL Server 2008 zainstalowany jest na komputerze pracującym pod kontrolą systemu Microsoft Windows Server 2003, można wymusić odpowiednią politykę bezpieczeństwa haseł serwera baz danych dzięki polisom systemu operacyjnego. Po założeniu odpowiednich kont możemy sprawdzić, czy logowanie do serwera przebiegało pomyślnie czy też były z tym jakieś problemy. Do monitorowania aktywności serwera służy dziennik. Przykładową zawartość dziennika serwera SQL pokazuje rys. 4. Strona 7/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Rys. 4 Dziennik systemowy SQL Server 2008 Dobry administrator śledzi przynajmniej nieudane próby logowania do systemu. Dziennik pokazany na rys. 4 to dziennik to po prostu zdarzeń systemu Windows. Przeglądarka dziennika systemu SQL Server umożliwia jednoczesne przeglądanie wszystkich zapisywanych w tym systemie informacji. Utworzenie konta dla danego użytkownika nie oznacza jeszcze przyznanie mu jakichkolwiek praw poza możliwością połączenia z serwerem. Aby dany użytkownik mógł skorzystać z baz danych należy w kontekście danej bazy przyznać mu prawo do połączenia się z nią. Po rozwinięciu drzewa bazy w obszarze Object Explorer widzimy pole Security, gdzie możemy ustalać, który użytkownik posiada dostęp i na jakich zasadach, co ilustruje rys. 5. Rys. 5 Dodawanie użytkownika do bazy danych Podobny efekt możemy uzyskać uruchamiając odpowiednią sekwencję kodu języka SQL. Do nadawania i odbierania uprawnień użytkownikom służą polecenia GRAND i REVOKE, tak jak to pokazuje rys. 6. Należy jednak zauważyć, że do uruchomienia danego kodu SQL musimy posiadać konto, które: • ma dostęp do danej bazy • posiada odpowiednie uprawnienia np. administracyjne w kontekście tej bazy W innym wypadku kontrolowanie uprawnień z poziomu języka SQL nie powiedzie się. Strona 8/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Rys. 6 Nadanie uprawnień użytkownikowi Tomek Jeżeli posiadamy w systemie kilka kont użytkowników, które są odpowiednio skonfigurowane i posiadają uprawnienia dostępu do bazy, możemy przełączać pomiędzy nimi kontekst wykonywanych poleceń SQL. Służy do tego polecenie EXECUTE AS, jak pokazano na rys. 7. Rys. 7 Wykonanie kodu SQL w kontekście użytkownika Tomek Komenda EXECUTE AS pozwala zmienić kontekst wykonywania poleceń na wybranego użytkownika. Powrót do pierwotnego kontekstu zapewnia polecenie REVERT. W rzeczywistych systemach pojawia się wiele kont i grup użytkowników. Pomoc w zapanowaniu nad mnogością kont zapewniają schematy. Schematy to przestrzenie nazw lub pojemniki na obiekty w bazie danych. Upraszczają one zarządzanie uprawnieniami w bazie danych oraz stanowią element niezbędny do poprawnego rozwiązywania nazw w systemie Microsoft SQL Server 2008. Strona 9/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Schematy umożliwiają nadawanie uprawnień na wiele obiektów jednocześnie. Wystarczy umieścić je w jednym schemacie. Ponadto schematy pozwalają uniknąć sytuacji, w których usunięcie użytkownika z bazy jest niemożliwe, gdy jest on właścicielem obiektów w bazie danych (wcześniej trzeba zmienić właścicieli wszystkich obiektów, których właścicielem jest wspomniany użytkownik). Do tworzenia schematów służy polecenie CREATE SCHEMA. Więcej informacji na temat tworzenia i zarządzania schematami znajduje się w laboratorium podstawowym i Books Online na stronie firmy Microsoft. Porady praktyczne Nigdy nie myśl, że system i serwer baz danych są bezpieczne. Jest to jedna z podstawowych zasad przy projektowaniu lub inspekcji mechanizmów zabezpieczających systemy, nie tylko informatyczne. Takie podejście znacznie zwiększa szanse na znalezienie luki lub potencjalnego problemu. Nigdy nie ufaj temu, co użytkownik podaje na wejściu do systemu. Jeżeli przewidujesz możliwość wprowadzania danych przez użytkownika zawsze staraj się prawidłowo i uważnie obsługiwać pojawiające się informacje automatycznie odrzucając wartości, których się w danej sytuacji nie spodziewasz. Zachowuj zasadę minimalnych uprawnień w stosunku do użytkownika. Prawidłowe podejście z punktu widzenia bezpieczeństwa to w pierwszym kroku zabranie użytkownikowi wszystkich uprawnień w systemie a dopiero później ostrożne przydzielenie mu takich jakie wydają się być niezbędne. Wprowadza to oczywiście wydłużenie czasu dostosowania systemu do pracy w pełnym wymiarze oraz swoiste niezadowolenie użytkowników ale jest niezbędne. Zasada ta jest szczególnie ważna dla użytkowników typu serwis systemowy i implikuję kolejną o nazwie „domyślnie zamknięte”. Obszary działania systemu takie jak porty dostępu, protokoły komunikacyjne czy same bazy danych jeżeli nie są w danej chwili używane powinny mieć status zamkniętych dla użytkownika. Dopiero formalna potrzeba użycia danej części systemu może ją aktywować. Eliminuje to znakomitą część prób włamań na nieużywane, „uśpione” ale ciągle aktywne zasoby. Regularnie szukaj nieprawidłowości w systemie. Systemy informatyczne to najczęściej twory o silnej dynamice podlegające ciągłym zmianom. Zmiany te mogą tworzyć nowe, potencjalne „furtki” dla włamywaczy. Inną sprawą jest niedoskonałość samego oprogramowania. Co prawda dla rozwijanych systemów co jakiś czas wydawane są aktualizacje jednakże praktyka wskazuje, że łatki takie potrafią naprawiać jedną część a jednocześnie stwarzać luki gdzie indziej. Bądź na bieżąco z technologiami i technikami programistycznymi aby wiedzieć jak reagować na potencjalne zagrożenia. Wiedza ta w przypadku systemów bazodanowych jest szczególnie cenna gdyż cześć funkcjonalności administrator może sam bezpośrednio oprogramować a co za tym idzie posiadać nad nią całkowita kontrolę. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • • • • rozumiesz, co oznacza serwis systemowy, serwis bazy danych, instalacja serwisu rozumiesz zasadę działania uruchomienia serwisów w kontekście użytkownika umiesz wymienić i opisać podstawowe komponenty systemu bazodanowego umiesz podać przykład zastosowania systemu bazodanowego w praktyce Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Kalen Delaney, Microsoft SQL Server 2005: Rozwiązania praktyczne krok po kroku, Microsoft Press, 2006 Strona 10/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Podręcznik ten jest idealną pomocą dla użytkowników, który postawili już pierwsze kroki w systemach bazodanowych. Dużo ćwiczeń i kodów źródłowych odnoszących się do sytuacji spotykanych w praktyce jest doskonałą bazą do rozwiązywani problemów pojawiających się w rzeczywistości. 2. Edward Whalen, Microsoft SQL Server 2005 Administrator’s Companion, Microsoft Press, 2006 Kompleksowe opracowanie na temat zaplanowania I wdrożenia system bazodanowego opartego o MS SQL Server 2005 w małym i średnim przedsiębiorstwie. Autorzy postawili na formułę przedstawiania wielu problemów z praktyki administratora baz danych oraz możliwych dróg do ich rozwiązania. Książka jest adresowana do praktykujących użytkowników. 3. Dusan Petkovic, Microsoft SQL Server 2008: A Beginner's Guide, McGraw-Hill, 2008 Pozycja adresowana do osób zaczynających przygodę z bazami danych. Znajdziemy tu wprowadzenie do relacyjnych baz danych, sposoby ich projektowania, optymalizacji i w końcu wdrożenia w najnowszej odsłonie serwera SQL w wersji 2008. Omówienie języka T-SQL w osobnej, dużej części książki jest kolejną mocną tej pozycji. 4. Strona domowa SQL Server 2008, http://www.microsoft.com/sql/2008/default.mspx Tutaj znajdziemy wszystkie podstawowe informacje na temat MS SQL Server 2008 oraz nowości z nim związane. Strona 11/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Laboratorium podstawowe Problem 1 (czas realizacji 45 min) Pierwszym zadaniem, jakie sobie postawiłeś, postawiłeś jest zbadanie możliwości serwera Microsoft SQL Server 2008 pod względem tworzenia użytkowników, nadawania im uprawnień i kontroli nad tymi uprawnieniami. W celach testowych postanowiłeś wykorzystać roboczą bazę PraceDyplomowe, założoną na serwerze Evaluation. Evaluation Zadanie Tok postępowania 1. Zmień tryb uwierzytelniania • Uruchom maszynę wirtualną BD2008. — Jako nazwę użytkownika podaj Administrator. — Jako hasło podaj P@ssw0rd. Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku D:\VirtualPC\Dydaktyka\BD2008.vhd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. Studio • Po lewej stronie ekranu w oknie Object Explorer kliknij prawym przyciskiem myszy nazwę nazw serwera (EVALUATION EVALUATION) i z menu kontekstowego wybierz opcję Properties. • W lewej części okna z listy Select a page wybierz Security. Security • Zaznacz opcję SQL Server and Windows Authentication Mode. Mode • Kliknij OK. • Kliknij OK w oknie informującym o tym, że nowe ustawienia wymagają restartu usługi serwera. • Dokonaj restartu maszyny i połącz się ponownie z serwerem SQL. SQL 2. Utwórz loginy • W oknie Object Explorer rozwiń zawartość folderu Security. • Prawym przyciskiem myszy kliknij Logins i z menu kontekstowego wybierz New Login. • W polu Login name wpisz Tomek. • Zaznacz opcję SQL Server authentication. • W polach pola Password i Confirm password wpisz P@ssw0rd. P@ssw0rd • Odznacz opcję o User must change password at next login. login • Kliknij OK. Strona 12/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Rys. 8 Tworzenie nowego loginu 3. Przeprowadź audyt prób logowania • Z menu głównego wybierz File -> New -> Database Engine Query. • W oknie Connect to Database Engine z listy Authentication wybierz SQL Server Authentication. • W polu Login wpisz Tomek, zaś pole Password pozostaw puste. • Kliknij OK. • W oknie komunikatu o nieudanej próbie logowania kliknij OK. • Zamknij okno logowania klikając Cancel. • W oknie Object Explorer rozwiń zawartość folderu Management. • Prawym przyciskiem myszy kliknij SQL Server Logs i wybierz View -> SQL Server and Windows Log. • Przeczytaj informację o nieudanej próbie logowania użytkownika Tomek. • Zamknij okno dziennika systemowego. Rys. 9 Dziennik systemowy SQL Server 2008 • Utwórz jeszcze jeden login w systemie. Po skonfigurowaniu wszystkich opcji loginu (nazwa, hasło, itd.) w górnej części okna wybierz Script. Przyjrzyj się składni polecenia, które pojawi się w oknie edytora. Strona 13/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych 4. Dodaj użytkownika do bazy danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 • • • • • W oknie Object Explorer rozwiń zawartość folderu Databases. Rozwiń zawartość bazy danych PraceDyplomowe. W bazie PraceDyplomowe rozwiń zawartość folderu Security. Prawym przyciskiem myszy kliknij folder Users i wybierz New User. W oknie Database User - New w pola User name i Login name wpisz Tomek (klikając na przycisku z trzema kropkami masz możliwość wyboru istniejącego loginu z listy), a w polu Default schema wpisz Sales. • W górnej części okna kliknij Script. • Kliknij OK i obejrzyj skrypt, który został wygenerowany. Rys. 10 Dodawanie użytkownika do bazy danych 5. Nadaj uprawnienia użytkownikowi • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik Grant.sql i kliknij Open. • Wciśnij F5, aby uruchomić kod. Kod ten nadaje uprawnienia do wykonywania polecenia SELECT na tabeli PracaDyplomowa użytkownikowi Tomek. 6. Wykorzystaj stworzonego użytkownika • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik SelectAsTomek.sql i kliknij Open. • Wciśnij F5, aby uruchomić kod. Wykona on polecenie SELECT jako użytkownik Tomek, któremu odpowiednie uprawnienia nadałeś w kroku 5. Strona 14/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Rys. 11 Wykonanie kodu SQL w kontekście użytkownika Tomek 7. Utwórz właściciela schematu • Z menu głównego wybierz File -> Open -> File. • Odszukaj plik Schema.sql i kliknij Open. • Zaznacz kod, który tworzy użytkownika Janek, będącego właścicielem nowego schematu: USE PraceDyplomowe GO CREATE LOGIN Janek WITH PASSWORD = 'P@ssw0rd' MUST_CHANGE , CHECK_EXPIRATION = ON , CHECK_POLICY = ON GO CREATE USER Janek FOR LOGIN Janek WITH DEFAULT_SCHEMA = dbo GO • Wciśnij F5, by uruchomić zaznaczony kod. Strona 15/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Rys. 12 Tworzenie nowego użytkownika SQL Server 8. Utwórz schemat • Zaznacz i uruchom (F5) poniższy fragment kod, który tworzy schemat NewSchema dla użytkownika Janek, tabelę NewTable w tym schemacie oraz nadaje uprawnienia do wykonywania polecenia SELECT na tabeli użytkownikowi Tomek: --Tworzymy schemat -CREATE SCHEMA NewSchema AUTHORIZATION Janek CREATE TABLE NewTable(col1 int, col2 int) GRANT SELECT ON NewTable TO Tomek GO 9. Uzyskaj dostęp do danych • Zaznacz kod, który przełączy kontekst użytkownika na login John: -- Zmieniamy kontekst (w SQL 2000 - setuser 'John') EXECUTE AS LOGIN = 'John'; • Wciśnij F5, by uruchomić zaznaczony kod. • Zaznacz kod, który wykona próbę dostępu do danych: danych -- Error!!! Nie ma Sales.NewTable ales.NewTable ani dbo.NewTable SELECT * FROM NewTable • Wciśnij F5, by uruchomić zaznaczony kod. Próba wykonania powyższego kodu spowoduje wyświetlenie komunikatu o błędzie, ponieważ nie istnieje obiekt o nazwie Sales.NewTable (Sales to domyślny schemat dla dl użytkownika John) ani obiekt o nazwie dbo.NewTable. • Zaznacz kod, który wykona ponownie próbę dostępu do danych: danych -- Ok. SELECT * FROM NewSchema.NewTable • Wciśnij F5, by uruchomić zaznaczony kod. Powyższy kod zostanie poprawnie wykonany, ponieważ Janek ma uprawnienia do wykonywania operacji na schemacie NewSchema, będąc jego właścicielem. Strona 16/17 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 10 Instalacja i konfiguracja MS SQL Server 2008 Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Stworzenie użytkowników i powiązanie ich z odpowiednimi prawami do danych w bazach firmy National Insurance znacznie zwiększyło poziom bezpieczeństwa systemu bazodanowego. Monitoring dzienników systemowych pokazał, które aplikacje klienckie i którzy użytkownicy sprawiali problemy. Widać było także wyraźne rezultaty zabezpieczeń w postaci odrzuconych nieuprawnionych prób dostępu do danych. Wyniki tych działań zachęciły zarząd firmy do wsparcia dalszych prac nad bezpieczeństwem systemu bazodanowego. Jako główny administrator masz za zadanie zapoznać się z możliwościami szyfrowania danych zawartymi w Microsoft SQL Server 2008 oraz wdrożyć je w firmie. • Zapoznaj się z możliwościami wykorzystania elementów kryptografii w SQL Server 2008 (plik cryptography.sql). • Spróbuj wykorzystać szyfrowanie i certyfikaty cyfrowe do zabezpieczenia poszczególnych tabel bazy danych. Wszystkie eksperymenty mają być dokonywane na bazie PraceDyplomowe. Jako rezultat masz napisać raport zawierający przykłady zastosowania możliwości szyfrowania danych i autoryzacji dostępu do nich. Strona 17/17 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 11 Wersja 1.0 Praca z XML Spis treści Praca z XML .......................................................................................................................................... 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 4 Porady praktyczne ....................................................................................................................... 8 Uwagi dla studenta ...................................................................................................................... 8 Dodatkowe źródła informacji....................................................................................................... 8 Laboratorium podstawowe .................................................................................................................. 9 Problem 1 (czas realizacji 45 min)................................................................................................ 9 Laboratorium rozszerzone ................................................................................................................. 15 Zadanie 1 (czas realizacji 90 min)............................................................................................... 15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Informacje o module Opis modułu Wymiana danych z relacyjnymi bazami danych może być utrudniona ze względu na różnice programowo – sprzętowe itp. Rozwiązaniem jest język XML, który jest niezależny od standardów sprzętowych / programowych. Cel modułu Celem modułu jest zapoznanie się z możliwościami zastosowania języka XML w MS SQL 2008. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • • • • wiedzieć, jak uzyskać dokument XML ze zwykłego wyniku zapytania nauczysz się sterować zapisem danych do dokumentu XML będziesz umiał zapisać informacje z dokumentu XML do bazy danych nauczysz się przeprowadzać walidację danych XML według zadanych schematów • poznasz język XQuery, który umożliwia wykonywanie operacji na danych XML Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • wiedzieć, jak używać oprogramowania Microsoft Virtual PC • znać podstawy obsługi systemu Windows 2000 lub nowszego • znać podstawy obsługi SQL Server Management Studio Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na Rys. 1, istnieje konieczność wykonania wcześniej modułu 3. Rys. 1 Mapa zależności modułu Strona 2/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Przygotowanie teoretyczne Przykładowy problem Firma National Insurance wykupiła niedawno udziały w mniejszej, prężnie działającej firmie informatycznej Miracle. Ponieważ dział IT w Miracle używał innej architektury bazodanowej, nastąpił problem z wymianą danych pomiędzy centralą a nowym oddziałem. Informatycy obydwu oddziałów wpadli na pomysł użycia uniwersalnego języka XML do wymiany danych pomiędzy platformami. Przed podjęciem stosownych działań dyrektor działu IT postanowił sprawdzić, co oferuje system MS SQL Server 2008 w tym zakresie. Podstawy teoretyczne XML (ang. eXtensible Markup Language) jest językiem znaczników (jak HTML), w którym to programista decyduje o tym, jaka będzie struktura znaczników. W ostatnich latach XML zyskał ogromną popularność jako format idealny do wymiany danych między aplikacjami, nośnik konfiguracji aplikacji, format zapisu danych. Znajomość możliwości XML i standardów skojarzonych jest dziś właściwie niezbędna nie tylko w pracy z bazami danych, ale również z technologiami programistycznymi. W dzisiejszym świecie informacja jest przechowywana w różnych formatach. Jednym z dość często spotykanych formatów jest XML. Oznacza to, że system bazodanowy powinny oferować możliwość zapisu w swoich strukturach (w swoich bazach danych) danych przemieszanych ze znacznikami XML. Format danych Każdy system bazodanowy oferuje bogaty zestaw typów danych. Wśród tych typów można znaleźć sporo typów przechowujących tekst. Ponieważ XML jest formatem tekstowym, może być przechowywany jako tekst, ale typ danych, który w bazach danych ma służyć do przechowywania danych XML, powinien charakteryzować się czymś więcej niż tylko możliwością zapisu znaczników i zaszytych w nich informacji. Jedną z podstawowych właściwości dokumentu XML jest wymóg, który mówi, że dokument XML musi posiadać odpowiednią formę. Oznacza to, że: • • • • dokument ma jeden element główny (ang. root), w którym zawarte są pozostałe elementy pojedynczy znacznik nie zawiera dwóch atrybutów o takiej samej nazwie wartości atrybutów powinny znaleźć się w ogranicznikach (cudzysłowy lub apostrofy) znaczniki nie powinny się „zazębiać”. Poniższy listing ilustruje przykładowy fragment poprawnego dokument XML: <panstwa> <panstwo nazwa="Polska"> <stolica>Warszawa</stolica> <obszar>312680</obszar> <ludnosc>38456785</ludnosc> <glowne_miasta>Wrocław</glowne_miasta> <glowne_miasta>Gdańsk</glowne_miasta> <glowne_miasta>Kraków</glowne_miasta> <glowne_miasta>Poznań</glowne_miasta> </panstwo> <panstwo nazwa="Niemcy"> <stolica>Berlin</stolica> <obszar>356910</obszar> <ludnosc>81700000</ludnosc> <glowne_miasta>Monachium</glowne_miasta> </panstwo> Strona 3/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 <panstwo nazwa="Czechy"> <stolica>Praga</stolica> <obszar>78703</obszar> <ludnosc>10300000</ludnosc> </panstwo> </panstwa> Idealny format do przechowywania danych XML powinien zapewniać automatyczną kontrolę poprawności zapisu danych. Walidacja Bardzo często struktura dokumentów XML jest w jednoznaczny sposób określona przy pomocy innych standardów, takich jak XML Schema czy DTD (ang. Document Type Definition). Szczególnie XML Schema jest doskonałym formatem opisującym struktury XML. Idealnie zatem byłoby, gdyby system bazodanowy umożliwiał wykorzystanie standardów walidujących XML do kontroli struktury danych zapisywanych w bazach danych. MS SQL Server 2000 wprowadził możliwość konwersji danych pobieranych z bazy do dokumentu XML oraz danych z tych plików na wiersze bazy danych. Umożliwiają to słowa kluczowe języka Transact-SQL: • FOR XML • OPENXML MS SQL Server 2005 rozszerza możliwości w/w słów kluczowych, dzięki czemu można sterować sposobem tworzenia dokumentu XML (dokładne informacje w dokumentacji do tych poleceń). Dodatkowo umożliwiono tworzenie natywnych typów danych XML pozwalających na tworzenie własnych zmiennych oraz dodawanie kolumn do danych XML. Odpowiedzialne za to jest polecenie CREATE XML SCHEMA COLLECTION (dokumentacja: http://msdn2.microsoft.com/enus/library/ms176009.aspx), a w połączeniu z XQuery (język pozwalający na pisanie zapytań przeszukujących dokumenty XML, dokumentacja: http://msdn2.microsoft.com/enus/library/ms189075(SQL.100).aspx) pozwala na pisanie zapytań do treści XML, których wynik także jest przedstawiony w dokumencie XML. Innym udoskonaleniem jest możliwość nadania indeksów kolumnom typu XML. Pozwala to na zwiększenie ogólnej wydajności. MS SQL 2008 wprowadził dalsze udoskonalenia w zakresie walidacji danych. Dodano możliwość stworzenia schematu który może być dopasowany do dowolnych danych. Dodano słowo kluczowe let do XQuery (podstawy można opanować na bazując na tutorialach: http://www.w3schools.com/xquery/default.asp) dzięki, któremu można przypisywać wartości do zmiennych. Ponadto za pomocą XQuery można wykonywać operacje na danych XML za pomocą insert, replace value of, delete, modify, a MS SQL Server 2008 pozwala na użycie danych XML jako argumentu dla polecenia insert. Przykładowe rozwiązanie Rozpoczynając pracę z plikami XML należy zastanowić się jakie dane będziemy w nich przechowywać. Dane z bazy wybieramy np.: poleceniem SELECT. Aby trafiły one do pliku XML na końcu skryptu SQL należy dopisać sekwencję FOR XML z odpowiednimi parametrami. Przykładowo, wybierając dane z tabeli Customers utworzenie pliku XML zapewni nam sekwencja FOR XML RAW('Customer'), ELEMENTS, ROOT Po uruchomieniu takiego kodu w Management Studio jako rezultat pojawi nam się odnośnik do pliku XML tak jak pokazano na Rys. 2: Strona 4/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Rys. 2 Generowanie kodu XML W tym momencie uzyskaliśmy wynik zapytania w postaci dokumentu XML. Klikając na odnośnik możemy obejrzeć strukturę pliku a następnie zapisać go jako zwykły plik systemowy. Znając podstawy języka XML łatwo wprowadzać modyfikacje i rozbudowywać tego typu pliki nawet poza środowiskiem bazodanowym. Wystarczy dysponować dowolnym edytorem testu. Rys. 3 Wyświetlenie kodu XML Pracując z plikami XML zawsze należy zwracać uwagę na sposób kodowania znaków. Warto wymusić odpowiednie kodowanie umieszczając na początku pliku następującą sekwencję <?xml version="1.0" encoding="utf-16"?> Co prawda same polecenia XML nie zawierają w swojej strukturze znaków narodowych ale dane pojawiające się w plikach przeważnie takie posiadają. Aby uniknąć przekłamań rozsądnie rozpocząć plik XML tak jak pokazano na rys 4. Strona 5/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Rys. 4 Dodanie tagu kodowania W tym momencie posiadamy pełnowartościowy plik XML zawierający dane z naszej bazy. Tak uzyskane dane można z łatwością przenieść do innej bazy danych np. MySql, ponieważ zostały zapisane w uniwersalnym formacie (należy jedynie pamiętać o odpowiednim kodowaniu kodowa znaków). Isnieje możliwość wyeksportowania do pliku XML bardziej złożonych danych. Poniższy kod SQL wybierze wszystkie zamówienia, których ID_Klienta jest równe "ALFKI". declare @CustomerID nchar(5) select @CustomerID = 'ALFKI' SELECT 1 as Tag, NULL as Parent, CustomerID as [Customer!1!customerid], ContactName as [Customer!1], NULL as [Order!2!orderid], NULL as [Order!2] FROM Customers where Customers.CustomerID = @CustomerID UNION SELECT 2 as tag, 1 as parent, Customers.CustomerID, Customers.ContactName, Orders.OrderID, Orders.ShipAddress FROM Customers, Orders WHERE (Customers.CustomerID = @CustomerID) AND (Customers.CustomerID = Orders.CustomerID) FOR XML EXPLICIT Możemyy więc jasno i precyzyjnie określi interesujący nas zakres danych, który będzie wyeksportowany z systemu bazodanowego. Porównaj działanie polecenia FOR XML z atrybutami RAW, AUTO oraz PATH oraz atrybutami ELEMENTS, ROOT (oraz bez tych opcji) i innymi zgodnie z dokumentacją na: http://msdn2.microsoft.com/en http://msdn2.microsoft.com/en-us/library/ms173812.aspx Posiadając gotowy plik XML zawierający dane wyeksportowane z systemu bazodanowego możemy może w prosty sposób wczytać te dane do swojej bazy. W tym tym celu należy posłużyć się zmiennymi T-SQL T typu XML i wczytać do tak zadeklarowanej zmiennej dane ze wskazanego pliku. Taką operację wykonuje przykładowy kod SQL: DECLARE @xmlDoc XML SET @xmlDoc = ( SELECT * FROM OPENROWSET ( BULK 'C:\pliczek.xml', 'C: .xml', CODEPAGE='utf-16', CODEPA SINGLE_NCLOB ) AS xmlData) SELECT @xmlDoc Strona 6/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Wynikiem jest wczytana treść wcześniej utworzonego pliku, znajdująca się w jednej kolumnie typu XML co ilustruje rysunek 5. Rys. 5 Wczytanie pliku XML W operowaniu na danych XML pomocny jest XQuery,, czyli język zapytań właśnie dla tego typu dokumentów. Do tej pory jedynie wyświetlaliśmy zawartość wczytanego pliku XML. Nic nie stoi na przeszkodzie aby za pomocą pliku mapującego dokonać jego zapisu w odpowiedniej wiedniej tabeli bazy danych. Plik mapujący odzwierciedla dane z pliku XML na tabele w przykładowej bazie Northwind: <?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns="urn:schemas xmlns:dt="urn:schemas xmlns:dt="urn:schemas-microsoft-com:xml:datatypes" xmlns:sql="urn:schemas xmlns:sql="urn:schemas-microsoft-com:xml-sql" > <ElementType name="CustomerID" dt:type="string" /> <ElementType name="CompanyName" dt:type="string" /> <ElementType name="City" dt:type="string" /> <ElementType name="ROOT" sql:is-constant="1"> sql:is <element type="Customer" /> </ElementType> <ElementType name="Customer" sql:relation="Customers"> <element type="CustomerID" sql:field="CustomerId" /> <element type="CompanyName" sql:field="CompanyName" /> <element type="City" sql:field="City" /> </ElementType> </Schema> Pozostaje nam tylko stworzyć odpowiedni skrypt Visual Basic, który ry zrealizuje wstawianie danych do bazy według zadanego wcześniej schematu: Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad") objBL.ConnectionString = "Provider=SQLOLEDB;Data "Provider=SQLOLEDB;Data Source=EVALUATION;Initial Catalog=Northwind;Integrated Security=SSPI;" objBL.ErrorLogFile = "c:\error.log" "c: objBL.Execute "c:\customersmapping.xml", customersmapping.xml", "c:\customers.xml" "c: Set objBL = Nothing Skrypt połączy się z naszym serwerem bazodanowym a następnie wykona zapytania zapy SQL zgodnie z plikami XML co ilustruje rysunek 6. Strona 7/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Rys. 6 Wynik zapytania do bazy po aktualizacji danych Porady praktyczne Praca z plikami XML może być wydajna i przyjemna. Warto jednak zaznaczyć, że szczególnie początkujący użytkownicy mogą popełniać drobne, ale męczące błędy związane głównie z nieścisłościami w nazewnictwie: • Zawsze sprawdzaj poprawność nazw wszelkich plików i ich ścieżek dostępu. Często niemożność zlokalizowania pliku skutkuje komunikatami o innych błędach. • Poprawne określenie kodowania zapobiega przekłamaniom w obróbce danych. Czasami złe kodowanie w ogóle wyklucza wykonanie danej operacji. • Dowiedź się nieco więcej o podstawach programowania w VBscript. Jest to bardzo prosty, obiektowy język programowania, wykorzystywany w budowie skryptów. • Czytaj uważnie dziennik błędów. W większości przypadków dziennik wskazuje na poprawne rozwiązanie problemu. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • • • • rozumiesz, czym różni się język XML od HTML rozumiesz zasadę działania struktury XML Schema umiesz zdefiniować przykładową strukturę pliku XML umiesz podać przykład zastosowania narzędzia XQuery. Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. William R. Stanek, Microsoft XML – Vademecum, Microsoft Press, 2002 2. Elizabeth Castro, Po prostu XML, Helion, 2001 3. Priscilla Walmsley, Wszystko o XML Schema, WNT, 2007 4. Przemysław Kozienko, Krzysztof Gwiazda, XML na poważnie, Helion, 2002 5. Scott Short , Zastosowanie XML do tworzenia usług internetowych na platformie Microsoft .NET, Microsoft Press 2003 Strona 8/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Laboratorium podstawowe Problem 1 (czas realizacji 45 min) Jesteś administratorem systemu bazodanowego w firmie National Insurance. Twój szef zlecił Ci rozpoznanie możliwości płynących z użycia języka XML w systemie MS SQL Server 2008. W pierwszej kolejności postanowiłeś użyć narzędzi dostępnych w systemie na roboczym serwerze Evaluation i sprawdzonej bazie danych Northwind. Zadanie Tok postępowania 1. Nawiązywanie połączenia z SQL Server 2008 • Zaloguj się do maszyny wirtualnej BD jako użytkownik Administrator z hasłem P@ssw0rd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. • W oknie logowania kliknij Connect. 2. Wygenerowan ie pliku XML na podstawie danych z bazy • W oknie Object Explorer rozwiń listę tabel bazy danych Northwind -> Databases -> Tables. • Kliknij prawym klawiszem myszki tabelę Customers i wybierz opcję Select Top 1000 Rows. Rys. 7 Wybieranie danych z bazy Northwind • W okienku, które się pokaże, zamień wartość 1000 na 10 (nie potrzeba tyle danych do testów), a na samym końcu skryptu dopisz: FOR XML RAW('Customer'), ELEMENTS, ROOT • wykonaj zapytanie klikając przycisk Execute. Strona 9/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Rys. 8 Generowanie kodu XML • Kliknij na odnośnik <Root><Customer>… w celu otwarcia okna z kodem XML. Rys. 9 Wyświetlenie kodu XML • zapisz ten wynik do pliku: c:\customers.xml klikając na menu File->Save As. • Możesz otworzyć plik w przeglądarce, aby zobaczyć jego strukturę, jednak zanim to zrobisz, dopisz na samym początku, najlepiej w edytorze w MS SQL, następującą linię: <?xml version="1.0" encoding="utf-16"?> Strona 10/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Rys. 10 Dodanie tagu kodowania • zamknij zamkni utworzone zapytania w głównym oknie Management Studio 3. Wczytanie danych XML do MS SQL • Kliknij przycisk NewQuery. • Wpisz następujący kod SQL do nowego okna zapytania: DECLARE @xmlDoc XML SET @xmlDoc = ( SELECT * FROM OPENROWSET ( BULK 'C: 'C:\customers.xml', CODEPAGE='utf-16', 16', SINGLE_NCLOB ) AS xmlData) SELECT @xmlDoc • Kliknij przycisk Execute. Rys. 11 Wczytanie pliku XML Jeśli nie można wczytać pliku albo na początku treści pojawiają się tzw. „krzaczki”, to proszę się cofnąć do momentu zapisu i zamiast przez edytor z MSSQL, proszę zapisać metodą kopiowania i wklejania treści dokumentu XML do notatnika 4. Odczyt danych XML - poruszanie się po drzewie danych W operowaniu na danych XML pomocny jest XQuery, czyli język zapytań właśnie dla tego typu dokumentów. • Zmień zapytanie SQL z poprzedniego zadania na następujące: DECLARE @xmlDoc XML SET @xmlDoc = ( SELECT * FROM OPENROWSET ( BULK 'C: 'C:\customers.xml', CODEPAGE='utf-16', 16', SINGLE_NCLOB ) AS xmlData) SELECT @xmlDoc.query( '<Customers> Strona 11/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 { for $i in /root/Customer where $i/Country="Mexico" return <Order> {$i/CompanyName} </Order> } </Customers>' ) • Uruchom zapytanie klikając przycisk Execute. • Kliknij na odnośnik do kodu XML. Rys. 12 Generowanie kodu XML 5. Eksport wybranych danych do pliku XML • Kliknij przycisk NewQuery. • W nowym oknie wpisz następujący kod SQL: use Northwind declare @CustomerID nchar(5) select @CustomerID = 'ALFKI' SELECT 1 as Tag, NULL as Parent, CustomerID as [Customer!1!customerid], ContactName as [Customer!1], NULL as [Order!2!orderid], NULL as [Order!2] FROM Customers where Customers.CustomerID = @CustomerID UNION SELECT 2 as tag, 1 as parent, Customers.CustomerID, Customers.ContactName, Orders.OrderID, Orders.ShipAddress FROM Customers, Orders WHERE (Customers.CustomerID = @CustomerID) AND (Customers.CustomerID = Orders.CustomerID) FOR XML EXPLICIT • Kliknij na nowy odnośnik do kodu XML. • Dodaj w pierwszej linijce pliku określenie kodowania znaków: <?xml version="1.0" encoding="unicode"?> Strona 12/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Rys. 13 Dodanie tagu kodowania znaków • Kliknij na menu File->Save As. • Zapisz kod XML do pliku C:\explicit.xml. W następnym kroku wczytasz wcześniej zapisany plik explicit.xml i uruchomisz zapytanie SQL zliczające ilość wystąpień tagu Order, każdego elementu Customer: • Kliknij przycisk NewQuery. • W nowym oknie wpisz następujący następują kod SQL: DECLARE @xmlDoc XML SET @xmlDoc = ( SELECT * FROM OPENROWSET ( BULK 'C:\Documents 'C: and Settings Settings\Administrator\Desktop\explicit.xml', explicit.xml', CODEPAGE='unicode', SINGLE_NCLOB ) AS xmlData) SELECT @xmlDoc SELECT @xmlDoc.query( '<Orders> { for $i in /Customer /Custo let $count :=count($i/Order) return <OrdersNumber> {$i/Customer} <ItemCount>{$count}</ItemCount> </OrdersNumber> } </Orders>') • Kliknij na nowy odnośnik do kodu XML. XML Rys. 14 Wyświetlenie wyników z kodu XML 6. Zapisanie wczytanych danych XML do tabeli za pomocą pliku mapującego • Kliknij menu START->Programs->Accessories->Notepad >Notepad. • Wpisz w oknie notatnika następujący kod XML, w którym znajdować się będą informacje, które chcemy zapisać w bazie: <?xml version="1.0" encoding="unicode"?> <root> <Customer> <CustomerID>Test</CustomerID> <CompanyName>Teeest</CompanyName> <City>Warsaw</City> </Customer> </root> • Zapisz plik pod nazwą c:\customers.xml. Strona 13/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 • W oknie notatnika kliknij menu File->New. • Wpisz następujący kod XML, który odzwierciedla dane z pliku XML na tabele w bazie Northwind: <?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:xml:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql" > <ElementType name="CustomerID" dt:type="string" /> <ElementType name="CompanyName" dt:type="string" /> <ElementType name="City" dt:type="string" /> <ElementType name="ROOT" sql:is-constant="1"> <element type="Customer" /> </ElementType> <ElementType name="Customer" sql:relation="Customers"> <element type="CustomerID" sql:field="CustomerId" /> <element type="CompanyName" sql:field="CompanyName" /> <element type="City" sql:field="City" /> </ElementType> </Schema> • Zapisz plik pod nazwą c:\customersmapping.xml. • W oknie notatnika kliknij menu File->New. • Wpisz następujący skrypt Visual Basic, który zrealizuje wstawianie danych do bazy według zadanego wcześniej schematu: Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad") objBL.ConnectionString = "Provider=SQLOLEDB;Data Source=EVALUATION;Initial Catalog=Northwind;Integrated Security=SSPI;" objBL.ErrorLogFile = "c:\error.log" objBL.Execute "c:\customersmapping.xml", "c:\customers.xml" Set objBL = Nothing • Zapisz plik pod nazwą c:\ Insertcustomers.vbs. • Przejdź na dysk lokalny C: i uruchom plik Insertcustomers.vbs. Rys. 15 Wynik zapytania do bazy po aktualizacji danych Możesz sprawdzić za pomocą SQL Management Studio->Object Explorer, czy rzeczywiście zaszły zmiany w tabeli Customers bazy Northwind. Strona 14/15 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 11 Instalacja i konfiguracja MS SQL Server 2008 Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Zapoznałeś się z podstawami obsługi języka XML w firmowym systemie bazodanowym. Postanowiłeś wykorzystać zdobytą wiedzę do przeniesienia danych z bazy PraceDyplomowe znajdującej się w centrali do bazy w nowym oddziale firmy. Zanim jednak dane trafią do oddziału, będziesz chciał zweryfikować poprawność zapisu w plikach XML: • Utwórz skrypty SQL zapisujące do plików XML jak najwięcej informacji z bazy danych PraceDyplomowe • Utwór nową, roboczą bazę PraceDyplomowe_TEMP • Odzyskaj zapisane dane do bazy PraceDyplomowe_TEMP za pomocą odpowiedniego skryptu Visual Basic. Zapisz swoje uwagi w pliku raportu i przedyskutuj z innymi zespołami. Strona 15/15 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 12 Wersja 1.0 Praca z Reporting Services Spis treści Praca z Reporting Services ................................................................................................................... 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 6 Porady praktyczne ..................................................................................................................... 12 Uwagi dla studenta .................................................................................................................... 12 Dodatkowe źródła informacji..................................................................................................... 13 Laboratorium podstawowe ................................................................................................................ 14 Problem 1 (czas realizacji 45 min).............................................................................................. 14 Laboratorium rozszerzone ................................................................................................................. 24 Zadanie 1 (czas realizacji 90 min)............................................................................................... 24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Informacje o module Opis modułu Aby osiągnąć sukces na dzisiejszym, konkurencyjnym rynku, przedsiębiorstwa gromadzące duże ilości danych powinny wprowadzić rozwiązania biznesowe działające w czasie rzeczywistym zapewniające bezproblemową, skuteczną wymianę informacji pomiędzy własnymi oddziałami, swoimi partnerami, a także klientami. Microsoft SQL Server Reporting Services jest rozwiązaniem, które pozwala szybko i komfortowo dzielić i udostępniać dane biznesowe, przy niższych nakładach rozmaitych zasobów. Cel modułu Celem modułu jest zapoznanie się z podstawową funkcjonalnością systemu raportowania w MS SQL Server 2008. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • poznasz podstawy MS SQL Server Reporting Services • dowiesz się, jak zainstalować narzędzie MS SQL Server Reporting Services • nauczysz się, jak wykorzystywać MS SQL Server Reporting Services do tworzenia raportów Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • wiedzieć jak używać oprogramowania Microsoft Virtual PC • znać podstawy obsługi systemu Windows 2000 lub nowszego • znać podstawy obsługi SQL Management Studio Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na Rys. 1, istnieje konieczność wykonania wcześniej modułu 3. Rys. 1 Mapa zależności modułu Strona 2/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Przygotowanie teoretyczne Przykładowy problem W firmie National Insurance dyrektor działu marketingu został poproszony o przygotowanie akcji marketingowej skierowanej do klientów firmy. Liczba klientów w bazie danych wynosi około miliona osób, a koszt dotarcia do każdego klienta – 10 PLN. Akcja dotyczy luksusowego produktu, którym zainteresowani mogą być wybrani klienci. Jesteś specjalistą analitykiem w dziale IT i masz dostęp do bazy danych firmy. Administrator nowego serwera MS SQL Server wskazał na interesującą usługę o nazwie Reporting Services, pozwalającą w ciekawy i wygodny sposób przedstawiać dane pobierane z bazy. Postanowiłeś zapoznać się z nową usługą. Podstawy teoretyczne MS SQL Server Reporting Services jest platformą raportującą, która używana jest do zarządzania tabelarycznymi, macierzowymi lub innymi raportami zawierającymi dane z wielowymiarowych źródeł. Raporty tworzone za pomocą MS SQL Server Reporting Services mogą być udostępniane i zarządzane przez sieć WWW. Podstawowe komponenty MS SQL Server Reporting Services to: • pełny zestaw narzędzi do tworzenia, zarządzania i udostępniania raportów • serwer raportujący (ang. Report Server) udostępniający i przetwarzający raporty w wielu formatach danych (np. HTML, PDF, TIFF, Excel, CSV, etc.) • API, za pomocą, którego programiści i deweloperzy mogą rozszerzyć, zintegrować (dane i przetwarzanie raportów) oraz utworzyć aplikacje do zarządzania raportami. Dane źródłowe dla raportów tworzonych za pomocą MS SQL Server Reporting Services mogą pochodzić z relacyjnych lub wielowymiarowych zbiorów danych. Ich dostawcą może być SQL Server, Analysis Services, Oracle lub inny dostawca danych, taki jak ODBC lub OLE DB. Raporty mogą mieć postać tabelaryczną, macierzową lub dowolną inną, można też tworzyć raporty ad-hoc (przy wykorzystaniu predefiniowanych modeli). Swoją funkcjonalnością i metodami wizualizacji MS SQL Server Reporting Services przewyższa dotychczasowe rozwiązania raportowe, między innymi dzięki opartej na sieci WWW wizualizacji. W dalszej części przyjrzymy się podstawowym cechom MS SQL Server Reporting Services. Raporty • Dane źródłowe w postaci relacyjnej, wielowymiarowej, a także XML – dane do raportów mogą być dostarczone przez MS SQL Server, Analysis Services, Oracle (poprzez .NET Framework), ODBC, OLE DB, a także ze zbiorów zapisanych w formacie XML. • Raporty mogą być prezentowane za pomocą rozmaitych rozkładów, takich jak tabele (np. dla danych kolumnowych), macierze (np. dla danych streszczonych), wszelakie wykresy (dane prezentowane graficznie), a także rozkład dowolny, oparty na dowolnie ustawianych kontrolkach i polach wewnątrz kontenera. W razie potrzeby możliwe jest połączenie różnych rozkładów w jednym raporcie. • Raporty typu ad-hoc – istnieje możliwość tworzenia i zapisywania raportów bezpośrednio na serwerze raportującym za pomocą aplikacji ClickOnce (Report Builder). Raporty ad-hoc wykonywane są poprzez klienta ściąganego z serwer raportującego. • Udoskonalone przeglądanie raportów – istnieje możliwość dodania interaktywnych elementów (np. linki), zapewniających dostęp do spokrewnionych raportów, a także do raportów bardziej szczegółowych. Do raportów można także dodać skrypty napisane w języku Visual Basic. • Parametryzacja raportów – istnieje możliwość dodawania parametrów do raportów, żeby uszczegółowić zapytanie lub przefiltrować zbiór danych. Parametry dynamiczne pobierają wartości w czasie wykonywania na podstawie wyboru użytkownika. Strona 3/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 • Możliwość prezentacji danych w wielu formatach – format prezentacji może być zmieniany w trakcie oglądania raportu. Dostępne formaty: HTML, MHTML, PDF, XML, CSV, TIFF oraz Excel. • Dodatkowe kontrolki – funkcjonalność Reporting Services można rozszerzać za pomocą dodatkowych kontrolek dostarczanych przez formy trzecie Dodatkowe kontrolki wymagają specjalnego rozszerzenia przetwarzającego dane. • Nawigacja – istnieje możliwość dodawania zakładek oraz map do większych raportów, by ułatwić poruszanie się po nich. • Agregacja danych – dane mogę być łączone i streszczane za pomocą kontrolek i wyrażeń. Dostępne operacje to m.in. suma, średnia, min, max i wiele innych. • Elementy graficzne – do raportów można dodawać rozmaite elementy graficzne. Projektowanie raportów i modeli • Projektowanie raportów – tworzenie raportów za pomocą rozbudowanej aplikacji dostarczanej wraz z Business Intelligence Development Studio. Aplikacja ta niesamowicie ułatwia proces tworzenia raportów poprzez m.in. definiowanie rozkładu, publikowanie raportu, generator zapytań oraz wiele innych, a wszystko to może być wykonywane krok po kroku. • Projektowanie modeli – narzędzie to umożliwia definiowanie wzorców/modeli do automatycznego generowania raportów w trybie ad-hoc. • Generator raportów – generator raportów umożliwia tworzenie raportów w trybie ad-hoc opartych na wcześniej zdefiniowanych modelach. Udostępnianie i administracja • Konfiguracja Raporting Services – udostępnianie i utrzymywanie serwera raportującego za pomocą graficznego interfejsu użytkownika, używanego między innymi do konfiguracji kont, wirtualnych, folderów, kluczy szyfrowania. • Zarządca raportów – za pomocą zarządcy raportów można nadzorować m.in. tworzenie raportów, historie raportów oraz ustalać limity na najróżniejsze parametry, takie jak np. czas przetwarzania. • Integracja Raporting Services z SQL Server Management Studio, SQL Server Configuration Manager oraz narzędziami Surface Area Configuration. • Możliwość zarządzania serwerem z poziomu linii komend. • Użytkownicy serwera przypisani są do ról z których każda ma wyznaczone uprawnienia i prawa dostępu. Poziom bezpieczeństwa serwera wzrasta. Dostęp do raportów i ich dostarczanie: • • • • Możliwość dostępu poprzez sieć WWW za pomocą zwykłej przeglądarki internetowej. Możliwość integracji Reporting Services z Microsoft SharePoint Portal. Możliwość przechowywania raportów i zarządzania nimi we własnej przestrzeni pracy. Reporting Services umożliwia ustawienie subskrypcji, za pomocą której raport będzie trafiał na adres e-mail jako załącznik lub link do strony. Format raportu może być dowolnie definiowany. Programowanie i rozszerzalność: • Report Definition Language (RDL) – RDL opisuje wszystkie możliwe elementy raportu za pomocą języka XML. Zachowanie każdego raportu w czasie wykonywania jest zdefiniowane w specjalnym pliku XML. RDL jest językiem rozszerzalnym, można do niego dodawać własne definicje. • SOAP API – możliwość dostępu do Reporting Services z poziomu napisanej przez siebie aplikacji. Strona 4/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 • Dostęp URL – każdy element raportu może mieć własny adres URL i być osiągalny bezpośrednio z sieci. • WMI – Reporting Services zawiera własnego dostawcę WMI, za pomocą którego można zarządzać serwisem Report Server Windows. Przypadki użycia Reporting Services • Raporty biznesowe – wiele przedsiębiorstw używa oprogramowania raportującego dystrybuując informację do użytkowników, którzy zajmują się podejmowaniem decyzji (np. wynajdywanie nowych możliwości czy analiza zagrożeń). Reporting Services zawiera całe spektrum gotowych do użycia narzędzi, za pomocą których można utworzyć, udostępnić, a także zarządzać raportami w danej organizacji. Narzędzie administracyjne i autoryzacyjne zawierają: Report Designer, SQL Server Management Studio, Report Manager oraz Reporting Services Configuration. Użytkownicy biznesowi mogą używać Report Manager, SharePoint, a także zwykłej przeglądarki internetowej, żeby oglądać raporty na żądanie lub dokonać subskrypcji raportów tak, aby były dostarczane wprost do skrzynki poczty elekronicznej. • Raporty ad-hoc – użytkownicy, którzy pracują z danymi biznesowymi często potrzebują możliwości utworzenia lub zmiany raportu „na szybko”. Reporting Services ma wbudowany generator raportów, specjalne narzędzie za pomocą którego można wybrać wzorzec i model raportu, przeciągnąć pola danych i elementy graficzne na projekt raportu, utworzyć podstawowy raport i całość zapisać na serwerze. Raporty typu ad-hoc wymagają specjalnych predefiniowanych modeli, utworzonych w generatorze modeli, a następnie zapisanych na serwerze do dalszego wykorzystania. • Wbudowane raporty – istnieje możliwość wykorzystania Reporting Services, aby w napisanej przez siebie aplikacji zapewnić mechanizmy raportowania. Aby było to możliwe, należy użyć generatora raportów do stworzenia raportu dla danych dostępnych publicznie lub z aplikacji, a następnie za pomocą API zdefiniować dostępność i zachowanie wszystkich elementów raportu, który ma być załączony do tworzonej aplikacji. Jako fragment aplikacji należy umieścić bazę danych, na której zbudowany został raport, oraz inne konieczne metadane. W czasie wykonywania aplikacji jej kod wywołuje Report Server Web Service, poprzez który otrzymuje się dane dotyczące raportu. Jeśli tworzona aplikacja nie wymaga pełnej funkcjonalności, do przeglądania raportu można wykorzystać zwykła kontrolkę RaportViewer dostępną w Visual Studio 2005. • Integrowanie raportów – ponieważ raporty często prezentują dane z wielu źródeł, bardzo użyteczne jest integrowanie wielu źródeł danych na jednym raporcie. Dlatego zamiast wykonywać nowy raport dla każdego źródła danych często dużo bardziej użyteczne jest dodawanie danych do jednego raportu i wyświetlanie ich za pomocą zestawu kontrolek i elementów graficznych. • Raportowanie przez WWW – dla pracowników, którzy nie pracują w centrali, ale np. w biurach regionalnych, można udostępniać raporty poprzez sieć WWW, ale należy wtedy zwrócić szczególną uwagę na bezpieczeństwo. • Dostosowywanie środowiska Reporting Services do własnych wymagań – narzędzie i aplikacje domyślnie dostarczane z Reporting Services są oparte na interfejsie programistycznym i dostępne dla wszystkich użytkowników. Oznacza to, że domyślnie dostarczone narzędzie można zastąpić dowolnymi innymi, dostępnymi lub napisanymi przez samego siebie. Do tego właśnie celu służy WMI Reporting Services. • Rozszerzanie dostępnej funkcjonalności – Reporting Services zostało zaprojektowane tak, by można było je dowolnie rozszerzać. Istnieje możliwość tworzenia własnych rozszerzeń dla wsparcia dodatkowych typów źródeł danych, dostarczanie raportów, a także ich bezpieczeństwa. Złożoność procesu tworzenia dodatkowych rozszerzeń zależy głównie od stopnia skomplikowania danego rozszerzenia, a także jego funkcjonalności. Więcej na ten temat można dowiedzieć się sięgając do dokumentacji RDL. Strona 5/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Przykładowe rozwiązanie W pierwszej kolejności należy stworzyć nowy raport odpowiedniego typu. Najwygodniej posłużyć się nowym narzędziem serwera 2008 o nazwie Business Intelligence Development Studio. Wybieramy projekt o typie Report Server zgodnie z rysunkiem 2. Rys. 2 Tworzenie nowego projektu raportu Kolejnym krokiem jest określenie źródła danych dla naszego raportu. Możemy skorzystać z dowolnych źródeł dostępnych w naszym systemie bazodanowym. W typowej sytuacji źródłem będzie baza danych umieszczona na firmowym serwerze SQL. Tutaj także doprecyzowujemy zakres danych poprzez podanie odpowiedniego zapytania SQL typu SELECT. Rys. 3 Wskazanie serwera SQL jako źródła danych Po utworzeniu połączenia z bazą danych możemy przystąpić do modelowania wizualnego wyglądu raportu. Jak pokazano na rysunku 4 metodą ‘przeciągnij i upuść’ przesuwamy interesujące nas pola do głównego okna programu. Strona 6/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 4 Modelowanie raportu Oczywiście najważniejsze są pola reprezentujące poszczególne kolumny danych z bazy. Stanowią one trzon raportu, ich wybór musi być przemyślany. Rys. 5 Ustalanie nazw i zawartości kolumn raportu W każdej chwili możemy podejżeć jak w danym momecie będzie wyglądał nasz raport od strony odbiorcy. Jest to przydatne szczególnie wówczaj, gdy testujemy różne pomysły na prezentację strony graficznej raportu. Rysunek 6 ilustruje podgląd prostego raportu we wczesnej fazie konstrukcji. Strona 7/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 6 Podgląd gotowego raportu Podczas projektowania raportu dodajemy i modyfikujemy kolumny i wiersze z danymi. Rozbudowa raportu w Business Intelligence Studio jest bardzo intuicyjna i szybka. Na tym etapie projektowanie można porównać do konstrukcji arkusza danych w arkuszu kalkulacyjnym. Rys. 7 Dodawanie kolumn do raportu Każde z dodanych pól reprezentuje grupę danych z bazy. Grupę tą można dowolnie zmieniać poddawać przekształceniom zaglądając do właściwości danego pola. Rysunek 8 ilustruje właściwości pola Nazwisko, które odwołuje się do odpowiedniego atrybutu wskazanej tabeli w bazie danych PraceDyplomowe. Strona 8/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 8 Ustalanie zawartości nowych kolumn Właściwości danego pola nie tylko wskazują skojarzone źródło danych ale także pozwalają na rozbudowaną manipulację tymi danymi. Konwersja, wyliczanie, zmiana wyglądu czy formatu wyświetlania danych dokonywana jest poprzez wpisanie (lub wybranie z menu kontekstowego) odpowiedniego wyrażenia w polu Expression. Przykładowo zastosowanie agregacji uśredniającej dane z powiązanej bazy ilustruje rysunek 9. Strona 9/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 9 Dodanie funkcji agregującej do nowego pola raportu Zmiana formatu wyświetlania daty także nie jest sprawą skomplikowaną. Odpowiednie wyrażenie można zbudować poprzez kilka kliknięć myszką. Strona 10/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 10 Ustalanie formatu wyświetlania daty w polu raportu Po ustaleniu wszystkich pól i ich właściwości nadeszla pora do publikacji publikacji raportu dla właściwych odbiorców. Publikacja przebiega w dwóch etapach: generowanie finalnej wersji raportu oraz przesłanie go na wskazany serwer WWW. Serwer stron WWW musi być wcześniej przygotowany (a z pewnością musimy posiadać na nim odpowiednie uprawnienia uprawnienia do zamieszczania kodu HTML). Adres URL serwera należy podać w polu TargetServerURL w narzędziu Business Intelligence Studio. Wygodniej i zapobiegliwej jest jednak dokonać tego wraz z konfiguracją całego serwera raportującego używając Reporting Services S Configuration Manager z grupy SQL Server 2008. Jak pokazano na rysunku 11 1 Gotowy raport możemy obejżeć w dowolnej przeglądarce stron WWW. Strona 11/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 11 Podgląd strony WWW z raportem Porady praktyczne • W niektórych systemach usługa raportowania nie jest standardowo zainstalowana z MS SQL Server. Dodaj tę usługę osobno lub poproś administratora systemu o doinstalowanie. • Przed przystąpieniem do pracy z serwerem raportującym upewnij się, że usługa Reporting Services jest włączona w systemie. Unikniesz dzięki temu długiego szukania przyczyn odmowy generowania raportu. • Dla często generowanych typów raportów stwórz swoją bazę szablonów raportów. Znajdować się w niej będą raporty obejmujące swoim zakresem najczęstsze zapytania do bazy. Zawsze będą pod ręką, a ich modyfikacja jest bardzo łatwa. • Jeżeli nie potrafisz szybko stworzyć zapytania SQL, posłuż się graficznym narzędziem do konstrukcji zapytań. Aby go użyć, jako połączenie z serwerem SQL wybierz ODBC. • Upewnij się, że posiadasz dostęp do konta uprawnionego do publikacji raportów na serwerze WWW. Bez tych praw będziesz mógł tylko podejrzeć raporty w narzędziu Bussines Intelligence Development Studio. • Zadbaj o dostępność odpowiednio przygotowanego serwera WWW. Serwer taki powinien być dostępny z punktu widzenia narzędzia raportującego oraz widoczny dla Twoich odbiorców raportów. Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • • • • rozumiesz, co oznacza budowa raportu typu ad-hoc rozumiesz zasadę działania generowania raportu na serwerze WWW umiesz zdefiniować rolę języka RDL umiesz podać przykład serwisów, z którymi Reporting Server dobrze się integruje. Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Strona 12/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Dodatkowe źródła informacji 1. Stacia Misner, Hitachi Consulting, Microsoft SQL Server 2005 Reporting Services krok po kroku, Microsoft Press, 2006 2. William R. Stanek, Vademecum Administratora Microsoft SQL Server 2005, Microsoft Press, 2006 3. Sikha Saha Bagui, Richard Walsh Earp, Business SQL dla SQL Server 2005. Wprowadzenie, O’Reilly, 2007 4. http://www.wss.pl Strona 13/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Laboratorium podstawowe Problem 1 (czas realizacji 45 min) Administrator systemu bazodanowego nadał ci odpowiednie prawa do testowego serwera bazodanowego o nazwie Evaluation. Wskazał też bazę danych PraceDyplomowe jako źródło danych, które zazwyczaj wykorzystuje do eksperymentów. Postanowiłeś użyć Reporting Services do wydobycia i prezentacji danych z bazy PraceDyplomowe. Zadanie Tok postępowania 1. Nawiązywanie połączenia z SQL Server 2008 • Zaloguj się do maszyny wirtualnej BD jako użytkownik Administrator z hasłem P@ssw0rd. • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Management Studio. • W oknie logowania kliknij Connect. 2. Tworzenie nowego raportu • Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom SQL Server Business Intelligence Development Studio. • Z menu wybierz File -> New -> Project. • W oknie New Project wybierz Report Server Project. • Wprowadź w polu Name nazwę projektu BD2008. • Kliknij przycisk OK. • W oknie Solution Explorer kliknij prawym klawiszem myszy na Reports > Add -> New item. • W oknie Add new item wybierz Report, a następnie wprowadź nazwę raportu: RS_Raport1.rdl. • kliknij Add. • Następnie należy utworzyć połączenie z bazą. W oknie Report Data wybierz z menu New -> Dataset. • W oknie Dataset Properties w polu Name wpisz PraceDyplomowe, Rys. 12 Tworzenie nowego zbioru danych dla raportu • • • • kliknij przycisk New. W oknie Data Source Properties w polu Name wpisz PraceDyplomowe. wybierz Type -> Microsoft SQL Server. kliknij przycisk Edit. Strona 14/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 13 Wskaznie serwera SQL jako źródła danych • W oknie Connection Properties/Server Name wybierz nazwę serwera, na którym zainstalowana jest baza danych (EVALUATION). • W polu Select or enter database name wybierz bazę PraceDyplomowe. Rys. 14 Wskazanie bazy danych jako źródła danych • Zatwierdź klikając przycisk OK, a następnie raz jeszcze OK. • W oknie Dataset Properties w polu Query wprowadź zapytanie SQL do bazy danych: SELECT Osoba.Imie, PracaDyplomowa.Temat, Osoba.Nazwisko, PracaDyplomowa.Data, PracaDyplomowa.Ocena FROM Osoba INNER JOIN PracaDyplomowa ON Osoba.ID_Osoby = PracaDyplomowa.ID_Promotor • Kliknij przycisk OK. 3. Projektowanie raportu • Kliknij pole Toolbox. • Za pomocą kursora przeciągnij obiekt Table na środek ekranu. Strona 15/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 15 Modelowanie raportu • Kliknij zakładkę Report Data. • Z okna Report Data przeciągnij pole Data do pierwszej kolumny stworzonej tabeli. • Przeciągnij pole Temat do środkowej kolumny. • Przeciągnij pole Ocena do trzeciej kolumny. Rys. 16 Ustalanie nazw i zawartości kolumn raportu • Aby zobaczyć wygenerowany raport, wybierz zakładkę Preview. 4. Grupowanie danych • Aby dodać grupę do raportu w tabeli, kliknij prawym klawiszem myszy na szarą obwódkę tabelki na wysokości drugiego wiersza. • Z menu wybierz DetailsGroup Group -> Properties. Strona 16/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 17 Tworzenie grup danych • • • • • W oknie Tablix Group Properties w polu Name wpisz Tabela1_grupa1. następnie kliknij przycisk Add. w polu Group On wybierz opcję [Nazwisko]. następnie kliknij przycisk Add. w polu And On wybierz opcję [Imie]. Rys. 18 Wybór danych w obrębie grupy • W zakładce Sorting kliknij przycisk Add. • następnie w polu Sort By wybierz opcję [LastName], Order A to Z. • Kliknij przycisk Add i w polu Then By wybierz opcję [FirstName], Order Strona 17/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 A to Z. • Zatwierdzić kliknięciem przycisku OK. Rys. 19 Wybór danych w obrębie grupy • W tym celu należy kliknij prawym przyciskiem myszy na szarą ramkę nad kolumną OrderDate. • z menu wybierz Insert Column -> Left. Rys. 20 Dodawanie kolumn do raportu Strona 18/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 • W pierwszym wierszu nowej kolumny wpisz nazwę kolumny – Dyplomant. • W drugim wierszu nowej kolumny kliknij prawym przyciskiem myszy i z menu wybierz Expression. Rys. 21 Ustalanie zawartości nowych kolumn • Zatwierdź kliknięciem przycisku OK. • Kliknij przycisk Preview. • Kolejnym krokiem będzie pogrupowanie wyników wg nazwiska, a następnie daty obrony. • Kliknij prawym przyciskiem myszy na szarą ramkę wokół tabelki na wysokości drugiego wiersza. • Z menu wybierz Tabla1_groupa1 Group -> Properties. • Następnie kliknij w oknie Tablix Group Properties przycisk Add • w nowym polu Add On wybierz wartość Order Date. Strona 19/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 22 Pogrupowanie danych w nowej kolumnie 5. Dodanie funkcji agregujących • Kliknij prawym klawiszem myszy na szarą obwódkę tabeli na wysokości drugiego wiersza. • Z menu wybierz Insert Row -> Outside Group – Below. Rys. 23 Dodanie nowego wiersza • W ostatniej kolumnie w ostatnim wierszu kliknij prawym klawiszem myszy i wybierz Expressions. • W oknie Expression w kolumnie Category wybierz zakładkę Common Functions -> Aggregate • następnie w polu Item wybierz Avg. Strona 20/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych 6. Formatowanie wyświetlanych danych • • • • Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 kliknij prawym klawiszem myszy na komórkę zawierającą formułę daty z menu wybierz Textbox Properties. W oknie Text Box Properties kliknij Number ->> Date. Date w polu Type wybierz dowolny format. Rys. 24 Ustalanie formatu wyświetlania daty w polu raportu Analogicznie można przeprowadzić formatowanie pola, na którym wyświetlana jest ilość pieniędzy (Number ->> Currency), Currency a także innych pól. 7. Publikowanie gotowego raportu • W oknie Solution Explorer kliknij prawym klawiszem myszy na BD2008 -> Properties. • W oknie BD2008 Property Pages upewnij się, czy w polu Configuration jest wybrana opcja Active Release. • wybierz przycisk Configuration Manager. • w polu Active Solution Configuration wybierz Release. Release • zamknij okno klikając przycisk Close. Strona 21/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 25 Generowanie raportu • W polu TargetServerURL podaj adres URL serwera raportującego. raportującego adres URL serwera można znaleźć otwierając Reporting Services Configuration Manager w zakładce Web Service URL. URL • Zatwierdź klikając przycisk OK. • Kliknij Menu -> Debug -> Start without debugging • Jeśli to konieczne konieczne, podaj hasło i login osoby upoważnionej do umieszczania raportów na serwerze. serwerze Rys. 26 Generowanie raportu • Jeśli wszystkie czynności zostały wykonane poprawnie, poprawnie automatycznie zostanie wyświetlona strona zawierająca raport. Strona 22/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Rys. 27 Podgląd strony serwera WWW z raportami • Kliknij na odnośnik do raportu. Raport będzie wygenerowany i wyświetlony w oknie przeglądarki. Strona 23/24 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 12 Instalacja i konfiguracja MS SQL Server 2008 Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Pierwsze testy nowego narzędzia raportującego wypadły pomyślnie. Dyrektor Działu Marketingu firmy National Insurance polecił przygotować kilka raportów o stanie sprzedaży kluczowych produktów. Uzyskałeś dostęp do bazy AdventureWorks, w której przechowywane są informacje m.in. na temat pracowników, sprzedaży, produktów i kluczowych transakcji. Twoim zadaniem jest przygotowanie zwięzłych i efektownych raportów zawierających dane z ostatniego miesiąca (lub kwartału) o: • • • • • • Sprzedanych produktach Sprzedawcach Zawartych transakcjach Wielkości sprzedaży Miejscach największej sprzedaży Producentach najpopularniejszych produktów Raporty należy opublikować w firmowej sieci intranet na wskazanym (domyślnym) serwerze WWW. Do utworzenia i publikacji raportu należy użyć narzędzia Reporting Services. Strona 24/24 ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 13 Wersja 1.0 Budowa interfejsu Spis treści Budowa interfejsu ................................................................................................................................ 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie ............................................................................................................. 5 Porady praktyczne ....................................................................................................................... 8 Uwagi dla studenta ...................................................................................................................... 9 Dodatkowe źródła informacji....................................................................................................... 9 Laboratorium podstawowe ................................................................................................................ 11 Problem 1 (czas realizacji 45 minut) .......................................................................................... 11 Laboratorium rozszerzone ................................................................................................................. 16 Zadanie 1 (czas realizacji 90 min)............................................................................................... 16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Informacje o module Opis modułu W module tym zobaczysz, jak napisać aplikację, która będzie wyciągała informacje z bazy danych prac dyplomowych. Dowiesz się, jak za pomocą Visual Studio utworzyć bazę danych, połączyć się z nią i wprowadzić do niej dane. Następnie zobaczysz, jak stworzyć aplikację Windows, która będzie korzystała z tych danych. Cel modułu Celem modułu jest zapoznanie czytelnika z podstawami programowania w Visual Studio 2008 w takim stopniu, żeby potrafił samodzielnie stworzyć aplikację dostępową do danych zgromadzonych w bazie danych. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • potrafił samodzielnie stworzyć prostą aplikację dostępu do danych • potrafił stworzyć bazę danych za pomocą Microsoft Visual Studio 2008 • potrafił nawiązać połączenie z bazą danych Microsoft SQL Server 2008 • umiał poruszać się po Microsoft Visual Studio 2008 • wiedział co to jest ADO.NET Wymagania wstępne Przed przystąpieniem do pracy z tym modułem powinieneś: • • • • potrafić zaprojektować bazę danych potrafić zaimplementować bazę danych wraz z jej obiektami potrafić tworzyć proste procedury składowane i wyzwalacze potrafić definiować użytkowników i nadawać im uprawnienia Mapa zależności modułu Zgodnie z mapą zależności przedstawioną na rys. 1, przed przystąpieniem do realizacji tego modułu należy zapoznać się z materiałem zawartym w modułach 1, 3, 9, 10 i 11. Dodatek Moduł 12 Moduł 1 Moduł 11 Moduł 10 Moduł 2 Moduł 13 Moduł 9 Moduł 3 Moduł 8 Moduł 4 Moduł 7 Moduł 5 Moduł 6 Rys. 1 Mapa zależności modułu Strona 2/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Przygotowanie teoretyczne Przykładowy problem Ostatnim etapem wytwarzania bazy danych wraz z dostępem do niej z poziomu aplikacji jest konstrukcja interfejsu użytkownika. Istnieje wiele metod i narzędzi do tworzenia graficznego interfejsu użytkownika. Począwszy od rozwiązań prostszych, a co za tym idzie przeważnie nie wykorzystujących dobrodziejstw, jakie daje nam baza danych postawiona na SQL Server 2008, do rozwiązań profesjonalnych, wykorzystujących możliwości serwera bazodanowego. Jeżeli baza danych została profesjonalnie zaprojektowana, zaimplementowana i oprogramowana, to wykorzystując na przykład Microsoft Visual Studio 2008 jesteśmy w stanie w łatwy sposób stworzyć aplikację dostępową o wysokim poziomie bezpieczeństwa wykorzystując wszystkie zaawansowane mechanizmy zabezpieczeń dostępne w SQL Server 2008. Aplikacja taka będzie odporna na typowe zagrożenia typu SQL Injection, gdyż zapytania zostaną ukryte w procedurach składowanych, a zatem haker będzie widział jedynie, że po sieci przesyłane są pewne funkcje wraz z parametrami. Należy podkreślić fakt, iż w celu stworzenia bezpiecznej bazy danych i aplikacji dostępowej wymagana jest ciągła współpraca różnych członków zespołu projektowego, począwszy od projektanta, administratora i programisty bazy danych, poprzez projektanta interfejsu użytkownika, a skończywszy na projektancie i programiście aplikacji dostępowej. Podstawy teoretyczne Rzadko wprowadza się dane do bazy za pomocą SQL Server 2008 za pomocą SQL Server Management Studio. Zwykle daje się możliwość wprowadzania danych użytkownikom za pomocą aplikacji dostępowej do bazy danych. Dane można również importować z różnych źródeł zewnętrznych lub tworzyć je za pomocą skryptów SQL, co zostało przedstawione we wcześniejszych modułach. W dalszej części skoncentrujmy się na tworzeniu aplikacji Windows, która komunikuje się z SQL Server 2008 korzystając z ADO.NET. Co to jest ADO.NET ADO.NET zapewnia jednolity dostęp zarówno do źródeł danych, takich jak na przykład SQL Server 2008, jak również źródeł danych publikowanych za pomocą OLE DB lub XML. Należy zauważyć, iż aplikacje, które współdzielą dostęp do danych, mogą korzystać właśnie z ADO.NET w celu łączenia się ze źródłami, pobierania danych oraz manipulowania nimi. Siłą ADO.NET jest wyraźne rozdzielenie dostępu do danych od manipulowania danymi na niezależnie odseparowane składniki. Składniki te mogą być wykorzystywane razem lub osobno. ADO.NET wykorzystuje tzw. dostawców danych, za pomocą których można tworzyć połączenia z bazami danych, wykonywać polecenia i odbierać wyniki. Wyniki te mogą po pierwsze być przetwarzane bezpośrednio, a po drugie mogą trafiać do zbioru danych, tzw. obiektów DataSet. W takiej sytuacji dane są udostępniane użytkownikom w dowolny sposób. Warto wspomnieć, że obiekty DataSet można wykorzystywać niezależnie od dostawców ADO.NET do lokalnego zarządzania danymi oraz w aplikacjach wczytujących dane w formacie XML. Klasa ADO.NET znajduje się w podzespole System.Data.dll i jest zintegrowana z klasami XML znajdującymi się w podzespole System.Xml.dll. W momencie kompilacji kodu odwołującego się do przestrzeni nazw System.Data należy wskazać zarówno System.Data.dll, jak również System.Xml.dll. ADO.NET zapewnia programistom tworzącym aplikacje w środowisku .NET Framework sposób dostępu do danych oraz coś bardzo ważnego – możliwość programowego manipulowania nimi. Manipulacja oczywiście może odbywać się również na innych źródłach danych, na przykład na źródle XML. Strona 3/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Dostęp do danych z użyciem ADO.NET Tworząc aplikacje korzystające z ADO.NET można spotkać się z różnymi wymaganiami dotyczącymi pracy z danymi. W pewnych sytuacjach wystarczy wyświetlenie danych w formularzu, innych razem trzeba opracować na przykład sposób wymiany informacji z inną firmą. Niezależnie od tego, co zamierzamy robić z danymi, warto poznać kilka podstawowych zasad dotyczących obsługi danych w ADO.NET. Być może nigdy nie będziemy musieli znać szczegółów obsługi danych, natomiast kluczową sprawą jest zrozumienie architektury danych w ADO.NET, poznanie podstawowych komponentów oraz sposobu ich współpracy. ADO.NET a uwierzytelnianie otwartego połączenia z bazą danych W tradycyjnych aplikacjach typu klient/serwer komponenty ustanawiały połączenie z bazą danych i utrzymywały to połączenie przez cały czas działania aplikacji. Z kilku względów metoda ta nie jest zbyt praktyczna: • Otwarte połączenie z bazą danych zajmuje wiele zasobów systemowych, które mogłyby zostać wykorzystane do innych celów. W wyniku utrzymywania stałego połączenia z bazą danych zmniejsza się liczba równocześnie utrzymywanych połączeń. Obciążenie spowodowane utrzymywaniem otwartych połączeń zmniejsza ogólną wydajność aplikacji. • Bardzo trudne jest skalowanie aplikacji, która wymaga otwartego połączenia z bazą danych. Należy pamiętać o tym, że aplikacja, która nie jest w pełni skalowalna, może na przykład dobrze działać z czterema użytkownikami, ale w żaden sposób nie poradzi sobie z setką równoczesnych użytkowników. Wymóg łatwej skalowalności dotyczy szczególnie aplikacji internetowych, gdyż obciążenie witryny internetowej może w bardzo niewielkim czasie zwiększyć się nawet o kilka rzędów wielkości. • W aplikacjach internetowych komponenty nie są ze sobą połączone. W momencie kiedy serwer zakończy przetwarzanie i transmisję dokumentu w odpowiedzi na żądanie przeglądarki, pomiędzy serwerem a przeglądarką nie jest utrzymywane żadne połączenie. Połączenie jest wznawiane w chwili kolejnego żądania, a zatem utrzymywanie otwartego połączenia z bazą w żaden sposób się nie opłaca, ponieważ nie jesteśmy w stanie przewidzieć, czy klient będzie jeszcze potrzebował dostępu do danych. • Model, którego działanie oparte jest na utrzymywaniu otwartych połączeń ze źródłami danych może przyczynić się do tego, że wymiana danych będzie skomplikowana i niepraktyczna. Jeśli dwa komponenty muszą mieć dostęp do tych samych danych, obydwa muszą utrzymywać połączenie ze źródłem danych lub musi być dostępny jakiś inny sposób przekazywania danych. Między innymi z wyżej wymienionych powodów dostęp do danych w ADO.NET został zaprojektowany w taki sposób, aby przede wszystkim oszczędnie korzystać z połączeń. A zatem aplikacje utrzymują połączenie z bazą danych tylko na czas odczytywania lub zapisywania danych. Ponieważ bazy danych nie muszą utrzymywać nieaktywnych połączeń, mogą obsłużyć znacznie więcej użytkowników. Współpraca z bazami danych za pomocą obiektów Command Jednym z najpowszechniejszych zadań dostępu do danych jest odczytanie danych z bazy, a następnie wykonanie na nich jakichś operacji. W czasach wielkiej liczby informacji bardzo często dochodzi do sytuacji, że aplikacja musi przetworzyć nie jeden rekord, lecz ich cały zbiór. W wielu przypadkach przetwarzane dane pochodzą nie z jednej, lecz z wielu tabel. Rekordy, które czytane są przez aplikację, traktowane są jako grupa. Na przykład aplikacja może zezwolić użytkownikowi na przejrzenie listy wszystkich autorów o nazwisku Kowalski, a następnie sprawdzić wszystkie książki napisane przez jednego Kowalskiego, potem przez kolejnego Kowalskiego i tak dalej. Strona 4/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Takie każdorazowe odwoływanie się do bazy danych, gdy aplikacja potrzebuje kolejnego rekordu do przetworzania jest niepraktyczne. W myśl tego, co zostało powiedziane wcześniej, takie podejście może zniwelować zalety płynące z utrzymywania małej liczby jednocześnie otwartych połączeń. Pewnym rozwiązaniem jest tymczasowe przechowywanie odczytanych z bazy rekordów i praca na takim tymczasowym zbiorze. Na tym właśnie polega idea obiektu DataSet. DataSet jest swego rodzaju buforem, w którym znajdują się przechowywane rekordy pobrane z bazy danych. Obiekt ten działa podobnie do wirtualnej składnicy danych, a zatem zawiera jedną lub więcej tabel. Tabele te są fragmentami tabel rzeczywistej bazy danych. Ponadto obiekt DataSet posiada informacje o relacjach pomiędzy tymi tabelami oraz o ograniczeniach wartości danych, jakie mogą się znaleźć w tych tabelach. Należy pamiętać, że dane przechowywane w DataSet nie są pełnym odzwierciedleniem fizycznej tabeli. Są one niewielkim podzbiorem danych przechowywanych w bazie. Zaletą jednak jest to, że można z nimi pracować w sposób podobny do pracy z danymi z rzeczywistej bazy danych. Czasem zdarza się że aplikacja musi zapisać dane do bazy. Dane te można przetwarzać wewnątrz obiektu DataSet, a następnie przesłać je do podstawowej bazy danych. Dane przechowywane w formacie XML Wszystkie dane są przesyłane ze składnicy danych do DataSet, a następnie z DataSet do innych komponentów. ADO.NET do przesyłania danych wykorzystuje format XML. Pliki XML mogą być używane jak każde inne źródło danych. Ich zawartość można łatwo wczytać do obiektu DataSet. XML jest podstawowym formatem danych w ADO.NET. API w ADO.NET automatycznie tworzą pliki lub strumienie XML (na podstawie DataSet) i wysyłają je do innego komponentu. Następnie komponent taki może wywołać inne API, by ponownie wczytać XML do obiektu DataSet. Oparcie protokołów wymiany danych na XML przynosi wiele korzyści: • XML jest standardem przemysłowym, a zatem komponenty obsługi danych w jednej aplikacji mogą wymieniać dane z komponentami w innej aplikacji. Warunkiem jest obsługa przez aplikację formatu XML. • XML jest formatem tekstowym. Danych w postaci XML nie zawiera informacji binarnych, a zatem można je przesyłać za pomocą dowolnego protokołu – na przykład HTTP. Przykładowe rozwiązanie Tworzenie bazy danych z poziomu Microsoft Visual Studio 2008 Bazę danych, do której będziemy tworzyli aplikacje dostępową, można stworzyć na dwa sposoby. Sposób pierwszy polega na definiowaniu bazy danych wraz z jej obiektami z poziomu SQL Server 2008. Sposób ten poznałeś w poprzednich modułach. Sposób drugi polega na stworzeniu bazy danych z poziomu Microsoft Visual Studio 2008. Definicja bazy danych Dziekanat Aby stworzyć bazę danych w Visual Studio 2008, w pierwszym kroku uruchamiamy środowisko. Następnie w oknie Database Explorer klikamy prawym przyciskiem myszy Data Connections i wybieramy Add Connection, co pokazano na rys. 2. W obrębie okna definicji połączenia z bazą danych możemy ustawić źródło danych oraz wskazać istniejący lub stworzyć nowy plik bazy danych. W kolejnym etapie określamy sposób autoryzacji. Strona 5/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Rys. 2 Okno definicji połączenia z bazą danych Stwórzmy testową bazę danych Dziekanat. Wynik pokazano na rys. 3. Rys. 3 Testowa baza danych dziekanat Definicja tabeli, diagramu, widoku W kolejnym kroku należy zdefiniować podstawowe obiekty bazy danych – tabele i widoki. W tym celu klikamy prawym przyciskiem myszy katalog Tables i wybieramy Add New Table. Tworzenie przykładowej tabeli Student pokazano na rys. 4. Rys. 4 Przykładowa tabela Student W analogiczny sposób definiujemy pozostałe tabele w bazie danych. Następnie wypełniamy ją przykładowymi danymi. Ostatnim krokiem jest stworzenie przykładowego widoku. W tym celu klikamy prawym przyciskiem myszy zakładkę Views i wybieramy Add New View. Następnie w oknie Strona 6/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Add Table wybieramy tabele, których będziemy używali w definiowanym widoku. Kolejny krok to wybór kolumn, które mają zostać użyte w definicji widoku. Na rys. 5 pokazano przykładowy widok na przedmioty, na które zapisani są studenci. Rys. 5 Definicja widoku na przedmioty, na które zapisani są studenci Tworzenie zestawu danych w Microsoft Visual Studio 2008 Stwórzmy aplikację dostępową do zarządzania bazą danych przygotowaną w poprzednich krokach. Aby utworzyć obiekt DataSet, w pasku Data Sources klikamy odsyłacz Add New Data Sources. Pierwszy ekran konfiguracji źródła danych umożliwia wybór typu źródła danych, które chcemy połączyć. Wybieramy Dziekanat.mdf, co pokazano na rys. 6. Rys. 6 Wybór źródła danych Następnie wybieramy wszystkie obiekty z bazy danych, które mają zostać uwzględnione w obiekcie DataSet – zatem wybieramy wszystkie tabele i widok. W wyniku powyższych operacji projekt powinien wyglądać mniej więcej tak, jak na rys. 7. Strona 7/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Rys. 7 Projekt aplikacji Dziekanat Następnie w panelu Data Sources wybieramy węzeł Przedmiot i klikamy wskazującą w dół strzałkę, rozwijając listę. Wybieramy prezentację danych jako widok siatki danych. Spowoduje to pobranie do formularza wszystkich pól z obiektu DataSet w wielu wierszach w postaci siatki komórek, co pokazano na rys. 8. Rys. 8 Stworzony formularz W celu uruchomienia aplikacji należy wybrać przycisk F5. Wynik skompilowanej aplikacji przedstawia rys. 9. Rys. 9 Wynik działania aplikacji Porady praktyczne • Jeśli korzystamy z obiektów SqlCommand z właściwością CommandType ustawioną na Text i przy ich pomocy przekazujemy do bazy danych informacje otrzymane od klienta, informacje te należy zawsze poddać procesowi walidacji. Niektórzy użytkownicy mogą próbować wysłać zmodyfikowane lub dodatkowe polecenia SQL w celu zdobycia dostępu do danych lub uszkodzenia bazy danych. Z tego względu bardzo ważne jest, żeby zawsze przed przekazaniem do bazy wprowadzonych przez użytkownika danych przeprowadzić proces Strona 8/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych • • • • • • • • • Moduł 13 Budowa interfejsu walidacji, czy dane te są poprawne. Najlepszą praktyką jest stosowanie procedur składowanych. Należy pamiętać, że DataSet jest tylko kontenerem przechowującym dane. Aby odczytać i zapisać dane z bazy należy użyć obiektu DataAdapter. DataAdapter zawiera jeden lub więcej obiektów SqlCommand używanych do wypełnienia pojedynczej tabeli obiektu DataSet. Obiekt ten zawiera cztery obiekty SqlCommand (do pobierania, dopisywania, uaktualniania i usuwania rekordów). Konfiguracja aplikacji jest przechowywana w pliku XML o takiej samej nazwie jak plik wykonywalny .exe. W wyniku skonfigurowania obiektu DataSet został utworzony plik .xsd, czyli dokument schematu XML definiujący wewnętrzna strukturę zestawu danych. Pamiętaj, że zestaw danych jest przechowywany w pamięci reprezentującej jedną lub wiele tabel z bazy danych. ADO.NET będzie korzystał z pliku schematu przy współpracy z aplikacją. Przeważnie w projektach mamy jedna bazę danych, ale nie jest niczym niezwykłym potrzeba komunikowania się z dwiema lub więcej bazami danych. Z tego powodu połączenia z bazami danych ułożone są w drzewiastej strukturze, w której każda baza danych jest reprezentowana przez osobny węzeł. Dopóki nie zapiszemy projektu, znajduje się on w tymczasowym folderze. Po zapisaniu wszystkich plików projektu baza danych zostanie zapisana razem z innymi plikami projektu. Nie wszystkie kontrolki Windows można podłączyć do źródeł danych. Te, które można, posiadają właściwości DataBindings. Po przeciągnięciu zestawu danych ponad obszar projektowania, do znajdującego się niżej szarego panelu są dodawane nowe pozycje. Dolna część obszaru projektowania nazywamy panelem komponentów. Visual Studio umieszcza w nim kontrolki, które nie posiadają graficznej reprezentacji. W Visual Studio istnieje możliwość zastosowania metody „Smart Defaults”. Polega ona na sprawdzeniu, czy tabela z zestawu danych oprócz ID lub klucza głównego zawiera jakąś kolumnę typu tekstowego. Jeżeli tak, to kolumna ta jest podłączana do kontrolki. Gdy zajrzysz do panelu Properties obiektu tabeli, zobaczysz że w Visual Studio automatycznie są generowane cztery typy instrukcji: SELECT, INSERT, DELETE oraz UPDATE. Są to instrukcje, które umożliwiają przygotowanie w pełni działającej aplikacji bez pisania kodu źródłowego Uwagi dla studenta Jesteś przygotowany do realizacji laboratorium jeśli: • • • • rozumiesz co to jest ADO.NET rozumiesz na czym polega dostęp do danych poprzez ADO.NET potrafisz stworzyć prosta bazę danych korzystając z Visual Studio 2008 potrafisz stworzyć prosty formularz obiektu typu tabela Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Patrice Pelland, Projektuj sam. Microsoft Visual C# 2008, APN Promise, W książce autor w prosty i przejrzysty sposób prezentuje, jak należy poruszać się po Microsoft Visual Studio 2008, jak tworzyć proste projekty. Pozycja szczególnie polecana dla osób początkujących. Strona 9/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu 2. Kalen Delaney, Microsoft SQL Server 2005: Rozwiązania praktyczne krok po kroku, Microsoft Press, 2006 W książce autor w przystępny i zrozumiały sposób przedstawia podstawowe mechanizmy związane z bezpieczeństwem bazy danych przy założeniu dostępu do niej poprzez aplikację kliencką pisaną w Microsoft Visual Studio. Pozycja polecana zarówno dla osób początkujących, jak i pragnących poszerzyć swoją wiedzę z tej tematyki. 3. Nick Randolph, David Gardner, Professional Visual Studio 2008, Wrox, 2008 W książce autor w prosty i przejrzysty sposób omawia zaawansowane mechanizmy dostępne w Microsoft Visual Studio 2008. Prezentuje, jak należy poruszać się w tym środowisku oraz jak tworzyć proste i zaawansowane projekty. W książce znajdziesz rozszerzony opis ADO.NET. Pozycja szczególnie polecana dla osób zaawansowanych, chcących poszerzyć swoją wiedzę z zakresu programowania aplikacji klienckich. Strona 10/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Laboratorium podstawowe Problem 1 (czas realizacji 45 minut) Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma planuje rozszerzenie systemu prac dyplomowych, którym zarządza na Twoim wydziale, dodając nową funkcjonalność związaną z wyszukiwaniem informacji o tym, na jakie przedmioty chodzili studenci podczas pięciu lat studiów. Zadanie, jakie przed Tobą stoi, to zmodyfikowanie struktury fizycznej bazy danych oraz stworzenie modułu aplikacyjnego. Zadanie Tok postępowania 1. Utwórz projekt • Uruchom Microsoft Visual Studio 2008, wybierając Start -> Programy -> Microsoft Visual C# 2008. • Z menu głównego wybierz File -> New Project -> Windows Form Application. • Nadaj nazwę dla projektu Dziekanat-aplikacja. 2. Utwórz bazę danych • W obrębie okna Database Explorer wybieramy Data Connections. • Kliknij prawym przyciskiem myszy Data Connections i wybierz Add Connection. • W polu Data Sources ustaw Microsoft SQL Server database File (SqlClient). • W polu Database file name (new or existing) wpisz nazwę bazy danych Dziekanat. Rys. 10 Definicja połączenia do bazy danych 3. Zdefiniuj tabele • W panelu Database Explorer prawym przyciskiem myszy kliknij ikonę folderu Tables i wybierz Add New Table. • Zdefiniuj kolumny nowej tabeli jak na rys. 11 i zapisz ją pod nazwą Student. Rys. 11 Definicja tabeli Student • Dodaj kolejną tabelę, zdefiniuj jej kolumny jak na rys. 12 i zapisz ją pod Strona 11/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu nazwą Przedmiot. Rys. 12 Definicja tabeli Przedmiot • Dodaj kolejną tabelę, zdefiniuj jej kolumny jak na rys. 13 i zapisz ją pod nazwą Student_Przedmiot. Rys. 13 Definicja tabeli Student_Przedmiot 4. Zdefiniuj Diagram • Przejdź do panelu Database Explorer, prawym przyciskiem myszy kliknij węzeł Database Diagram i wybierz Add New Diagram. • Wybierz wszystkie tabele i kliknij Add. • Kliknij przycisk Close, aby poinformować Visual Studio, że już masz wszystkie potrzebne tabele. • Połącz tabele związkami jak na rys. 14. Rys. 14 Diagram bazy danych Dziekanat 5. Zdefiniuj widok • Przejdź do panelu Database Explorer, prawym przyciskiem myszy kliknij węzeł Views i wybierz Add New View. • Wybierz tabele Student, Przedmiot i Student_Przedmiot, które potrzebne są do utworzenia widoku i kliknij Add. • Kliknij przycisk Close, aby poinformować Visual Studio, że już masz wszystkie potrzebne tabele. • Zaznacz kolumny, które chcesz żeby weszły do definiowanego widoku. Wynik pokazano na rys. 15. Strona 12/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Rys. 15 Definicja widoku 6. Uwórz obiekt DataSet • Przejdź do panelu Data Sources i kliknij odsyłacz Add New Data Sources Sources. • Wybierz Database, a następnie kliknij przycisk Next. Next • Wybierz Wybier bazę danych Dziekanat.mdf i kliknij przycisk Next. • Zaznacz opcję Yes, save the connection as. • Wybierz W wszystkie tabele i widoki z bazy danych, danych a następnie kliknij Finish Finish. W Data Sources powinno pojawić się nowo zdefiniowane źródło danych, co pokazano na rys. 16. Rys. 16 Zdefiniowane połączenie z bazą danych Dziekanat 7. Utwórz interfejs użytkownika • Przejdź do panelu Toolbox, a następnie przeciągnij na formularz obiekt Label Label. • W oknie właściwości w polu Text wpisz Mini aplikacja obsługi dziekanatu dziekanatu. • Przejdź do panelu Toolbox, a następnie przeciągnij na formularz obiekt TabCotrol TabCotrol. • W oknie właściwości w polu Text dla kolejnych zakładek wpisz: Studenci Przedmioty i Na jakie przedmioty uczęszczają studenci (rys. Studenci, 17 17). Strona 13/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Rys. 17 Dodane obiekty Label i TabControl • Przejdź do panelu Data Sources i rozwiń zakładkę Student. • Kliknij wskazującą w dół strzałkę, rozwijając listę. • Wybierz Details jako prezentację danych i przeciągnij na formularz na zakładkę Studenci (rys. 18). Rys. 18 Zakładka „Studenci” • Przejdź do panelu Data Sources i rozwiń zakładkę Przedmiot. • Kliknij wskazującą w dół strzałkę, rozwijając listę. • Wybierz Details jako prezentację danych i przeciągnij na formularz na zakładkę Przedmiot (rys. 19). Rys. 19 Zakładka „Przedmioty” • Przejdź do panelu Data Sources i rozwiń zakładkę Na jakie przedmioty jest zapisany student. • Kliknij wskazującą w dół strzałkę, rozwijając listę. • Wybierz DataGridView jako prezentację danych i przeciągnij na formularz na zakładkę Na jakie przedmioty uczęszczają studenci (rys. 20). Strona 14/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Rys. 20 Zakładka „Na jakie przedmioty uczęszczają studenci” • Uruchom aplikację wybierając przycisk F5. Wynik skompilowanej aplikacji przedstawia rys. 21. Rys. 21 Wynik działania aplikacji Strona 15/16 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski ITA-101 Bazy Danych Moduł 13 Budowa interfejsu Laboratorium rozszerzone Zadanie 1 (czas realizacji 90 min) Jesteś programistą w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że firma zarządzająca bazą AdventureWorks planuje rozszerzenie i modernizacje systemu w celu spełnienia pewnych standardów. W związku z modernizacją systemu bazodanowego najprawdopodobniej ulegną zmianie pewne metody wybierania danych w celu zapewnienia wyższego poziomu bezpieczeństwa. Dostaniesz dodatkowe procedury składowane i funkcje, które będziesz musiał wykorzystać w nowym module aplikacji klienckiej. Zadanie, jakie przed Tobą stoi, to: 1. Podjęcie decyzji, jakie procedury składowane powinny zostać napisane dla nowego modułu bazy danych oraz jak ich użyć w aplikacji klienckiej. 2. Podjęcie decyzji, jak ma wyglądać interfejs użytkownika. Strona 16/16 ITA-101 Bazy danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski DODATEK A Wersja 1.0 Podstawy Spis treści Podstawy .............................................................................................................................................. 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .............................................................. Błąd! Nie zdefiniowano zakładki. Podstawy teoretyczne.................................................................................................................. 3 Uwagi dla studenta .................................................................................................................... 11 Dodatkowe źródła informacji..................................................................................................... 11 W.Dąbrowski, P.Kowalczuk, K.Markowski Dodatek A ITA-101 bazy danych Podstawowe pojęcia Informacje o module Opis modułu W tym module zajmiemy się zebraniem najważniejszych informacji na temat baz danych niezbędnych do zrozumienia i pełnego wykorzystania dalszych modułów. Zebrane, najważniejsze pojęcia nie zastępują pełnego wykładu na ten temat i nie zwalniają Cię z przestudiowania wykładu lub podręcznika z zakresu baz danych. Mają one jedynie na celu zebrać i utrwalić najważniejsze elementy potrzebne do wykonywania kolejnych modułów. Zazwyczaj pierwsze zajęcia laboratorium są zajęciami organizacyjnymi. Cel modułu Celem modułu jest utrwalenie i sprawdzenie rozumienia podstawowych pojęć z baz danych oraz przygotowanie do pracy z kolejnymi modułami kursu. Uzyskane kompetencje Po zrealizowaniu modułu będziesz: • rozumiał czym jest baza danych, • rozumiał na czym polega model relacyjnej bazy danych, • umiał swobodnie poruszać się wśród podstawowych pojęć baz danych. Wymagania wstępne Ten moduł nie ma wymagań wstępnych. Możesz od razu rozpocząć pracę z tym modułem. Mapa zależności modułu Przed przystąpieniem do realizacji tego modułu nie jest wymagane zapoznanie się z materiałem zawartym w innych modułach. Strona 2/11 W.Dąbrowski, P.Kowalczuk, K.Markowski Dodatek A ITA-101 bazy danych Podstawowe pojęcia Przygotowanie teoretyczne Podstawy teoretyczne Na pewno pojęcie bazy danych nie jest dla Ciebie nowe. Pewnie każdy korzystał też z jakiejś bazy danych. Czy jednak zastanawiałeś się, co to jest baza danych? Od kiedy ludzie posługują się bazami danych? Właśnie na te i inne podstawowe pytania dotyczące pojęcia baz danych spróbujemy odpowiedzieć w tym module. Zastanów się, co rozumiesz pod pojęciem bazy danych, co to takiego? Zapisz swoje określenie, a następnie porównaj z naszym. Bazą danych (ang. database) będziemy nazywać trwały, zamknięty i dobrze zorganizowany magazyn danych. Baza danych charakteryzuje się trzema ważnymi cechami: trwałością, ograniczonością (zamkniętością) i dobrą organizacją (co dla kogo jest dobre jest rzeczą dyskusyjną – postaramy się jednak sprecyzować, co dla nas będzie oznaczać dobra organizacja magazynu). Trwałość bazy danych Trwałość oznacza, że dane zapisane w bazie danych są w niej zapisane w sposób nieulotny. Nie można zbudować bazy danych w pamięci operacyjnej komputera, gdyż po dołączeniu zasilania dane w niej zapisane są tracone. Na trwały magazyn danych dobrze natomiast nadaje się kamień (zapisy dokonane w kamieniu przetrwały tysiące lat), papier (ten nie jest już tak trwały) czy dyski magnetyczne lub inne nośniki magnetooptyczne. Trwałość danych zapisanych w bazie danych jest bardzo ważnym postulatem. Wszystkie współczesne systemy baz danych muszą go spełniać. Ograniczoność bazy danych Ograniczoność oznacza, że w bazie danych nie można zapisać zupełnie dowolnych danych. Baza oparta jest na pewnym modelu rzeczywistości (modelu danych). Modele te mogą być bardzo różne i niektóre z nich pokrótce omówimy w dalszej części. Model danych definiowany jest przez projektanta bazy danych. Określa on, w jaki sposób dane występujące w rzeczywistości (np. dane adresowe studentów) będą reprezentowane w bazie. Przyjęty model ogranicza więc (determinuje) dane, które możemy trwale przechowywać w bazie. Dobra organizacja bazy danych Aby zbiór danych można było uważać za bazę danych, musi on być odpowiednio zorganizowany. Organizacja ta musi zapewniać możliwość nie tylko sprawnego umieszczania danych w bazie, ale również możliwość odszukiwania i odczytywania danych już w niej zapisanych. Jeśli więc znalezienie danych zapisanych w magazynie wymaga od nas miesiąca przeglądania zapisanych danych, to taki magazyn nie może być uznany za bazę danych. Baza danych to oczywiście każdy magazyn danych spełniający powyższe warunki. Ludzkość dostrzegła potrzebę tworzenia baz danych już bardzo dawno. J. Diamond w swojej książce Guns, Germs and Steel: The Fastest of Human Societies twierdzi, że bazy danych istniały od czasów, kiedy cywilizacja umeryjska i egipska zaczęły korzystać z pisma klinowego i hieroglifów do zapisu informacji w formie trwałej i możliwej do odczytania na każde żądanie. Stosowane w tamtych czasach nośniki danych były mało wygodne. Nasza cywilizacja przez całe wieki budowała swoje bazy danych wykorzystując jako trwały nośnik danych papier. Bazy „papierowe” mają jednak bardzo wiele wad, takich jak duże rozmiary magazynu, trudności w wyszukiwaniu danych, brak wielodostępu itd. Do budowy i obsługi baz danych nadają się natomiast znakomicie maszyny cyfrowe. Dzisiaj mówiąc „baza danych” mamy w zasadzie na myśli komputerowe bazy danych. W dalszej części naszych wykładów pod pojęciem bazy danych będziemy więc rozumieli bazę zorganizowaną i zarządzaną z wykorzystaniem komputera. Strona 3/11 W.Dąbrowski, P.Kowalczuk, K.Markowski Dodatek A ITA-101 bazy danych Podstawowe pojęcia Gdzie i w jakim celu stosuje się bazy danych Bazy danych spotykamy właściwie na każdym kroku. Każdy na pewno korzystał z bazy papierowej takiej jak encyklopedia, książka telefoniczna czy kartoteka w bibliotece. Bazy danych są też powszechne w świecie informatyki. Większość systemów informatycznych współpracuje z bazami danych, gdyż muszą one przechowywać dane. Są aplikacje, których głównym zadaniem jest przechowywanie, zarządzanie i udostępnianie danych. Potocznie są one nazywane bazami danych lub, dla podkreślenia faktu istnienia odpowiednich dodatków ułatwiających pracę, aplikacjami bazodanowymi. Należy jednak mieć świadomość, że znakomita większość aplikacji to aplikacje, które współpracują z bazami danych mniej lub bardziej skomplikowanymi. Zastanowimy się teraz nad najważniejszymi cechami bazy danych, które powinna ona spełniać, aby mogła sprostać stawianym przed nią dzisiaj wymaganiom. Proponujemy, abyś przyjrzał się dowolnej bazie danych, z którą się spotkałeś, przeanalizował jej cechy (te, które ma i które Twoim zdaniem powinna mieć) i wypisał je. Następnie sprawdź, ile z wypisanych przez Ciebie cech pokrywa się uznanymi przez nas za najważniejsze. Zgodność z rzeczywistością Postulat zgodności danych zapisanych w bazie z rzeczywistością jest jednym z ważniejszych postulatów stawianych bazom danych. Na przykład, jeśli baza opisuje dane osobowe pracowników, takie jak ich imię, nazwisko, telefon, adres zamieszkania, stanowisko itd., to postulat zgodności z rzeczywistością oznacza, że w chwili, gdy pracownik zmienia stanowisko pracy (a tym samym również telefon), to również w bazie danych dokonywane są odpowiednie zmiany danych. Postulat zgodności z rzeczywistością oznacza, że dane zgromadzone w bazie są danymi prawdziwymi, odpowiadającymi faktycznemu stanowi świata, którego dotyczą. Na pewno każdy z nas spotkał się z bazą, która nie spełniała tego postulatu i przechowywała dane dawne już nieaktualne. Z takimi bazami często spotykam się dzisiaj zaglądając do oferty sklepów i firm internetowych. Niezwykle rzadko zdarza się, aby dane podawane w bazach udostępnianych przez te podmioty były prawdziwe. Najczęściej nie zgadzają się ani ceny towarów, ani ich dostępność w magazynie. Powoduje to nie tylko stratę naszego czasu (bo i tak trzeba zadzwonić do „żywego człowieka”), ale również utratę zaufania do firmy, która udostępnia bazę z danymi niezgodnymi z rzeczywistością. Spełnienie postulatu zgodności z rzeczywistością nie jest łatwe. Trudności nie leżą w zasadzie po stronie technicznej, ale po stronie ludzkiej. Nie można (jak na razie) całkowicie zautomatyzować procesów biznesowych i w każdym z nich niezbędnym ogniwem jest człowiek. Aby zapewnić zgodność danych przechowywanych w bazie z danymi rzeczywistymi, trzeba opracować i stosować w firmie odpowiednie procedury. Na przykład w wypadku zmiany stanowiska przez pracownika, dział kadr mógłby (obowiązkowo) przesyłać odpowiednie zgłoszenie do operatora bazy (albo wprowadzać samodzielnie) z informacją o zaistniałych zmianach. Sposób przesyłania takiego zgłoszenia, jego zawartość, określenie odpowiedzialności itd. powinien być właśnie określony w takiej procedurze. Problem aktualności danych w bazie jest jednym z trudniejszych problemów do rozwiązania, szczególnie kiedy w przedsiębiorstwie działa wiele różnych systemów i baz danych. Dlatego też obserwuje się dzisiaj silną tendencję do integracji różnych systemów w jeden spójny system, który potrafiłby automatycznie wymieniać dane między swymi modułami (częściami). Rozwiązania tego typu noszą nazwę rozwiązań EAI (ang. Enterprise Architecture Integration) i są oferowane i rozwijane przez wiodących dostawców systemów bazodanowych. Strona 4/11 W.Dąbrowski, P.Kowalczuk, K.Markowski Dodatek A ITA-101 bazy danych Podstawowe pojęcia Ilustracja fragmentu rzeczywistości Projektując bazę danych należy pamiętać, że stanowi ona pewien model otaczającego nas świata. Aby baza spełniała swoje zadania, musi być ilustracją kompletnego i dobrze zdefiniowanego fragmentu rzeczywistości. Można oczywiście zbudować działającą bazę danych, która będzie pozwalała na poprawne wprowadzanie, usuwanie i modyfikację danych, ale która nie będzie związana ze światem rzeczywistym. Przydatność takiej bazy stoi oczywiście pod znakiem zapytania. Aby spełnić ten postulat, należy prawidłowo zdefiniować dziedzinę problemową, która będzie modelowana za pomocą bazy oraz wykonać odpowiadający tej rzeczywistość model logiczny bazy. Określaniem wymagań i budową modelu logicznego bazy danych będziemy się zajmować w module 2. Kontrola replikacji danych Replikacja danych oznacza reprezentowanie w bazie tego samego faktu w wielu jej miejscach lub w różnych formach. Na przykład baza danych zawierająca informacje o dostawach towarów może przechowywać nazwę i adres dostawcy w specjalnej liście dostawców współpracujących z naszą firmą oraz te same dane w wykazie zamówień. Taka sytuacja jest zazwyczaj niepożądana. Może ona prowadzić do: • niepotrzebnego zwiększenia miejsca zajmowanego przez bazę, • niepotrzebnego angażowania mocy obliczeniowych w przeprowadzanie operacji w wielu miejscach (np. zmiana adresu dostawcy będzie musiała być wykonana i na liście dostawcy i przy każdym zamówieniu), • powstania błędów i niezgodności danych gromadzonych w bazie z danymi rzeczywistymi (np. zapomnimy o zmianie adresu dostawcy przy zamówieniach z lipca). Czasem jednak zachodzi potrzeba replikacji danych. Może ona wynikać ze względów wydajnościowych lub ze względów bezpieczeństwa. Trzeba jednak zawsze pamiętać, że jeśli decydujemy się na zastosowanie (dopuszczenie) replikacji, to zawsze należy poświęcić jej szczególną uwagę, aby pozostawała pod kontrolą. Spójny model danych Baza danych powinna być zbudowana na podstawie spójnego modelu. Spójny model danych oznacza, że fragment rzeczywistości, którego dotyczy baza został zamodelowany w jednym z możliwych modeli oraz że dane i pojęcia (np. pojęcie faktury) reprezentowane w bazie będą ze sobą połączone tworząc jedną spójną logicznie całość. Spójny model należy zapewnić na etapie projektowania logicznego bazy, a jego wyegzekwowanie w czasie eksploatacji bazy jest możliwe dzięki narzuceniu na bazę odpowiednich warunków i więzów (np. związków, o których więcej w module 2). Współbieżny dostęp do danych Można sobie oczywiście wyobrazić bazę (a nawet znaleźć takie działające bazy), która będzie umożliwiać dostęp w danej chwili tylko jednemu użytkownikowi. Taka cecha nie powinna nikogo z nas dziwić, gdyż wiele baz papierowych, z których korzystamy działa w ten właśnie sposób. Nie jest to jednak wygodne, w szczególności jeśli baza ma służyć wielu użytkownikom. Problem ten zauważono już dawno i radzono sobie z nim powielając zbiory danych. Na przykład książka telefoniczna jest drukowana w wielu tysiącach egzemplarzy, dzięki czemu z danych w niej zawartych może jednocześnie korzystać wielu użytkowników. Nikogo jednak nie trzeba przekonywać, jak wiele wad ma to rozwiązanie. Systemy komputerowe pozwalają na dostęp do danych wielu użytkownikom jednocześnie. Oczywiście udostępnienie danych wielu osobom na raz stwarza dodatkowe problemy związane z zarządzaniem dostępem do tych danych i wymaga odpowiedniego zaprojektowania i organizacji bazy danych. Strona 5/11 W.Dąbrowski, P.Kowalczuk, K.Markowski Dodatek A ITA-101 bazy danych Podstawowe pojęcia Bezpieczeństwo danych Bazy danych są dzisiaj obecne w bardzo wielu miejscach i instytucjach, wspomagają nasze życie codzienne i biorą udział w licznych procesach biznesowych. Są w nich gromadzone informacje finansowe, księgowe, dane osobowe, transakcje bankowe itp. Z oczywistych powodów wymagają one ochrony. Dobra baza danych musi zapewniać odpowiednie mechanizmy identyfikacji, uwierzytelnienia, autoryzacji, poufności, integralności i dostępności. Rodzaje, klasyfikacja i przykłady SZBD Sprostanie wymaganiom stawianym dzisiaj bazom danych nie jest łatwe, dlatego budowane są złożone systemy zawierające zbiór gotowych narzędzi zapewniających odpowiedni dostęp, manipulację i aktualizację do danych gromadzonych w systemach komputerowych. Narzędzia te to Systemy Zarządzania Bazą Danych – w skrócie SZBD (ang. Database Management Systems – DBMS). Do najważniejszych cech charakteryzujących SZBD możemy zaliczyć: • operowanie na dużych i bardzo dużych zbiorach danych, • zarządzanie złożonymi strukturami, • działanie w długim cyklu życia. Schemat SZBD wraz z otaczającym go środowiskiem pokazuje poniższy Rys. 1 System Zarządzania Bazami Danych. Rys. 1 System Zarządzania Bazami Danych SZBD składa się z: • menedżera bazy danych (ang. DB manager) – jego rola polega na zarządzaniu obiektami bazy danych • procesora zapytań (ang. query procesor) – jego rola polega na przetwarzaniu zapytań (poleceń) kierowanych do bazy danych, • kompilatora definicji schematu (ang. pattern compiler) – jego rola polega na przetwarzaniu definicji obiektów znajdujących się w bazie na postać zrozumiałą dla menedżera bazy. Jak widać na rys. 1.1, SZBD komunikuje się jednej strony z menedżerem plików (ang. file manager), a z drugiej z warstwą wyższego poziomu. Menedżer plików jest odpowiedzialny za obsługę fizycznych nośników danych – zna i rozumie sposób organizacji tych nośników (systemu plików). Strona 6/11 W.Dąbrowski, P.Kowalczuk, K.Markowski Dodatek A ITA-101 bazy danych Podstawowe pojęcia W warstwie wyższego poziomu mogą natomiast znajdować się aplikacje użytkownika (ang. application), zapytania formułowane przez użytkownika (ang. user query), narzędzia do definiowania schematu bazy danych (ang. pattern description) itp. Na rynku dostępnych jest wiele Systemów Zarządzania Bazami Danych dostarczanych przez różnych producentów. Do najważniejszych należą: • • • • • • • • Oracle MS SQL Server DB2 Sybase Informix Adabase ObjectStore MS Access oraz wiele innych. Kryteria doboru SZBD Wybór odpowiedniego systemu SZBD nie jest łatwy. Przed podjęciem decyzji warto jest rozważyć wiele aspektów związanych zarówno z tym co baza danych ma robić, jak i innymi uwarunkowaniami po stronie dostawcy systemu i jego użytkownika. Do najważniejszych kryteriów doboru SZBD należą: • Wydajność (ang. performance) – określa, jak szybko system będzie reagował na wydawane mu polecenia, ile jednocześnie będzie potrafił obsłużyć zleceń czy użytkowników. • Skalowalność (ang. scalability) – określa, jak zmieni się działanie systemu (jego wydajność), jeśli wzrośnie liczba użytkowników lub danych. Cecha ta określa również możliwość adaptacji systemu do nowych warunków obciążenia i możliwość jego rozbudowy w celu sprostania nowym, większym obciążeniom. • Funkcjonalność (ang. functionality) – określa, jakie funkcje są dostępne w systemie. Warto zwrócić uwagę zarówno na funkcje wykorzystywane przez użytkownika, jak i administratora czy projektanta takiego systemu. Najczęściej brak odpowiednich funkcji – szczególnie potrzebnych projektantom i administratorom pociąga za sobą konieczność dokupienia dodatkowych narzędzi i zwiększa koszty systemu. • Zgodność ze standardami – oznacza spełnienie przez system pewnych zasad i reguł uznanych za powszechne, czyli standardów (np. standard języka, standard protokołu, itp.). Spełnienie powszechnie stosowanych standardów uniezależnia nas od dostawcy systemu i pozwala na dokładanie do niego innych elementów proponowanych przez różnych dostawców (oczywiście jeśli są godne ze standardem). • Łatwość użycia (ang. usability) – jest ważną cechą systemu. Zdarzają się systemy o bardzo dobrych parametrach wydajnościowych lub dużej niezawodności, które jednak są tak trudne w obsłudze, że użytkownicy z nich rezygnują. Ocena tej cechy zależy od użytkownika systemu, jego przygotowania i doświadczenia. Jest więc cechą subiektywną i ten sam system przez różnych użytkowników może być zakwalifikowany jako łatwy lub trudny w użyciu. • Niezawodność (ang. reliability) – oznacza, jak często system przestaje działać. Oczywiście, im większa niezawodność systemu, tym większe są jego koszty wytworzenia. Trzeba więc wyważyć odpowiednią proporcję między niezawodnością systemu a potrzebami użytkownika. Choć każdy chciałby, aby jego system działał bezbłędnie (był niezawodny) w jak największym stopniu, to jednak często jesteśmy gotowi zaakceptować przestój systemu trwający godzinę w zamian za przystępną cenę. • Wspomaganie (ang. support) – oznacza zapewnienie odpowiedniej pomocy przez dostawcę systemu. Z całą pewnością jest to bardzo ważna cecha systemu. Z pewnością warto zapłacić Strona 7/11 W.Dąbrowski, P.Kowalczuk, K.Markowski Dodatek A ITA-101 bazy danych Podstawowe pojęcia wyższą ższą cenę za produkt, którego producent zapewnia dobry i stabilny serwis. Nie ma przecież systemów niezawodnych w stu procentach ani systemów, które nie kryją tajemnic o sposobie ich użytkowania. • Środowisko (ang. environment) environment – określa, na jakim sprzęcie czy systemie operacyjnym będzie działać nasz system. • Cena (ang. price) – oznacza nie tylko koszt zakupu systemu, ale również wszystkie pozostałe koszty związane z wdrożeniem tego systemu oraz przewidywanymi kosztami jego eksploatacji. Koszt zakupu jest często często tylko elementem składowym ogólnej ceny systemu. Użytkownicy baz danych i ich rola w systemie Wśród najważniejszych grup użytkowników systemów SZBD możemy wyróżnić następujące grupy: • Administrator systemu (ang. system administrator) – jego zadaniem jest jes nadzór nad całym systemem. To on definiuje bazy danych w systemie, zakłada użytkowników o charakterze globalnym itp. • Administrator bazy danych (ang. database administrator) – administruje jedynie bazą, którą ma pod swoją opieką. Ma on uprawnienia do zakładania i administrowania obiektami bazy ale tylko w obrębie danej bazy danych. • Programista aplikacji (ang. application programmer) – jego rolą jest pisanie kodu, który będziee wspomagał użytkowanie bazy (np. procedur składowanych). • Operator – czuwa nad codzienną eksploatacją bazy. Czuwa nad wykonaniem kopii bezpieczeństwa i wykonuje inne proste, codzienne czynności admnistracyjne. • Użytkownik (ang. user) user – to ktoś wykonujący czynności nie wchodzące w zakres obowiązków pozostałych grup. Modele struktury logicznej logiczne bazy danych Modele struktury logicznejj bazy danych mogą być bardzo różne. Modele te starają się odzwierciedlić rzeczywistość, ść, której baza dotyczy oraz mają zasadniczy wpływ na implementacje i działanie bazy. Dzisiaj najpopularniejszym modelem stosowanym w SZBD jest model relacyjny. Obok niego funkcjonują też inne modele – starszy model hierarchiczny i zyskujący sobie powoli popularność model obiektowy. Model hierarchiczny Model hierarchiczny przypomina odwrócone drzewo. Jeden z elementów pełni role korzenia, a pozostałe tworzą gałęzie i liście. W modelu tym występują związki między obiektami obiektam zwane związkami ojciec-syn. Związki takie charakteryzują się tym, że obiekt nadrzędny (ojciec) może pozostawać w związku z wieloma innymi obiektami podrzędnymi (synowie), natomiast tylko z jednym obiektem nadrzędnym w stosunku do niego (jego ojcem). Rys. 2. Model hierarchiczny Strona 8/11 W.Dąbrowski, P.Kowalczuk, K.Markowski Dodatek A ITA-101 bazy danych Podstawowe pojęcia Na Rys. 2 przedstawiono przykład modelu hierarchicznego dla bazy przechowującej informacje o wykładach, wykładowcach oraz studentach uczęszczających na te wykłady. Model hierarchiczny ma jednak wiele wad. w Do najważniejszych należą: • niemożność zapisania w bazie danych, które nie mają ojca (np. wykładowcy, który w danym roku nie prowadzi wykładów), wykładów) • nadmiarowość danych (np. dane o przedmiocie są wpisane w bazie dwa razy – w wykładach i przedmiotach), • brak możliwości obsługi bardziej złożonych związków między obiektami (np. związków „wiele do wiele”). Zaletą tego modelu jest łatwość (a co za tym idzie szybkość) dojścia do szukanych danych (idziemy od korzenia wzdłuż gałęzi aż do celu), ale pod warunkiem, warunkiem że znamy namy strukturę tego modelu. Model hierarchiczny stosowany jest dziś w systemach plików (struktura katalogów ma strukturę drzewiastą) oraz w wielu popularnych aplikacjach (np. MS Outlook, Lotus Notes). Model relacyjny W celu wyeliminowania wad modelu hierarchicznego opracowano na początku lat siedemdziesiątych nowy model zwany modelem relacyjnym.. Podstawy teoretyczne dla modelu relacyjnego opracował dr E. Codd pracując w firmie IBM i opublikował w roku 1970 w książce pod tytułem Relacyjny model logiczny dla dużych banków danych. danych. Model ten oparty jest na silnych podstawach matematycznych, matematycznych głównie teorii mnogości. Idea modelu relacyjnego bazuje na pojęciu relacji – czyli tabeli.. Wszystkie dane w tym modelu są przechowywane w tabelach (relacjach). Tabele Tabele te mogą być ze sobą powiązane tak zwanymi związkami.. Rysunek rys. 1.3 1. przedstawia przykład modelu relacyjnego. Zasadniczą wadą modeli relacyjnych jest ich znaczna rozbieżność w stosunku do świata rzeczywistego, który mają modelować. Pozwalają za to na na efektywne przechowywanie danych, obniżają redundancję danych (powtarzalność) i pozwalają na łatwe wyszukiwanie danych. Rys. 3. Model relacyjny Bazy danych oparte na modelu relacyjnym są obecnie najbardziej rozpowszechnionym rodzajem rodza baz danych. Model obiektowy Obecnie technologią, która pozwala najlepiej odwzorowywać świat rzeczywisty w projektowaniu oprogramowania, jest technologia obiektowa. O jej sukcesie świadczy popularność takich języków programowania jak C++ czy Java. Technologia obiektowa jest obecnie dominującym narzędziem przy tworzeniu dużych i złożonych projektów. Strona 9/11 W.Dąbrowski, P.Kowalczuk, K.Markowski Dodatek A ITA-101 bazy danych Podstawowe pojęcia Obiektowość nie ogranicza się jedynie do nowego sposobu organizacji kodu w językach programowania. Jest ona pewną ideologią w informatyce, której cechą jest chęć dopasowania modeli pojęciowych stosowanych w informatyce do modelu świata postrzeganego przez człowieka. Jest to kolejny krok w ewolucji kontaktów człowiek-maszyna (a ściślej programista-komputer). Śledząc, nawet pobieżnie, rozwój języków programowania widzimy, że ewolucja ta przebiega ciągle w stronę ułatwiania życia człowiekowi. Wynika to z rozwoju technologii i związanego z tym zwiększania złożoności modelowanych procesów. Bez wprowadzania nowych metod, wyższych poziomów abstrakcji w projektowaniu i programowaniu , człowiek szybko staje się najsłabszym ogniwem w procesie tworzenia oprogramowania. Większość producentów systemów relacyjnych baz danych wyposaża obecnie swoje produkty w rozszerzenia obiektowe. Są one implementowane w różnym stopniu i zakresie. Obejmują takie funkcje jak obsługa abstrakcyjnych typów danych, klas, przechowywanie obiektów, wyzwalacze, procedury składowane. Podstawą takiego systemu jest najczęściej ten sam „silniczek”, jaki był stosowany w wersji relacyjnej – dobry i sprawdzony, ale pisany z myślą o modelu relacyjnym, a nie obiektowym. Systemy tego typu nie spełniają w pełni paradygmatu obiektowości, mogą być traktowane raczej jako rozszerzenie systemów relacyjnych o pewne atrakcyjne cechy umożliwiające efektywne tworzenie aplikacji, a nie jako pełnowartościowe systemy obiektowe. Systemy w pełni obiektowe zrywają natomiast z założeniami modelu relacyjnego i opierają się w całości na technologii obiektowej. Zapewniają tradycyjną funkcjonalność bazy danych (trwałość, integralność danych, obsługę wielodostępu, odtwarzanie danych) przy zastosowaniu obiektowego modelu danych. Wiele tego typu systemów obsługuje również bardziej zaawansowane funkcje jak np. obsługa rozproszonych baz danych. Systemy obiektowych baz danych są najlepiej dopasowane do potrzeb zorientowanych obiektowo aplikacji przetwarzających duże ilości danych oraz obsługujących wielu użytkowników. Istniejące rozwiązania obejmują różne zakresy funkcjonalności – od prostych systemów przeznaczonych do obsługi małej liczby użytkowników, dostosowanych do jednego języka programowania, aż do bardzo zaawansowanych rozwiązań, w których wydajny serwer obiektowej bazy danych jest sercem całego systemu serwera aplikacji. Należy jednak zwrócić uwagę, że systemy obiektowe ciągle stanowią przedmiot badań i nie osiągnęły jeszcze pełnej dojrzałości. Podsumowanie Współczesne systemy informatyczne wykorzystują bazy danych, od małych baz budowanych specjalnie na ich potrzeby, aż po duże i bardzo duże uniwersalne bazy i systemy baz danych. W zasadzie trudno byłoby znaleźć program komputerowy, który nie korzystałby z baz danych. Nie każdą strukturę przechowującą dane możemy jednak uznać za bazę danych. Baza danych musi charakteryzować się odpowiednimi cechami. Ponieważ dzisiaj przed bazami danych stawia się coraz większe wymagania związane z wydajnością, bezpieczeństwem itd. Wymaganiom tym mogą sprostać dopiero Systemy Zarządzania Bazami Danych, które są wyposażone w odpowiednie mechanizmy zapewniające bezpieczeństwo, spójność, wydajność i łatwość obsługi. Modele baz danych są różne. Do najpopularniejszych należą model hierarchiczny, relacyjny i obiektowy. Każdy z nich nadaje się do innych celów, a najbardziej rozpowszechnionym modelem w bazach spotykanych w rozwiązaniach przemysłowych jest model relacyjnym. Nasze zajęcia poświęcone są właśnie temu modelowi. Strona 10/11 W.Dąbrowski, P.Kowalczuk, K.Markowski Dodatek A ITA-101 bazy danych Podstawowe pojęcia Uwagi dla studenta W tym module nie jest przewidziane laboratorium. Jeśli chcesz się przekonać, czy jesteś gotowy do wykonywania laboratoriów w kolejnych modułach, zastanów się i odpowiedz na następujące pytania: • czy rozumiesz, czym jest baza danych, • czy potrafisz uzasadnić stosowanie baz danych do przechowywania danych zamiast innych struktur, • czy umiesz wymienić podstawowe cechy baz danych, • czy rozumiesz założenia modelu relacyjnego? Jeśli potrafisz na te pytania odpowiedzieć twierdząco, to jesteś przygotowany do dalszej drogi przez świat baz danych. Jeśli nie, to zapoznaj się ponownie z uwagami i poradami zawartymi w tym module. Upewnij się, że rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. Dodatkowe źródła informacji 1. Jeffrey D. Ullman, Jennifer Widom, Podstawowy wykład z systemów baz danych, WNT, 2000 Książka zawiera pełny akademicki wykład z baz danych. Znajdziesz w niej szerokie omówienie wszystkich przedstawianych w tym module pojęć wraz z licznymi przykładami. Jeśli jesteś zainteresowany odrobiną teorii i chciałbyś dogłębnie zrozumieć jak działają bazy danych to jest to książka dla Ciebie. 2. Rebeca R. Riordan, Projektowanie relacyjnych baz danych, Microsoft Press, 2000 Książka poświęcona jest praktycznym aspektom projektowania relacyjnych baz danych w środowisku aplikacji firmy Microsoft. Rebeca Riordan znana jest z łatwego i zrozumiałego języka i łatwości tłumaczenia zagadnień trudnych. Ten swój talent wykorzystuje również w tej pozycji. Jeśli nie interesuje Cię zgłębianie teoretycznych podstaw działania baz danych, a bardziej nastawiony jesteś na praktyczne wykorzystanie wiedzy, to jest to książka dla Ciebie. 3. C.J.Date, Wprowadzenie do systemów baz danych, WNT, 2000 Jest to pełny podręcznik do wykładu z baz danych znanego i cenionego na całym świecie autora. Znajdziesz w nim szersze spojrzenie na problematykę budowy i modelowania baz danych. Polecamy ją wszystkim, którzy chcieliby poszerzyć swoje wiadomości z tego zakresu. Strona 11/11