background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 1

Luty 1998

SQL3:

Nowy standard języka SQL

Kazimierz Subieta 

Instytut Podstaw Informatyki PAN, 
Warszawa

subieta@ipipan.waw.pl
http://www.ipipan.waw.pl/~subieta

Polsko-Japońska Wyższa Szkoła
Technik Komputerowych, 
Warszawa

Luty 1998

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 2

Luty 1998

Terminologia, pojęcia

Niniejsza prezentacja zakłada znajomość podstawowych 
konstrukcji SQL.
Prezentacja nie obejmuje wielu cech SQL3 (nie jest w 
stanie).

Wyjaśnienie większości terminów z zakresu 
obiektowości, które wystąpią w tej prezentacji, znajduje 
się w pracy:

Kazimierz Subieta

Słownik często spotykanych 

terminów dotyczących 

obiektowości

Prace IPI PAN 

Nr 839

Instytut Podstaw Informatyki PAN

Warszawa, wrzesień 1997

Słownik jest również dostępny na Webie (nieodpłatnie) w wersji postscript (140 stron):

http://www.ipipan.waw.pl/~subieta

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 3

Luty 1998

Geneza SQL3

• Informix Universal Server (połączenie systemu Illustra i 
Informix OnLine), 

• DB2 Universal Database (firmy IBM, połączenie Starburst i 
DB2), 

• Oracle8 (firmy ORACLE), 

• OSMOS (firmy Unisys), 

• OpenIngres (firmy Computer Associates), 

• Sybase Adaptive Server (firmy SYBASE) 

• ......

SQL3 powstaje w wyniku przenikania koncepcji obiektowych 
do systemów relacyjnych. Jednocześnie, podjęto zadanie 
ulepszenia poprzednich wersji SQL.

Intencją nowego standardu jest poprawa istniejących, 
sprawdzonych cech relacyjnej technologii bez wprowadzania 
zbyt rewolucyjnych zmian.
Nie jest pewne, czy ta intencja jest zachowana, bo zmiany są jednak 
rewolucyjne...  

Adresatem SQL3 są systemy określane jako “obiektowo-

relacyjne”:

Systemy  obiektowo-relacyjne  powstają  w  wyniku 
ostrożnej  ewolucji  systemów  relacyjnych  w  kierunku 
obiektowości,  liczą  na  pozycję  systemów  relacyjnych 
na rynku i odwołują się do ich wiernej klienteli. 

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 4

Luty 1998

Obecny status standardyzacji SQL

SQL3 rozszerza poprzedni standard SQL-92 w następujących 

kierunkach:

SQL3 jest kontynuacją linii SQL-92, rozwijaną przez 
ANSI (
American National Standard Institute), komitet X3H2, 
oraz ISO (
International Standard Organization) . 

Obiektowość: SQL3 reprezentuje podejście “hybrydowe”, dodajac 
niektóre cechy obiektowości (takie jak ADT) do tablic znanych z 
systemów relacyjnych.

Rozszerzalność: umożliwienie użytkownikom deklarowania 
własnych typów.

Niekonwencjonalne typy danych: multimedialne, przestrzenne, 
temporalne.

Pełne możliwości uniwersalnego języka programowania dla 
definiowania i zarządzania trwałymi, złożonymi obiektami.
Rozszerzenia w zakresie aktywnych reguł, interfejsów do innych 
języków programowania, autoryzacji, procedur bazy danych, ewolucji 
schematu, i inne.

Deklarowana jest zgodność ‘w dół” ze standardem SQL-92.

(Praktyka jednak dowodzi, że ze „zgodnością w dół” bywa bardzo różnie...)

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 5

Luty 1998

Stan zaawansowania prac, krytyka

Wg planów, prace nad standardem miały być zakończone w IV kwart. 1998.
Wygląda jednak na to, że bedą nieco opóźnione (rok lub nawet 2-3 lata).

Głównym powodem jest fakt, że standard jest ogromny, 
według różnych szacunków 1200 - 1600 stron, zaś jego 
poszczególne części są niezbyt spójne.

Krytykę  powoduje  również  fakt,  że  standard  jest  zbyt  eklektyczny,  łączy  w 
sobie  wiele  koncepcji  i  pojęć,  często  redundantnych  i  niespójnych. 
Obciążeniem  standardu  jest  deklarowana  zgodność  z  SQL-92  (czyli 
konieczność pogodzenia się z niektórymi wadami SQL-92).   

Są opinie, że nad całością tego standardu nikt nie 
panuje. 
Zaznacza się bardzo silnie “syndrom komitetu” 
(koń-
wielbłąd). 
Są opinie, że nawet jeżeli ten standard powstanie, 
nikt nie zaimplementuje go w całości, co podważy 
sens standardyzacji. 
Duże kontrowersje wzbudza fakt, że prace badawczo-
rozwojowe nad konstrukcją całkowicie nowego języka 
programowania są podejmowane przez ciało 
standardyzacyjne, statutowo powołane do innych celów. 

Konkurencją jest standard ODMG (Object Database Management Group), 

zawierający niecałe 250 stron, bardziej spójny i jednorodny, ale też o 

znacznie mniejszym zakresie. 

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 6

Luty 1998

Obiektowy model SQL3

Rozszerzenia w kierunku struktur obiektowych dotyczą 
następujacych cech: 

Typy definiowane przez użytkownika 

(abstrakcyjne typy 

danych (ADT), nazwane typy wierszy, oraz typy rozróżnione 
(distinct)

Konstruktory typów dla wierszy

 (row types) i 

referencji

 (reference types)

Konstruktory typów dla kolekcji:

 zbiorów, list 

(sekwencji) i wielozbiorów

Definiowane przez użytkownika funkcje i procedury

Wspomaganie dla dużych obiektów 

(Binary Large OBject - BLOB, Character Large OBject - CLOB)

Wbudowane typy skalarne

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 7

Luty 1998

Rozszerzenia systemu typów

 Rozszerzalność: definiowanie nowych typów “zrozumiałych” dla 
SZBD.

 Zwiększenie potencjału modelowania pojęciowego (złożone 
obiekty).

• Ponowne użycie istniejących bibliotek typów.

• Integracja pojęć obiektowych i relacyjnych w jednym języku.

• Abstrakcyjne typy danych (ADT)

+ Mocna kontrola typów

+ Podtypy i dziedziczenie

+ Hermetyzacja

+ Atrybuty wirtualne

+ Zamienialność 

(substitutability

)

+ Procedury polimorficzne

+ Dynamiczne wiązanie (dyzpozycja funkcji podczas czasu wykonania)

+ Kontrola typu podczas kompilacji

+ Przywileje: kto może używać ADT

 Typy rozróżnione (distinct): zwiększenie skuteczności mocnej kontroli typów i wydajności.

 Typy wierszy:

+ Są podobne do struktur lub zapisów (records) w innych językach

+ Umożliwiają określenie typów wierszy w tablicach

+ Umożliwiają zagnieżdżanie wierszy

 Typy kolekcji:

+ Wbudowane, parametryczne typy SET(T), LIST(T), MULTISET(T)

+ Odwzorowanie do tablic

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 8

Luty 1998

Procedury, operatory, podtablice, 

programy

 Funkcje definiowane przez użytkownika.

 Przeciążanie funkcji.

 Dynamiczna dyzpozycja (dispatch) funkcji.

 Kontrola typologiczna wołania funkcji podczas kompilacji.

 Procedury zapamiętane w bazie danych definiowane przez użytkownika.

 Operatory definiowane przez użytkownika (z przeciążaniem i zmianą pierwszeństwa) 

 Podtablice: 

+ Zwiększają możliwości w zakresie modelowania i moc wyszukiwawczą  języka

+ Są środkiem do modelowania hierarchii kolekcji

+ Zapytanie działające na tablicy działa jednocześnie na podtablicach i v/v.

 Inne rozszerzenia:

+ Dodatkowe predykaty (FOR ALL, FOR SOME, SIMILAR TO)

+ rozszerzenia możliwości kursorów

+ punkty składowania (savepoints)

+ rozszerzenia w zakresie aktualizacji perspektyw (view updating)

 Zdania sterujące języka programowania (dotyczy SQL/PSM):

+ bloki begin/end, podstawienia, wołania procedur i funkcji, zdania 
case, if, loop, for,
  signal/resignal, zmienne, wyjątki;

+ wiele zdań SQL w jednym EXEC SQL;

 Rozszerzenia w zakresie przetwarzania danych temporalnych. 

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 9

Luty 1998

Typy definiowane przez użytkownika

Najprostsza forma: typy rozróżnione:

Nowa nazwa dla już zdefiniowanego typu, traktowana jako oddzielny 
(nieporównywalny) typ:

CREATE DISTINCT dolar_usa AS DECIMAL(9,2)
CREATE DISTINCT polski_zl AS DECIMAL(9,2)

Porównanie wartości typu dolar_usa z wartością polski_zl powoduje błąd typu.

Typ wiersza: 

ciąg par <nazwa_pola, typ_danej>, przypominający 

deklarację tablicy.
Typ wiersza może być użyty do deklarowania tablic, wartości kolumn, 
zmiennych, parametrów.
Typ wiersza może być być nazwany; jest wtedy równoważny delaracji typu 
(struktury).

CREATE ROW TYPE TypKoduPoczt (rejon CHAR(2) lokacja CHAR(3));

CREATE TABLE pracownicy
  (nazwisko CHAR(30),
  adres ROW( ulica CHAR(30),nr_domu CHAR(4), miasto CHAR(20), 

kod_poczt TypKoduPoczt));

INSERT INTO pracownicy VALUES 
   (‘Nowak’, (‘Ordona’, ‘21’, ‘Warszawa’, (‘01’,‘237’)));

distinct types, row types

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 10

Luty 1998

Abstrakcyjne typy danych, ADT

ADT definiują atrybuty i operacje zakapsułowane w jednostce danych.

CREATE TYPE TypPracownika
  (PUBLIC

nazwisko

CHAR(20),

adres

TypAdresu,

kierownik

TypPracownika,

data_zatrudn DATE,

  PRIVATE

zar_brutto

DECIMAL(7,2),

potracenia

DECIMAL(7,2),

  PUBLIC

FUNCTION lata_pracy(p TypPracownika) RETURNS INTEGER

<kod obliczający lata pracy>,

  PUBLIC

FUNCTION zarobek(p TypPracownika) RETURNS DECIMAL

<kod oblicząjacy aktualny zarobek>

  );

Pełna hermetyzacja

 (encapsulation): dostęp do wartości typu 

TypPracownika 

jest możliwy wyłącznie poprzez własności określone jako PUBLIC.

abstract data type

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 11

Luty 1998

Dalsze własności ADT

ADT może być zdefiniowany jako podtyp innego ADT. Podtyp 
dziedziczy wszystkie własności nadtypu (atrybuty i operacje), 
dokładając własne atrybuty i operacje. Wspomagane jest wielo-
dziedziczenie.

Wystąpienia ADT (czyli obiekty) mogą być trwale zapamiętane w 
bazie danych jako wartości kolumn tablic.

Możliwe jest zadeklarowanie atrybutów wirtualnych (takich jak 
lata_pracy) 

Dla każdego atrybutu automatycznie są definiowane dwie 
funkcje:

* obserwator (funkcja czytająca atrybut)
* mutator (funkcja zmieniająca atrybut)

Wystąpienia ADT są tworzone przez zdefiniowane systemowo 
konstruktory.
Atrybuty mogą być inicjalizowane poprzez wołanie mutatorów. 
Możliwe jest definiowanie wyspecjalizowanych konstruktorów. 

BEGIN
  DECLARE 
p TypPracownika;
  SET 
p..nazwisko = ‘Kowalski’; 
  SET 
p..data_zatrudn = ‘96/02/11’;
  .....
END

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 12

Luty 1998

Typy referencyjne

reference type

Nazwany typ wiersza może być użyty jako typ referencyjny.
Wartość typu referencyjnego jest unikalnym identyfikatorem wystąpienia typu wiersza.
Jest on trwały, niezmienny dla całego życia danego wystąpienia.

Wartość typu referencyjnego może być zapamiętana w tablicy i 
nastepnie użyta jako bezpośrednia referencja 
(wskaźnik, pointer) do 
specyficznego wiersza w innej tablicy. W efekcie, możliwe jest 
tworzenie powiązań asocjacyjnych pomiędzy obiektami, tak jak w 
modelu obiektowym ODMG.

CREATE ROW TYPE TypKonta
  (nr_konta INTEGER,
   
klient REF(TypKlienta),
   typ_konta CHAR(1),
   data_otwarcia DATE,
   
oprocentowanie DOUBLE PRECISION,
   
bilans DOUBLE PRECISION,
  );

CREATE TABLE Konto OF TypKonta
  (PRIMARY KEY nr_konta
  );

typ

referencyjny

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 13

Luty 1998

SELECT k.klient -> nazwisko
  FROM Konto k
  where k.klient->adres..miasto = “Kraków”
  AND k.bilans > 10000;

Użycie referencji w zapytaniach

Referencje mogą być użyte w zapytaniach w postaci tzw. 
wyrażeń ścieżkowych 
(path expressions), podobnych do 
analogicznych wyrażeń w innych językach.

CREATE ROW TYPE TypKlienta
  (nr_klienta INTEGER,
  nazwisko CHAR(30),
  adres ROW( ulica CHAR(30),nr_domu CHAR(4), 

miasto CHAR(20), kod_poczt TypKoduPoczt));

Deklaracja typu

TypKlienta

Zdanie select

dereferencja

k.klient->adres..miasto

wyrażenie ścieżkowe

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 14

Luty 1998

Kolekcje

Kolekcje są to wartości zawierające pewną liczbę 
jednorodnych elementów, od zera do dowolnej dużej liczby. 
Liczba elementów może się dowolnie zmieniać w czasie 
istnienia bazy danych. SQL3 przewiduje następujące 
kolekcje:
  - zbiory 
(sets): zestaw elementów bez powtórzeń, kolejność 
nieistotna, 
  - listy 
(lists): zestaw elementów z ew.powtórzeniami, kolejność 
istotna,
  - wielozbiorów (multisets): zestaw elementów z powtórzeniami, 
kolejność nieistotna

collection

Kolumny tablic mogą zawierać kolekcje. 

CREATE TABLE pracownicy
  (id INTEGER PRIMARY KEY,
  nazwisko VARCHAR(30),
  adres ROW(  ulica VARCHAR(40),

nr_domu CHAR(4), 
miasto CHAR(20), 
kod_poczt INTEGER),

  projekty SET(INTEGER),
  
dzieci LIST(TypOsoby),
  
zainteresowania SET(VARCHAR(20)));

}

Deklaracje 

atrybutów, których 

wartości są 

kolekcjami

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 15

Luty 1998

Operacje wyszukiwania na kolekcjach

SELECT * 
  FROM 
pracownicy p
  WHERE ‘podróże’ IN (SELECT *

  FROM TABLE(p.zainteresowania) z)

  AND 5 > (SELECT count(*) FROM TABLE (p.dzieci) d)

W zapytaniach wystąpienia typów 
SET, LIST   i   MULTISET 
są traktowane jak tablice.

Końcowy rezultat zapytania jest zawsze 
tablicą 

(w danym przypadku - fragmentem tablicy 
pracownicy).

Podaj informacje o pracownikach, którzy interesują sie 
podróżami i mają więcej niż pięcioro dzieci.

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 16

Luty 1998

Duże obiekty:   BLOB   i   CLOB

W odróżnieniu od istniejących rozwiązań, wystąpienia dużych 
obiektów nie są odrębnymi plikami, ale są zapamietane w 
bazie danych na zasadzie identycznej do zapamietywania 
prostych wartości. 

W stosunku do wartości BLOB i CLOB maja zastosowanie wszystkie 
mechanizmy bazy danych, w szczególności mechanizmy bezpieczeństwa, 
prywatności, transakcji, cofania i odtwarzania.

CREATE TABLE pracownicy
  (id INTEGER PRIMARY KEY,
  nazwisko VARCHAR(30),
  zarobek polski_zl,
  .....
  opinia CLOB(75K),
  podpis BLOB(1M),
  zdjecie BLOB(12M));

Binary Large OBject, Character Large OBject

Tego rodzaju atrybuty mogą być używane w zdaniach 
select, ale oczywiście, nie wszystkie operacje maja 
zastosowanie. Działają na nich wyspecjalizowane funkcje 
oraz operacje, takie jak wyszukiwanie wartości, predykat 
LIKE, itd.

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 17

Luty 1998

Dziedziczenie

inheritance

ADT może być zdefiniowany jako podtyp jednego lub więcej ADT 
poprzez zdanie UNDER.
Podtyp dziedziczy wszystkie atrybuty i operacje (behawior) jego nadtypów; 
mogą być zdefiniowane dodatkowe atrybuty i operacje. Przesłanianie 
(overriding): w ramach podtypu może być zdefiniowana operacja o tej 
samej nazwie co odziedziczona; w takim przypadku ta operacja 
“przesłania” odziedziczoną. Podtyp może zmienić nazwy dziedziczonych 
własności.

Wystąpienie podtypu jest uważane za wystąpienie wszystkich jego 
nadtypów.

Zasada zamienialności (substitutability): wystąpienie podtypu może być 
użyte wszędzie tam, gdzie może być użyte wystąpienie nadtypu.

CREATE TYPE posiadłość
 (areał 

DECIMAL(5,2),

  lokalizacja 

adres,

  opis 

VARCHAR(1024),

  zdjęcie_frontu

BLOB,

  dokument

CLOB);

CREATE TYPE dom UNDER posiadłość
 (il_pięter 

INTEGER,

  il_pokoi 

INTEGER,

  powierzchnia_domu 
DECIMAL(5,2));

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 18

Luty 1998

Tablice z ADT, operacje na ADT

CREATE TABLE info_o_posiadłości
 (cena 

  pieniądze,

  właściciel    CHAR(40),
  własność 

  posiadłość);

INSERT INTO info_o_posiadłości VALUES
 
(polski_zl(200000), ‘Jan Nowak’, 
posiadłość(1500,... );
INSERT INTO info_o_posiadłości VALUES
 
(polski_zl(150000), ‘Adam Kowal’, dom(400,... );

może być tu zarówno
posiadłość jak i dom
(zasada zamienialności)

Informacja o typie jest trzymana razem z wartością i może być testowana.

SELECT właściciel, cena_w_zl(cena)
  FROM info_o_posiadłości
  WHERE cena_w_zl(cena) < polski_zl(180000)
  AND TYPE(własność) IN (dom) 
  AND własność..il_pokoi > 7

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 19

Luty 1998

Podtablice, nadtablice

Jest to mechanizm niezależny od ADT, podtypów i dziedziczenia.

CREATE TABLE osoba
  (nazwisko CHAR(30),
  płeć CHAR(1),
  wiek INTEGER);

CREATE TABLE pracownik UNDER osoba
  (zarobek FLOAT);

CREATE TABLE klient UNDER osoba
  (konto INTEGER);

Nadtablica

Podtablica

Podtablica

Podtablica dziedziczy wszystkie kolumny 
nadtablicy; może mieć własne kolumny. 
Maksymalna tablica wraz ze wszystkimi 
podtablicami tworzą rodzinę podtablic.
Każdy wiersz podtablicy musi być związany z 
dokładnie jednym wierszem nadtablicy. Każdy 
wiersz nadtablicy może być związany z co 
najwyżej jednym
 wierszem podtablicy. 
Operatory INSERT, DELETE, UPDATE działają 
spójnie i jednocześnie na całej rodzinie 
podtablic
.

“Maksymalna” tablica

subtable, supertable

Nadtablica

Podtablica

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 20

Luty 1998

Procedury w SQL3

Zalety: 

 nie jest potrzebny interfejs pomiędzy SQL i językiem-gospodarzem

 wyeliminowana niezgodność impedancji

 zachowana jest informacja o typie umożliwiająca mocną kontrole typu

CREATE FUNCTION podaj_info_o_posiadłości( pos posiadłośc)
RETURNS VARCHAR(1024)
BEGIN ATOMIC

/* blok 1 */

  DECLARE tekst VARCHAR(1024);
  ...
  BEGIN ATOMIC

/* blok 2 */

    DECLARE lok_zm posiadłość; 

/* lokalna zmienna */ 

    SET lok_zm = pos;
    SET tekst = opis_tekstowy(lok_zm); /* pewna funkcja */
    IF TYPE(lok_zm)IN (dom)

THEN ....

    END IF;
  END

/* koniec bloku 2 */

  ...
  RETURN tekst;
END

/* koniec bloku 1 */

• Podstawienie na lokalna zmienną lok_zm zachowuje informacje o typie.

• Ta informacja jest także przekazywana do wnetrza wołanej procedury 

opis_tekstowy.

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 21

Luty 1998

Rozszerzenia proceduralne SQL3

Zdania złożone

BEGIN ... END

Deklaracje zmiennych

DECLARE x INTEGER;

Zdanie if

IF x <> 5 THEN ... ELSE ...

Zdanie case 

CASE x
    WHEN 4 THEN ...
    WHEN 5 THEN ...

Zdanie loop

LOOP <ciąg zdań SQL> END LOOP;

Zdanie while

WHILE x <100 DO ... END WHILE;

Zdanie repeat

REPEAT ... UNTIL x <1 END REPEAT;

Zdanie for

FOR rezultat AS ... DO ... END FOR;

Zdanie leave

LEAVE ... ;

Zdanie return

RETURN x;

Wołanie procedury

CALL JakasProcedura(1, 3, 5);

Zdanie podstawienia

SET x = 27;

Sygnalizacja wyjątku

SIGNAL dzielenie_przez_zero;

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 22

Luty 1998

Rozszerzenia w zakresie wyzwalaczy

trigger

Wyzwalacze są nazwanymi obiektami bazy danych, które są 
spontanicznie aktywowane po wystąpieniu 
odpowiadającego im zdarzenia.

Akcja jest wykonywana, jeżeli spełniony jest warunek.

CREATE TRIGGER aktualizacja_bilansu
  BEFORE INSERT ON historia_konta
  REFERENCING NEW AS zlec_wyplaty
  FOR EACH ROW
  WHEN (zlec_wyplaty.autoryzacja = ‘OK’)
  UPDATE konta

SET bilans = bilans - zlec_wyplaty.ile
WHERE nr_konta = zlec_wyplaty.nr_konta;

zdarzenie

warunek

akcja

Wyzwalacze mają wiele zastosowań, w szczególności do kontroli 
poprawności operacji, do egzekwowania reguł biznesu, do 
aktualizowania redundantnych danych (replik), itd. Możliwości 
wyzwalaczy w SQL3 są rozszerzone w stosunku do SQL-92.

Zdarzeniami mogą być zlecenia INSERT, DELETE, UPDATE dotyczące 
tablic i kolumn.

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 23

Luty 1998

Krytyczne podsumowanie (1)

W nowym standardzie SQL3 twórcy próbują 
wyeliminować wszelkie wady jego poprzedników. 
Jednocześnie, próbują wszystko z nich pozostawić.

Występuje tendencja do uniwersalizmu, nie przeoczenia 
jakiejkolwiek własności, która mogłaby mieć znaczenie 
dla organizacji bazy danych lub interfejsu 
programistycznego. 

Silnie zaznacza się wpływ modnych pojęć obiektowości, 
które nakładają się na wymienione (sprzeczne) 
tendencje. Jednocześnie obiektowość jest okrojona i 
wtłoczona w obce jej mechanizmy. Jest wątpliwe, czy jest 
to droga do realizacji misji obiektowości, jaką jest walka 
ze złożonością.

Standard tworzy się bez troski o minimalność języka. 
Duża liczba konstrukcji jest redundantnych, od strony 
syntaktycznej, semantycznej lub koncepcyjnej.

Zaznaczają się wyraźnie prywatne ambicje i koniki 
twórców standardu, przez co przemycane są cechy 
drugorzędne, egzotyczne, lub z pogranicza 
implementacyjnej kuchni.

background image

K.Subieta. SQL3: Nowy standard języka SQL, Folia 24

Luty 1998

Krytyczne podsumowanie (2)

Podejście do mocnej kontroli typów jest naiwne i nie 
wróży nic dobrego.

Podejście do programowania ogólnego (SQL/CLI) 
zachowuje wady dynamicznego SQL. Brakuje takich 
pojęć jak typy/klasy parametryczne, funkcje wyższego 
rzędu, itd.

Ortogonalność języka pozostawia wiele do życzenia; 
nadal bedą kłopoty ze
“skomplikowanymi” zapytaniami takimi jak 2+2.

Semantyka wielu konstrukcji jest wyjaśniona na prostych 
przykładach, co zwykle nie jest wystarczające. Występuje 
brak troski o interakcję konstrukcji i zasadę 
korespondencji 

(np. jak aktualizować referencje, czy można zrobić 

grupowanie wg typu lub referencji, ...)

W rezultacie powstaje konstrukcja dość monstrualna. 
Jest mało prawdopodobne, aby producenci systemów 
implementowali ją w całości. 

Prawdopodobnie, producenci systemów uzgodnią pewną 
część tego standardu, która będzie implementowana. 
Jest pewne, że wykażą oni więcej rozsądku, niż twórcy 
tego kontrowersyjnego standardu.


Document Outline