pobierz plik referatu

Transkrypt

pobierz plik referatu
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
Rozdział 21
w
Rozwój standardu SQL i jego implementacji
1 Wstęp
da
.b
w
w
Streszczenie. Opublikowany w roku 2004 standard SQL:2003, podobnie jak
jego poprzednie wersje, wprowadza szereg istotnych zmian. Standard proponuje rozwiązania, które są podstawą rozwoju systemów a jednocześnie jest
punktem odniesienia dla oceny implementacji SZBD. Część tych zmian została wymuszona przez niezależnie wprowadzone rozwiązania w istniejących
na rynku systemach zarządzania bazami danych. W rozdziale zostały przedstawione etapy rozwoju standardu SQL. Dokonano oceny wpływu standardu
SQL na rozwój jego implementacji oraz omówiono elementy mające wpływ
na rozwój standardu SQL.
2 Standard SQL:1999
pl
s.
Język SQL został stworzony na potrzeby pierwszych systemów zarządzania relacyjnymi
bazami danych w końcu lat 70-tych ubiegłego wieku. W roku 1982 pojawiły się elementy
DML i DDL, by w roku 1986 stać się standardem ANSI, a rok później ISO. Poprawiona
wersja standardu została opublikowana w roku 1989 i jest znana pod nazwą SQL-89. Celowo pozostawiono w niej wiele niedomówień, co wymusiło wiele dyskusji nad kształtem
standardu, czego rezultatem stało się opublikowanie w roku 1992 standardu SQL-92. Od
tego czasu trwa nieprzerwany i intensywny rozwój tego standardu. Kolejne wersje pojawiają się coraz częściej (SQL:1999 po siedmiu latach, SQL:2003 już po pięciu). Pomimo krótkiego czasu, jaki upłynął od publikacji najnowszej wersji standardu, trwają już prace nad
jego kolejną wersją.
Rozpowszechnienie się Internetu i rozwój technologii z nim związanych spowodował
wzrost wymagań użytkowników w stosunku do aplikacji i systemów. W związku z rozwojem technologii multimedialnych i znacznym zwiększeniem liczby użytkowników usług
informatycznych, wzrosły również rozmiary danych przechowywanych w systemach. Jednocześnie nastąpił intensywny rozwój metodyk obiektowego wytwarzania oprogramowania. Miało to wpływ na wzrost złożoności przechowywanych danych. Pojawiły się również
Lech Tuzinkiewicz, Jakub Fedyczak: Politechnika Wrocławska,
Instytut Informatyki Stosowanej,
Wybrzeże Wyspiańskiego 27, 50-370 Wrocław, Polska
email: [email protected],
[email protected]
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
L. Tuzinkiewicz, J. Fedyczak
w
potrzeby tworzenia nowych typów danych, dostosowanych do wymagań użytkowników.
Zdalne przetwarzanie danych zwiększyło wymagania w zakresie niezawodności systemów
oraz spójności i bezpieczeństwa danych. W konsekwencji zaproponowano rozszerzenie
standardu SQL-92, stosownie do potrzeb rynku, czego wynikiem było opublikowanie standardu SQL:1999.
Standard SQL:1999 wprowadził szereg zmian w stosunku do wersji SQL-92. Poniżej
przedstawiono najważniejsze z nich wg [1], [3];
− Cztery nowe typy danych:
− LARGE OBJECT (LOB), którego warianty to CHARACTER LARGE OBJECT (CLOB)
oraz BINARY LARGE OBJECT (BLOB). Typ LOB służy do przechowywania danych
o większych rozmiarach. Nie mogą one być używane w klauzulach PRIMARY
KEY oraz UNIQUE oraz w klauzulach GROUP BY i ORDER BY,
− BOOLEAN,
− typ złożony ARRAY, który umożliwia przechowywanie tabel o stałej długości
w pojedynczej kolumnie,
− typ złożony ROW, który umożliwia deklarowanie “podkolumn” w wierszach.
− Typy rozróżnialne (ang. distinct types) ułatwiają weryfikację semantyczną typów.
− Predykaty SIMILAR oraz DISTINCT. SIMILAR wprowadza możliwość stosowania
bardziej złożonych wyrażeń regularnych niż oferuje to predykat LIKE, natomiast
DISTINCT w przeciwieństwie do UNIQUE traktuje dwie wartości NULL jako tożsame.
− Rozszerzenie zakresu widoków, poprzez które możliwa jest zmiana tabel bazowych.
− Zapytania rekursywne.
− Subtransakcje (ang. savepoints) – umożliwiają wycofanie transakcji do wcześniej
ustalonego punktu, bez konieczności wycofania całej transakcji.
− Role (ang. roles), czyli mechanizm zabezpieczeń, który wprowadza możliwość
przyznawania uprawnień grupom użytkowników.
− Wyzwalacze, czyli mechanizm sterowany zdarzeniami, służący do zapewnienia
integralności danych.
− Typy strukturalne definiowane przez użytkownika. Typy te mogą być zagnieżdżone,
posiadają mechanizm polimorfizmu, podlegają dziedziczeniu. Ponadto możliwe jest
zdefiniowanie metod operujących na danych tego typu.
− Typ specjalny REF – umożliwia przechowywanie wskaźnika do instancji typu strukturalnego.
Wprowadzenie typów LOB wynikało z rosnącej potrzeby przechowywania w bazach danych
obszernych treści (w tym multimedialnych) osiągających rozmiary wielu megabajtów.
W związku z potrzebą stosowania złożonych typów danych, wprowadzono typy rozróżnialne, typy złożone i rozszerzenia obiektowe. Rosnąca ilość danych i ich złożoność wymuszała istnienie wyrafinowanych mechanizmów wyszukiwania, pozyskiwania i modyfikacji danych. W związku z powyższym wprowadzono m. in. predykaty SIMILAR oraz DISTINCT
(używane w klauzuli WHERE), rekursywne kwerendy oraz rozbudowano możliwości wprowadzania zmian danych poprzez widoki. Złożoność operacji oraz rosnąca liczba użytkowników korzystających jednocześnie z dużych baz danych, wymusiła wprowadzenie usprawnień w zakresie przetwarzania transakcji (savepoints), jak i zabezpieczeń dostępu do danych (roles) oraz nowe mechanizmy utrzymania integralności danych (wyzwalacze).
da
.b
w
w
pl
s.
206
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
Rozwój standardu SQL i jego implementacji
3 Standard SQL:2003
w
Nowe wymagania wynikające z rozpowszechnienia hurtowni danych, analiz danych wielowymiarowych (OLAP, Data Mining), a także standardu XML, wymusiły aktualizację standardu SQL. W rezultacie opracowano standard SQL:2003. Poniżej omówiono najważniejsze zmiany wg [2], [3], [4], [5].
Wprowadzono nowe typy danych:
− BIGINT, typ zgodny z INTEGER oraz SMALLINT, ale o zwiększonym zakresie
(zależnym od implementacji). Typ dopuszcza wszystkie operacje, jakie są dozwolone
na dwóch poprzednikach.
− MULTISET - wielozbiór, czyli nieuporządkowana kolekcja elementów, w której dopuszcza się powtórzenia. Standard nie narzuca określonego rozmiaru wielozbioru,
może on być zagnieżdżony.
Definiowanie wielozbioru odbywa się w dwojaki sposób:
w
w
MULTISET[1,2,3,4]
MULTISET (SELECT oceny FROM kursy)
Wielozbiór może zostać użyty jako źródło danych w klauzuli
UNNEST:
FROM
za pomocą operatora
SELECT T.A,T.A*2 AS x2 FROM UNNEST(MULTISET[4,3,2,1]) AS T(A)
da
.b
MULTISET wspiera operacje rzutowania na tablicę (ARRAY) lub inny wielozbiór z elementami o zgodnych typach. Wspierane jest także usuwanie duplikatów, zliczanie elementów,
wyznaczanie sumy, różnicy oraz iloczynu. Dodane są również nowe funkcje agregujące:
COLLECT – tworzy wielozbiór z wartości argumentu w każdym wierszu grupy, FUSION –
tworzy unię wielozbiorów z każdego elementu grupy, INTERSECTION – tworzy część
wspólną z wielozbiorów z każdego elementu grupy. Oto przykład:
Tabela 1. Tabela PRACOWNICY
JEZYKI
MULTISET['angielski','niemiecki','rosyjski']
MULTISET['angielski','szwedzki','niemiecki']
MULTISET['japoński','angielski']
pl
s.
NAZWISKO
'Kowalski'
'Nowak'
'Abacka'
Dla tabeli PRACOWNICY (tabela 1) następująca kwerenda:
SELECT
COLLECT(NAZWISKO) AS WSZYSCY_PRACOWNICY,
FUSION(JEZYKI) AS WSZYSTKIE_JEZYKI,
INTERSECTION(JEZYKI) AS WSPOLNE_JEZYKI,
FROM
PRACOWNICY;
zwróci rezultat widoczny w tabeli 2.
Tabela 2. Przykład działania funkcji COLLECT, FUSION i INTERSECTION
WSZYSCY_PRACOWNICY
MULTISET['Kowalski',
'Nowak','Abacka']
WSZYSTKIE_JEZYKI
MULTISET['angielski',
'angielski','angielski',
'rosyjski','szwedzki',
'japoński','niemiecki',
'niemiecki']
WSPOLNE_JEZYKI
MULTISET[
'angielski']
207
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
L. Tuzinkiewicz, J. Fedyczak
SQL:2003 wprowadza również następujące funkcje dla MULTISET:
− CARDINALITY – zwraca liczbę elementów
− SET – tworzy zbiór z wielozbioru – usuwa duplikaty
− ELEMENT – zwraca element z jednoelementowego wielozbioru
− UNNEST – przekształca wielozbiór w tabelę
Przykładowo wyrażenie:
SELECT SUM (t.c) FROM UNNEST (MULTISET (2, 3, 5, 7)) AS t(c)
w
zwróci sumę elementów wielozbioru. Z kolei wyrażenie:
v1 MULTISET [UNION|EXCEPT|INTERSECT] [ALL|DISTINCT] v2
w
w
pozwala uzyskać sumę, róznicę bądź część wspólną wielozbioru.
MULTISET dopuszcza dwa operatory porównujące = oraz <>. Oprócz tego dopuszczalne są
następujące predykaty:
− e1 [NOT] MEMBER OF v1 – przynależność elementu do wielozbioru,
− v1 [NOT] SUBMULTISET OF v2 – zawieranie się wielozbiorów,
− v1 IS [NOT] A SET – badanie istnienia duplikatów.
SQL:2003 wprowadza również funkcje tabelowe, których rezultatem jest ROW MULTISET.
Przykład funkcji tabelowej zwracającej tabelę z pracownikami danego wydziału:
da
.b
CREATE FUNCTION PRACOWNICY_WYDZIALU (KODWYDZIALU CHAR(3))
RETURNS
TABLE (PRACNR CHAR(6),NAZWISKO VARCHAR(15),IMIE VARCHAR(12))
LANGUAGE SQL READS SQL DATA DETERMINISTIC
RETURN
TABLE(
SELECT PRACNR, NAZWISKO, IMIE FROM PRACOWNICY
WHERE PRACOWNICY.WYDZIAL = PRACOWNICY_WYDZIALU.KODWYDZIALU
);
pl
s.
gdzie:
− LANGUAGE SQL określa, że ciało funkcji jest napisane w języku SQL,
− READS SQL DATA określa, że funkcja pobiera dane z bazy w trybie „tylko do
odczytu”, inaczej mówiąc nie modyfikuje danych
− DETERMINISTIC określa, że dla jednego zestawu parametrów funkcja zawsze daje te
same wyniki.
Zdefiniowana funkcja może być użyta w następujący sposób:
SELECT * FROM TABLE(PRACOWNICY_WYDZIALU('w-8'));
Oprócz funkcji tabelowych, SQL:2003 wprowadza również zmiany w możliwości wywoływania procedur składowanych. Obecnie dopuszcza się przeładowanie funkcji. Funkcje mogą być także deklarowane jako wywoływane z uprawnieniami użytkownika wywołującego
(do tej pory użytkownika deklarującego).
Standard rozszerza sposób tworzenia tabel w zakresie używania kolumn identyfikujących i generowanych. Ich wartość jest automatycznie wyznaczana w momencie dodawania
wiersza. Możliwe stało się wybiórcze skopiowanie struktury, połączone z wypełnieniem
nowej tabeli danymi, co pokazuje następujący przykład:
CREATE TABLE T5 (D1, D2, D3, D4) AS
(SELECT T1.C1, T1.C2, T2.C3, T2.C4
FROM T1, T2
WHERE T1.C2 = T2.C2) WITH DATA;
Utworzona za pomocą CREATE
TABLE … AS
tabela jest niezależna od tabeli źródłowej.
208
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
Rozwój standardu SQL i jego implementacji
SQL:2003 wprowadza wyrażenie MERGE, które pozwala w jednym kroku uaktualnić
istniejące wiersze i dodać nowe. Przykładowo: tabela AUTORZY zawiera listę wszystkich
autorów publikacji wraz z ilością artykułów, a tabela tymczasowa TEGOROCZNE_
PUBLIKACJE opisuje listę tegorocznych publikacji;
Tabela 3. Tabela AUTORZY
w
NAZWISKO
Kowalski
Nowak
Iksiński
LICZBA_PUBLIKACJI
10
15
20
Tabela 4. Tabela TEGOROCZNE_PUBLIKACJE:
w
AUTOR
Abacki
Nowak
Iksiński
Smith
LICZBA_PUBLIKACJI
3
2
1
3
w
da
.b
MERGE INTO AUTORZY AS A
USING (SELECT AUTOR,LICZBA_PUBLIKACJI FROM TEGOROCZNE_PUBLIKACJE) AS P
ON (A.NAZWISKO = P.AUTOR)
WHEN MATCHED THEN UPDATE SET LICZBA_PUBLIKACJI =
A.LICZBA_PUBLIKACJI+P.ILOSC_PUBLIKACJI
WHEN NOT MATCHED THEN INSERT (NAZWISKO,LICZBA_PUBLIKACJI) VALUES
(P.AUTOR,P.LICZBA_PUBLIKACJI);
Tabela 5. Tabela AUTORZY po wykonaniu operacji MERGE
NAZWISKO
Kowalski
Nowak
Iksiński
Abacki
Smith
LICZBA_PUBLIKACJI
10
17
21
3
3
CREATE SEQUENCE AUTOR_SEQ AS INTEGER
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 10000
NO CYCLE;
pl
s.
SQL:2003 wprowadza generatory sekwencji, które służą do tworzenia unikalnych wartości
w obrębie schematu. Mogą one zostać wykorzystane do generowania sztucznych kluczy
głównych. Oto przykład deklaracji generatora sekwencji:
W celu uzyskania kolejnej wartość z generatora, należy użyć wyrażenia:
NEXT VALUE FOR AUTOR_SEQ
Oto przykładowe wykorzystanie sekwencji:
INSERT INTO AUTOR (ID, NAZWISKO, WIEK) VALUES (NEXT VALUE FOR
AUTOR_SEQ,'Kowalski', 45);
W przypadku włączenia opcji NO CYCLE, przy przekroczeniu zakresu generowany jest
wyjątek. Możliwe jest wpływanie na działanie generatorów poprzez zastosowanie poleceń:
ALTER SEQUENCE ...
DROP SEQUENCE ...
ALTER SEQUENCE ... RESTART WITH ...
209
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
L. Tuzinkiewicz, J. Fedyczak
SQL:2003 wprowadza typ IDENTITY o funkcjonalności analogicznej do generatora sekwencji, przy czym zbędne staje się jawne wywołanie NEXT VALUE FOR ... Przykład zastosowania typu IDENTITY w definicji tabeli:
w
w
CREATE TABLE PRACOWNICY (
NR INTEGER GENERATED ALWAYS
AS IDENTITY (
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 10000
NO CYCLE
),
NAZWISKO VARCHAR (100),
WIEK INTEGER
);
w
W tabeli może można zdefiniować tylko jedną kolumnę typu IDENTITY. W przypadku
wprowadzania danych do tabeli, wartość kolumny typu IDENTITY jest generowana automatycznie.
Nowy standard wprowadził również kolumny generowane. Przykład użycia kolumny
generowanej może wyglądać następująco:
da
.b
CREATE TABLE PRACOWNICY (
ID INTEGER,
PENSJA DECIMAL(7,2),
PREMIA DECIMAL(7,2),
WYPLATA GENERATED ALWAYS AS (PENSJA+PREMIA)
);
Wartość kolumny WYPLATA jest automatycznie uaktualniana. Kolumny tego typu mogą
być indeksowane.
SQL:2003 wprowadza funkcje okienkowe, które służą do zawężania widoczności danych w obrębie tabeli. Są to RANK, DENSE_RANK, PERCENT_RANK, CUME_DIST, ROW_NUMBER.
Oto przykład zastosowania funkcji RANK, DENSE_RANK oraz ROWNUM (wynik w tabeli 6):
pl
s.
SELECT IMIE, PENSJA,
RANK() OVER (ORDER BY PENSJA DESC) AS RANK,
DENSE_RANK() OVER (ORDER BY PENSJA DESC) AS DENSE_RANK,
ROW_NUMBER() OVER (ORDER BY PENSJA DESC) AS ROWNUM
FROM PRACOWNICY;
gdzie:
− RANK – zwraca pozycję względną – wymaga uporządkowania; wartości równe mają tę
samą wartość RANK,
− DENSE_RANK – analogiczne do RANK, ale gwarantuje ciągłość wartościowania,
− ROW_NUMBER – numeruje kolejne wartości; równe wartości są numerowane niedeterministycznie.
Tabela 6. Rezultat przykładowego zastosowania funkcji okienkujących
IMIE
Krzysztof
Sylwia
Tadeusz
Marek
Łukasz
Jolanta
PENSJA
8000
7900
7900
6600
6600
6000
RANK
1
2
2
4
4
6
DENSE_RANK
1
2
2
3
3
4
210
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
ROWNUM
1
2
3
4
5
6
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
Rozwój standardu SQL i jego implementacji
SQL:2003 wprowadza kwerendy na próbkach danych. Ich użycie skraca czas uzyskania
wyniku zapytania kosztem dokładności. Możliwe są dwie metody próbkowania:
− BERNOULLI – prawdopodobieństwo pojawienia się wiersza w próbce jest niezależne
od pojawienia się innych wierszy
− SYSTEM – prawdopodobieństwo może zależeć od innych wierszy zawartych w próbce
Poniższa kwerenda wyznacza średnią zarobków w poszczególnych działach:
w
SELECT DZIAL, SUM(PENSJA) * 10
FROM PRACOWNICY TABLESAMPLE BERNOULLI (10)
REPEATABLE (5)
GROUP BY DZIAL;
da
.b
w
w
gdzie opcjonalny parametr klauzuli REPEATABLE określa ziarno dla wartości losowych.
Ustawienie konkretnej wartości parametru zapewnia powtarzalność wyników przy kolejnych wywołaniach kwerendy dla tego samego zestawu danych.
Ponadto rozbudowano standard o wiele nowych funkcji matematycznych i statystycznych [4]. Zmiany dokonane w standardzie SQL:2003 obejmują również przypadki usunięcia elementów o znikomym znaczeniu (typy BIT oraz BIT VARYING).
Omówione zmiany pokazują, że rozwój standardu SQL zmierza w kierunku wspierania
dynamicznie rozwijających się dziedzin. Funkcje tabelowe mogą posłużyć do pozyskania
danych ze źródeł o różnych strukturach (np. w systemie innego producenta, bądź plikach
zewnętrznych), co może być wykorzystane w fazie ekstrakcji danych w procesie ETL.
Innym przykładem wsparcia tego procesu jest operacja MERGE, która jest pomocna
w fazie ładowania danych do baz analitycznych. Z kolei funkcje okienkowe (RANK,
DENSE_RANK itp.), kwerendy operujące na próbkach danych oraz nowe funkcje agregujące
mają zastosowanie w procesach analitycznych.
Inną, istotną ze względu na zakres zastosowań technologią, jest standard XML, który
określa zasady przechowywania, przetwarzania i wymiany różnego rodzaju dokumentów.
4 Wpływ standardu SQL na systemy zarządzania bazami danych
pl
s.
Zarówno systemy komercyjne jak i typu open-source, rozwijają się równolegle z rozwojem
standardu. Poziom zgodności ze standardem jest jednym z kryteriów oceny jakości produktu. W konsekwencji standard wymusza rozwój systemów zarządzania relacyjnymi bazami
danych (SZRBD), co nie oznacza, że wszystkie jego elementy są implementowane. Trywialnym przykładem jest brak implementacji typów DATE i TIME w systemie MS SQL
Server, który oferuje jedynie typ DATETIME. Innym przykładem dotyczącym tego systemu
jest brak implementacji typu BOOLEAN. Kolejny przykład to ujednolicenie instrukcji dotyczących ról (ang. roles) z instrukcjami dotyczącymi uprawnień użytkowników w systemie
PostgreSQL. Przykładem może być także kolejność wykonywania wyzwalaczy w tym systemie. Twórcy zdecydowali się na złamanie zaleceń standardu – wyzwalacze są uruchamiane w kolejności alfabetycznej a nie w kolejności utworzenia. Projektanci często uznają, że
standard traktuje daną kwestię niespójnie bądź niekompletnie i decydują się na inny, niestandardowy sposób rozwiązania problemu.
Możliwe jest również, że nowa wersja standardu wprowadza rozwiązania powszechnie
implementowane w istniejących produktach. Przykładem są kolumny typu IDENTITY, które
wprowadził SQL:2003. Taka funkcjonalność istniała już wcześniej w takich produktach jak
MySQL (atrybut auto_increment), PostgreSQL-typ SERIAL i BIGSERIAL (dyskretnie obsługiwany przez automatycznie tworzony generator sekwencji), MS SQL Server (atrybut
IDENTITY). Kolejnym przykładem są wyzwalacze ustandaryzowane przez SQL:1999.
211
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
L. Tuzinkiewicz, J. Fedyczak
w
Zostały wprowadzone przez Oracle w wersji 7.0 wydanej w 1992 roku. Standard bazuje
wówczas na rozwiązaniach stosowanych w implementacjach (wyzwalacze zgodne ze składnią zaproponowaną przez Oracle).
W przypadku implementacji komercyjnych trudno jest dostosować istniejące mechanizmy do nowej wersji standardu, ponieważ może to spowodować utratę kompatybilności
wstecznej. Powoduje to niechęć klientów do zakupu nowej wersji wynikającą ze zwiększonych kosztów jej wdrożenia. Przekłada się to na wymierne straty finansowe dla producenta.
Sytuacja ma się inaczej w projektach open – source. Tutaj twórcy nie są związani
finansowo z użytkownikami systemów bazodanowych. W dokumentacji PostgreSQL można znaleźć dokładne zestawienie obsługiwanych oraz nieobsługiwanych części standardu.
Zmiany zachodzą więc znacznie szybciej. Podczas instalacji nowej wersji często konieczna
jest całkowita konwersja fizycznej postaci baz danych.
W celu zilustrowania omówionych sytuacji, w tabeli 7 i 8 zebrano podsumowanie obsługi rozszerzeń wprowadzonych przez najnowsze wersje standardu w systemie MS SQL
Server 2005.
w
w
Tabela 7. Obsługa nowych elementów standardu SQL:1999 w MS SQL Server 2005
Zmiany w SQL:1999
Typy LOB (LARGE
OBJECTS) – CLOB oraz
Typ BOOLEAN
da
.b
BLOB
MS SQL Server 2005
Udostępnia do tego celu typy varbinary(max) oraz
image dla danych binarnych oraz typy text, ntext
i varchar(max) dla ciągów znakowych. Nie zaleca się
stosowania typów text, ntext oraz image, ponieważ
zostaną one usunięte w kolejnych wersjach systemu.
Brak typu BOOLEAN. Możliwe jest zastosowanie
zamiennika np. w postaci typu BIT (usuniętego w standardzie SQL:2003).
Brak typu ARRAY.
Nie obsługiwany.
Brak obsługi.
Rozszerzenia w
zakresie widoków
modyfikowalnych
Zapytania
rekursywne
Subtransakcje (ang.
savepoints)
Role (ang. roles)
Wyzwalacze
Elementy obiektowe
Typ specjalny REF
Brak obsługi. Istnieje możliwość tworzenia własnych
typów (poprzez Aliased Data Types), ale nie jest
wymuszana ich zgodność.
Brak implementacji rozszerzenia. Modyfikacje danych
poprzez widok są możliwe tylko w zakresie
przewidzianym przez standard SQL-92.
Obsługiwane, ale bez konieczności dodawania słowa
kluczowego RECURSIVE.
Obsługiwane. Składnia niezgodna ze standardem (SAVE
TRANSACTION ... i ROLLBACK TRANSACTION ...
zamiast SAVEPOINT ... i ROLLBACK TO ...). Brak
obsługi RELEASE SAVEPOINT.
Obsługiwane.
Obsługiwane.
Brak obsługi. Możliwość definiowania własnych
typów (klas) z użyciem wykonywanego po stronie
serwera kodu platformy .NET.
Brak obsługi.
pl
s.
Typ złożony ARRAY
Typ złożony ROW
Predykaty SIMILAR
oraz DISTINCT
Typy rozróżnialne
(ang. distinct types)
212
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
Rozwój standardu SQL i jego implementacji
Tabela 8. Obsługa nowych elementów standardu SQL:2003 w MS SQL Server 2005
Zmiany w SQL:2003
BIGINT
MULTISET
Funkcje tabelowe
w
w
CREATE TABLE LIKE
CREATE TABLE AS
MERGE
5 Wnioski
da
.b
w
Generatory sekwencji
Kolumny IDENTITY
Kolumny
generowane
Funkcje okienkowe
Kwerendy
próbkowane
Usunięcie typów BIT
i BIT VARYING
Rozszerzenia
związane z obsługą
XML
MS SQL Server
Obsługiwany (64bit).
Brak obsługi.
Implementowane w postaci TVF (Table-Valued
Function). Istnieją ograniczenia w typach zwracanych
kolumn – brak możliwości zastosowania typu
TIMESTAMP, ciągów znakowych innych niż UNICODE.
Brak obsługi ograniczenia NOT NULL.
Brak obsługi.
Brak obsługi.
Brak obsługi.
Brak obsługi.
Obsługiwane poprzez atrybut identity.
Implementowane w postaci computed column, ale
z ograniczeniami i niezgodnie ze standardem
Obsługiwane zgodnie ze standardem
Implementowane, ale bez obsługi próbkowania typu
BERNOULLI.
Nadal dostępny (często zastępuje brakujący typ
BOOLEAN).
Obsługiwane.
Literatura
1.
2.
3.
4.
5.
pl
s.
Od momentu powstania, standard SQL podlega stałemu rozwojowi przy aktywnym udziale
producentów SZRBD. Zmiany w kolejnych wersjach odzwierciedlają tendencje w technologiach informatycznych. Standard może być podstawą do oceny przenaszalności baz danych pomiędzy różnymi środowiskami. Znajomość standardu jest dobrym przygotowaniem
pojęciowym do poznawania i wykorzystywania różnych systemów baz danych. Standard
SQL może być językiem specyfikacji modeli logicznych w projektowaniu baz danych,
bowiem jest niezależny implementacyjnie, a jednocześnie określa technologie.
Eisenberg A., Melton J.: SQL:1999, formerly known as SQL3
Eisenberg A., Melton J., Kulikarni K., Michels J., Zemke F.: SQL:2003 Has Been Published
ISO/IEC 9075-2:1999, Information technology -- Database languages -- SQL - Part 2:
Foundation (SQL/Foundation)
ISO/IEC 9075-2:2003 Information technology -- Database languages -- SQL -- Part 2:
Foundation (SQL/Foundation)
ISO/IEC 9075-14:2003 Information technology -- Database languages -- SQL -- Part 14: XMLRelated Specifications (SQL/XML)
213
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
w
da
.b
w
w
pl
s.
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006

Podobne dokumenty