Co nowego w SQL 2005

Premierze VS.NET 2005 będzie towarzyszyć premiera SQL 2005, który powoli zaczyna być jednym z ważniejszych elementów systemu operacyjnego. Warto przyjrzeć się, co oferuje nowa platforma bazodanowa - zwłaszcza że równocześnie Microsoft wprowadził w nowej wersji ADO.NET kilka nowych elementów, które w dużym stopniu uproszczą pisanie aplikacji bazodanowych.

Premierze VS.NET 2005 będzie towarzyszyć premiera SQL 2005, który powoli zaczyna być jednym z ważniejszych elementów systemu operacyjnego. Warto przyjrzeć się, co oferuje nowa platforma bazodanowa - zwłaszcza że równocześnie Microsoft wprowadził w nowej wersji ADO.NET kilka nowych elementów, które w dużym stopniu uproszczą pisanie aplikacji bazodanowych.

Poprzednia wersja SQL-a powstała w 2000 roku. Od tego czasu co prawda Microsoft wprowadzi) wiele różnych dodatków do SQL-a, (głównie związanych z obsługą XML), ale bazodanowy motor nie zmieniał się przez te niemal 5 lat.

Nowa wersja SQL Server 2005 (początkowo miała nazwę kodową Yukon) wprowadza bardzo dużo zmian - nieporównywalnie więcej niż przy przejściu pomiędzy poprzednimi edycjami SQLServer. Zmieniają się: sposób programowania, administracja, obiekty służące do programowej administracji, Business Intelligence. Praktycznie -trudno znaleźć element, który nie został rozbudowany lub zmieniony.

Największa zmiana ma związek z wprowadzeniem możliwości programowania procedur przechowywanych, funkcji i typów w .NET.

Procedura przechowywana to specyficzny kod, który działa najbliżej jak to jest możliwe serwera bazodanowego. Może np. pośredniczyć przy zapisie danych, wybierać wartości wg skomplikowanych złączeń itp. Procedury przechowywane zazwyczaj pisane są w T-SQL (dialekt SQL w SQL Server). Jednak ten język (nawet po rozszerzeniach wprowadzonych w najnowszej wersji serwera) nie za bardzo nadaje się do tworzenia skomplikowanej logiki - po prostu dostosowany jest do pracy na zbiorach danych, a nie tworzenia rozbudowanych warunków, implementacji algorytmów itp.

Standardowo tego typu elementy obliczeniowe były albo przerzucane na klienta (w aplikacji klient/serwer), albo na serwer aplikacyjny. Jednak w obu tych przypadkach dane musiały być pobierane z SQL Server, przesyłane gdzieś i dopiero potem przetwarzane. Teraz-dzięki temu, że można w SQL osadzić kod .NET, to co wymaga skomplikowanych obliczeń może być napisane w C#, a przy tym (dzięki dosyć zmyślnemu połączeniu motoru CLR w przestrzeni adresowej SQL-a i specjalnego interfejsu dostawcy ADO.NET) nie ma to istotnego wpływu na wydajność. Istotną zaletą .NET jest to, że tu kod przed uruchomieniem jest zawsze kompilowany - procedury T-SQL są interpretowane; przechowywany jest plan wykonania (z których indeksów warto skorzystać, w jakiej kolejności wykonywać złożenia), ale np. instrukcje warunkowe nie są kompilowane z wyprzedzeniem.

W Yukon znacznie poprawiono obsługę tzw. wyszukiwania pełnoteksto-wego pozwalającego znaleźć m.in. podobny ciąg znaków w obrębie całej bazy danych. Po pierwsze, baza full-text search stanowi integralną część bazy danych w SQL 2005. Dotychczas był to indeks w oddzielnym pliku, o okresowo synchronizowanej zawartości. Microsoft przeprowadzał testy na tabelach z ponad 2 miliardami wierszy. Co ciekawe, nowe algorytmy indeksowania zapewniają bardzo ładną (niemal liniową) ska-lowalność rozwiązania. DDL (Data Definition Language) pozwala elegancko zarządzać wyszukiwaniem pełnotekstowym. Podczas wyszukiwania można korzystać z tezaurusa (co ważniejsze - prawdopodobnie będzie można samemu konstruować tego typu słowniki). Uproszczono też składnię, pozwalając w jednym wyrażeniu określić, że przeszukiwany jest tekst znajdujący się w kilku kolumnach.

Obsługiwane jest też wyszukiwanie w dokumentach XML przy użyciu indeksów pełnotekstowych.

Dużo zmian pojawiło się w TSQL. Obsługiwany jest standard SQL-99. Programistów może ucieszyć obsługa tzw. Common Table Expression, czyli specjalnych wyrażeń -aliasów do złożonych podzapytań (także re-kurencyjnych), które znacznie skracają całe wyrażenia SQL. Obsługiwane są także wyrażenia z SQL-99 OLAP Extension. Dostępny jest operator PIVOT (przypominający znany z Access TRANSFORM). Przekształca on zbiór wierszy w zbiór kolumn. Nowością będzie UNPIVOT - operator wykonujący odwrotną funkcję. W ten sposób znacznie uproszczone jest tworzenie rozwiązań, gdy nieznana jest liczba kolumn (np. tak jest w wielu otwartych schematach bazodanowych, gdzie użytkownicy decydują o atrybutach). Operator APPLY pozwala wyliczać wartości na podstawie funkcji tabelarycznej (czyli operującej na zbiorach) i wpisać je do zestawu wyników zwracanych przez wyrażenie select. Każda operacja zmieniająca dane może wygenerować zbiór rekordów, które fizycznie zostały zmienione. Dotychczas tabele Deleted/Inser-ted były dostępne tylko w wyzwalaczach (trigger) -teraz można stworzyć znacznie czytelniejsze algorytmy, nie przenosząc części obliczeń do wyzwalaczy.

Bazą danych SQL Servera 2005 można wygodnie zarządzać z poziomu Visual Studio 2005.

Bazą danych SQL Servera 2005 można wygodnie zarządzać z poziomu Visual Studio 2005.

Obsługa błędów w TSQL może być oparta na schemacie try/catch - dokładnie tak jak jest w C# czy Javie. Zmienna @@error (dotychczas po wykonaniu każdej operacji w zasadzie należało sprawdzać, czy dana czynność zakończyła się sukcesem) dostępna jest w bloku catch i zawiera informacje o przyczynie niepowodzenia. Można też wymusić, by wyjątek powodował automatyczne wycofanie transakcji. Niestety ten mechanizm można stosować tylko w procedurach przechowywanych, a nie w funkcjach.

Zmieniono również zasady rekompilacji. W SQL 2000 rekompilowany byt caty blok - procedura przechowywana, funkcja czy zadanie wsadowe. W 2005 wykrywane jest, która linia wymaga rekompilacji - a pozostała część wygenerowanego planu pozostaje bez zmian. Znacznie skróci to średni czas wstępnej kompilacji funkcji przed pierwszym wykonaniem po zmianach.

Zgodnie z zapowiedziami Microsoft wprowadzi) oficjalny interfejs do meta-danych w SQL 2005. W zasadzie programiści (raczej administratorzy) nie muszą analizować tajemniczych tabel systemowych. Jednak stare tabele (raczej teraz widoki) systemowe będą dalej dostępne, tak by zachować zgodność w dót. Nowym elementem będzie możliwość określania szczegółowych praw dostępu do odczytu metadanych opisujących strukturę bazy. XML w Yukon ma dwa zastosowania. Po pierwsze, tak jak w SQL 2000 z SQLXML3 dostępne są widoki XML-owe na struktury relacyjne. Można określić, w jaki sposób dane wyrażenie select będzie przekształcane na dokument XML.

Równocześnie wprowadzono nowy typ danych do przechowywania w kolumnie - XMLData. Można go wykorzystywać jako typ zmiennej czy typ kolumny. XMLData może mieć określoną strukturę (schematem W3C Schema), a także określony typ (upraszczając - przestrzeń nazw). Może też być wolną strukturą XML-gdzie po prostu może być przechowany dowolny, prawidłowy (valid) dokument XML. Na takiej kolumnie można zdefiniować specjalny indeks (podając wyrażenia XPath/Xquery, które zwykle są używane do wybierania wartości). Co ciekawe, indeks może być także zbudowany na dowolnych atrybutach, wyrażeniach czy ścieżkach-wten sposób można dostroić bazę, tak by (jak w świecie relacyjnym) indeksowane były te elementy, które przyspieszą wyszukiwanie.

XML przyda się np. wtedy, gdy potrzeba opisać jakieś elementy, ale gdy nie wiemy dokładnie, jaka będzie struktura tego opisu. Wiemy za to, że pełni on rolę tylko informacyjną i nie będzie np. wyznaczał związków pomiędzy tabelami (takie informacje lepiej zapisywać jako pola połączone odpowiednimi kluczami). Te dane mogą być też aktualizowane, np. można zmieniać wartość jednego atrybutu, który znajduje się w dokumencie XML przechowywanym w danym wierszu tabeli. Innymi słowy, w środku relacyjnej bazy SQL Server 2005 Yukon mieści się hierarchiczna baza XML.

Usługi

Microsoft jako część Windows Server oferuje specjalny komponent realizujący tzw. kolejkę komunikatów - Microsoft Message Queuing. W Yukon jest dostępny specjalny komponent - Service Broker, który proponuje analogiczną funkcjonalność, ale do przechowywania komunikatów wykorzystuje bazę SQL. Dzięki temu kolejka jest np. częścią kopii zapasowej bazy danych i podobnie jest zarządzana. Warto dodać, że model budowy aplikacji, w których poszczególne moduły przekazują sobie komunikaty, jest coraz bardziej powszechny - w naturalny sposób wymusza separację usług, a dodatkowo zapewnia wysoką skalowalność rozwiązania, nie nakładając za dużych wymagań na infrastrukturę serwerową. Pozwala zatem efektywnie konstruować luźno powiązane komponenty i doskonale wpasowuje się w Service Oriented Architecture (SOA).

Service Broker gwarantuje dostarczenie komunikatu nawet wtedy, gdy aplikacja nie jest cały czas dostępna w sieci. Co więcej - gwarantuje że komunikat zostanie wysłany dokładnie raz. Komunikaty powiązane są automatycznie grupowane, co pozwala, by aplikacja łatwo koordynowała komunikację z różnymi usługami. Service Broker pozwala, by tylko jeden proces (naraz) czytał komunikaty z danej grupy konwersacji.

Drugim ciekawym komponentem jest Microsoft SQL Server Notification Services. Jest to platforma, która w dużym uproszczeniu pozwala informować subskrybentów o zdarzeniach zachodzących w bazie danych. Notification Services mogą wysyłać spersonalizowane informacje do szerokiej gamy urządzeń - mogą powiadamiać przez e-mail, wysyłać zawiadomienia dla PDA i komunikaty na komunikator Microsoft Messenger.

SQL Server 2005 Enterprise z dodatkowymi usługami to więcej niż baza danych - to rozbudowane centrum przetwarzania informacji.

SQL Server 2005 Enterprise z dodatkowymi usługami to więcej niż baza danych - to rozbudowane centrum przetwarzania informacji.

Równocześnie Notification Services pozwalają na osiągnięcie bardzo ciekawej funkcjonalności w aplikacjach ADO.NET. NS mogą powiadomić aplikacje o tym, że jakiś zbiór danych uległ modyfikacji. Dzięki temu, bez kosztownych kursorów serwerowych, można napisać aplikację, gdzie użytkownik na formularzu do wprowadzania faktur będzie widział ostatnio wprowadzony dokument. W momencie gdy ktoś inny doda nowy - u wszystkich klientów ta informacja zostanie automatycznie odświeżona. Niestety, Service Broker i Notification Services nie są dostępne w SQL Express Edition.

SQL Server 2005 zawiera też usługi raportowania (nie wymagają oddzielnych licencji). Jest to specjalny komponent, który instaluje aplikację WWW umożliwiającą dostęp i generowanie raportów. Ponadto zawiera moduł zarządzania - określania uprawnień itp. Raporty są projektowane w Visual Studio 2005. Ich definicja zapisywana jest w specjalnym języku XML Report Definitor Language. Możliwości tego narzędzia są bardzo podobne do innych dostępnych na rynku - projektant może tworzyć dowolne układy elementów, definiować tabele, widoki macierzowe (gdzie kolumny także są generowane na podstawie kolejnych wierszy). Można też pokazywać wykresy (komponent ma podobne możliwości jakie są dostępne w Excelu). Bez problemu tworzone są struktury master-detail. Bardzo łatwo pisze się raporty z możliwością drill-down, czyli takie, gdzie rozpoczynamy analizę od danych ogólnych, a potem chcemy zapoznać się ze szczegółowymi informacjami.


Zobacz również