Rozszerzenia języka relacyjnych baz danych SQL



Podobne dokumenty
Monika Kruk Mariusz Grabowski. Informatyka Stosowana WFiIS, AGH 13 grudzień 2006

Oracle PL/SQL. Paweł Rajba.

Obiektowe bazy danych

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Obiektowe bazy danych

Pakiety podprogramów Dynamiczny SQL

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Post-relacyjne bazy danych

PODSTAWY BAZ DANYCH. 17. Obiektowość w Oracle. 2009/2010 Notatki do wykładu "Podstawy baz danych"

Modelowanie wymiarów

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Spis treści. Przedmowa

Oracle PL/SQL. Paweł Rajba.

Obiektowe i obiektowo-relacyjne. bazy danych

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Zasady transformacji modelu DOZ do projektu tabel bazy danych

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Język PL/SQL Pakiety podprogramów

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Wykład 8. SQL praca z tabelami 5

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

Bloki anonimowe w PL/SQL

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Model semistrukturalny

Język PL/SQL Procedury i funkcje składowane

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

15. Funkcje i procedury składowane PL/SQL

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Oracle PL/SQL. Paweł Rajba.

Obiektowe bazy danych Obiektowe i obiektowo-relacyjne bazy danych

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Zaawansowane bazy danych i hurtownie danych semestr I

Relacyjne bazy danych. Podstawy SQL

Oracle11g: Wprowadzenie do SQL

Indeksy. Indeks typu B drzewo

Procedury i funkcje składowane

Programowanie w Ruby

Język SQL, zajęcia nr 1

Wykład 5. SQL praca z tabelami 2

Wykład 05 Bazy danych

Bazy danych. dr inż. Arkadiusz Mirakowski

Paweł Rajba

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Nowe technologie baz danych

Uprawnienia, role, synonimy

Plan. Rozszerzenie obiektowe w SZBD Oracle

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL

Relacyjne bazy danych. Podstawy SQL

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Bazy danych. Zenon Gniazdowski WWSI, ITE Andrzej Ptasznik WWSI

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Tworzenie raportów XML Publisher przy użyciu Data Templates

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Wybór EUROPEAN będzie rozpoznawał dzień przed miesiącem, natomiast US miesiąc przed dniem.

PODSTAWY BAZ DANYCH 13. PL/SQL

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

Autor: Joanna Karwowska

Oracle 12c: Nowości w SQL i PL/SQL

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Bazy danych 6. Klucze obce. P. F. Góra

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Wykład 6. SQL praca z tabelami 3

BAZA DANYCH SIECI HOTELI

Administracja i programowanie pod Microsoft SQL Server 2000

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Model logiczny SZBD. Model fizyczny. Systemy klientserwer. Systemy rozproszone BD. No SQL

Indeksowanie w bazach danych

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Operacja PIVOT w języku SQL w środowisku Oracle

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Jerzy Nawrocki, Wprowadzenie do informatyki

PL/SQL. Zaawansowane tematy PL/SQL

Informatyka I BAZY DANYCH. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2017

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Oracle PL/SQL. Paweł Rajba.

Bazy danych. Dr inż. Paweł Kasprowski

Wprowadzenie do technologii Business Intelligence i hurtowni danych

Transkrypt:

Wykład 3 Rozszerzenia języka relacyjnych baz danych SQL 1

Spis treści 1. Typy danych obiektowe 2. Typy danych LOB (multimedialnych) 3. Obiekty i kod Javy 4. Typ danych XML 5. Konstrukcje dla hurtowni danych 2

Niezgodność typów (impedance mismatch) Bazy danych są na ogół relacyjne, a aplikacje klienckie obiektowe. 1. Dwa odwzorowania: obiekty aplikacji -> tabele bazy danych -> pliki 2. Relacyjne bazy danych stanowią najlepszy kompromis: wydajność/naturalne modelowanie obiektów między poziomem aplikacyjnym a fizycznym. Odwzorowanie danych obiektowych na relacyjne w samej aplikacji przy użyciu interfejsów programistycznych API takich jak JDBC, ODBC. 3. Jak zbliżyć do siebie oba niespójne względem siebie modele danych (bazy danych i obiektowej aplikacji): tabele obiektowe od strony bazy danych, odwzorowania obiektowo-relacyjne ORM od strony aplikacji. 3

Typ obiektowy Złożony typ danych definiowany przez użytkownika. Hermetyzuje strukturę danych łącznie z metodami potrzebnymi do operowania na strukturze danych. Atrybut Metoda Wyśw_Status Wyślij Id_zam Info_klient Pozycje Status Anuluj Zatrzymaj Metody to kod składowany w słowniku danych Oracle wraz z opisem typu obiektowego. 4

Struktura typu obiektowego Specyfikacja typu Publiczny interfejs Deklaracje atrybutów Specyfikacje metod Ciało typu Prywatna implementacja Ciała metod 5

Składnia Tworzenie specyfikacji typu obiektowego CREATE TYPE nazwa_typu AS OBJECT [(atrybut1 typdanych, atrybut2 typdanych,...] [MEMBER procedura1 funkcja1 spec, procedura2 funkcja2 spec,...)] 6

Tworzenie ciała typu obiektowego Składnia CREATE TYPE BODY nazwa_typu AS [MEMBER procedura1 funkcja1 body, procedura2 funkcja2 body,...] END 7

Przykład SQL> CREATE TYPE name_type AS OBJECT( f_name VARCHAR2(25), l_name VARCHAR2(25), initials VARCHAR2(7), MEMBER FUNCTION full_name RETURN VARCHAR2 ); 8

Przykład SQL> CREATE TYPE BODY name_type AS MEMBER FUNCTION full_name RETURN VARCHAR2 IS BEGIN RETURN (l_name ' ' f_name ); END full_name; END; 9

Przykład SQL> CREATE TYPE emp_type AS OBJECT( emp_id NUMBER(7), name name_type, -- typ obiektowy street VARCHAR2(25), city VARCHAR2(15), state CHAR(2), zip INTEGER, MEMBER FUNCTION get_name RETURN VARCHAR2, MEMBER PROCEDURE set_l_name (v_name VARCHAR2)); 10

Przykład SQL> CREATE TYPE BODY emp_type AS MEMBER FUNCTION get_name RETURN VARCHAR2 IS BEGIN RETURN (name.l_name ' ' name.f_name); END; MEMBER PROCEDURE set_l_name (v_name VARCHAR2) IS BEGIN name.l_name := v_name; END; END; 11

Rodzaje metod v MEMBER z niejawnym pierwszym parametrem SELF definiowanego typu danych. Obejmuje metody służące do porównywania obiektów. v STATIC bez SELF; wywoływane type_name.method np. metody konstruktorów obiektów definiowane przez użytkowników. v Implementowane w PL/SQL lub w językach programowania np. Java, C. 12

Dziedziczenie (tylko jednokrotne) SQL> CREATE TYPE Person AS OBJECT ( first VARCHAR2(50), last VARCHAR2(50)) NOT FINAL; SQL> CREATE TYPE Emp UNDER Person ( salary NUMBER) FINAL; SQL> DECLARE x Emp:= Emp('Jan','Kowalski',10000); BEGIN DBMS_OUTPUT.Put_line(x.first ' ' x.last ' ' x.salary); END; NOT FINAL wymagane aby móc definiować podtypy 13

Polimorfizm Przedefiniując dziedziczone metody w podtypie mamy możliwość zdefiniowania innego sposobu wykonania metod na obiektach podtypu. Obiekt podtypu może być użyty w kodzie w miejsce obiektu nadtypu definiując dla różnych podtypów różne działania. 14

Przykład CREATE TYPE person_type AS OBJECT ( idno NUMBER, name VARCHAR2(30), phone VARCHAR2(20), MEMBER FUNCTION show RETURN VARCHAR2 ) NOT FINAL; CREATE TYPE BODY person_type AS MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN 'Id: ' TO_CHAR(idno) ', Name: ' name; END; END; 15

c.d. CREATE TYPE student_type UNDER person_type ( dept_id NUMBER, major VARCHAR2(30), OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2) NOT FINAL; CREATE TYPE BODY student_type AS OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN (self AS person_type).show ' -- Major: ' major ; END; END; 16

Informacje w słowniku danych Oracle Informacje o typach obiektowych znajdują się w USER_OBJECTS Informacje o metodach typów obiektowych znajdują się w USER_METHOD_PARAMS USER_METHOD_RESULTS USER_TYPE_METHODS 17

Tworzenie tabeli obiektowej i wywoływanie metod SQL> CREATE TABLE name_table OF name_type; SQL> INSERT INTO name_table VALUES('Marilyn','Monroe','MM'); SQL> SELECT nt.f_name, nt.full_name() FROM name_table nt; INSERT INTO name_table VALUES (name_type('marilyn','monroe','mm')); 18

Spojrzenia na tabelę obiektową v v Tabela jedno-kolumnowa: każdy wiersz jest obiektem; można wykonywać operacje obiektowe. Tabela wielokolumnowa: każdemu atrybutowi obiektu odpowiada jedna kolumna. 19

Rodzaje obiektów Składowane, trwałe 1. Wierszowe (elementy tabeli obiektowej) 2. Kolumnowe (zapisywane w kolumnie tabeli relacyjnej) 3. Atrybutowe (zapisywane jako wartość atrybutu innego trwałego obiektu np. wierszowego) Nie składowane, nietrwałe Tymczasowe tworzone w RAM i tam używane: w kodzie PL/SQL w kodzie Javy 20

Metoda konstruktora obiektu SQL> CREATE TYPE tv_type AS OBJECT ( tv_category VARCHAR2(20), screen_size NUMBER(4)); DECLARE v_new_tv tv_type := tv_type('web tv', 32); v_alt_tv tv_type; BEGIN v_alt_tv := tv_type('big Screen', 72); END; CREATE TABLE tv OF tv_type; INSERT INTO tv VALUES (tv_type('color tv', '28')); 21

SELECT na tabeli obiektowej Wynikiem zbiór wierszy: SELECT * FROM name_table p WHERE p.l_name LIKE 'M%'; Wynikiem zbiór obiektów: SELECT VALUE(p) FROM name_table p WHERE p.l_name LIKE 'M%'; Kanoniczna reprezentacja obiektu w SQL*Plus - napis: -- NAME_TYPE('Marilyn','Monroe','MM') 22

INSERT do tabeli obiektowej Bezpośrednio: INSERT INTO name_table VALUES('Marilyn','Monroe','MM'); Z użyciem konstruktora typu obiektowego: INSERT INTO name_table VALUES(name_type('Marilyn','Monroe','MM')); 23

UPDATE na tabeli obiektowej UPDATE name_table p SET p.l_name = 'Janusz' WHERE p.l_name = 'Jan'; Z użyciem konstruktora typu obiektowego: UPDATE name_table p SET p = name_type('janusz','kowalski','jk') WHERE p.l_name = 'Jan'; 24

Tabela relacyjna v CREATE TABLE Emp1( Empno NUMBER PRIMARY KEY, Name Name_type, -- kolumna typu obiektowego Sal NUMBER, Kier REFERENCES Emp1); 25

Typ referencyjny CREATE TYPE Dept_Type AS OBJECT( Name VARCHAR2(10), Loc VARCHAR2(50)); CREATE TABLE Obj_Dept OF Dept_Type; CREATE TYPE Emp_Type AS OBJECT( Name VARCHAR2(20), Sal Number, Dept_ref REF Dept_Type); CREATE TABLE Obj_Emp OF Emp_Type (Dept_ref SCOPE IS Obj_Dept); -- odpowiednik klucza obcego CREATE TABLE Rel_emp( Id NUMBER PRIMARY KEY, Name VARCHAR2(20), Sal Number, Dept_ref REF Dept_Type SCOPE IS Obj_Dept); 26

Użycie referencji SELECT o.name, o.dept_ref.name FROM obj_emp o; NAME DEPT_REF.NAME ------------------ ------------------------- KOWALSKI KADRY 27

Tworzenie tabeli obiektowej z obiektami różnych podtypów CREATE TABLE person_obj_table OF person_type; INSERT INTO person_obj_table VALUES (person_type(12, 'Bob Jones', '111-555-121')); INSERT INTO person_obj_table VALUES (student_type(5, 'Joe Lan', 6555-131', 12, 'HISTORY')); INSERT INTO person_obj_table VALUES (employee_type(55, 'Jane Smith', 6555-776', 100, 'Jennifer Nelson')); INSERT INTO person_obj_table VALUES (part_time_student_type(52, 'Kim Patel', '1555-1232', 14, 'PHYSICS', 20)); 28

Kolekcje Atrybut typu obiektowego lub kolumna tabeli może być typu kolekcji: 1. VARRAY typ tablicy jednowymiarowej (jak wektor) o ustalonym maksymalnym rozmiarze; 2. TABLE typ tabeli zagnieżdżonej o nie ustalonym maksymalnym rozmiarze. 29

Składowanie obiektów 1. Każdy obiektowy typ danych określa drzewo, w którego liściach znajdują się: atrybuty prostych typów danych jak NUMBER, VARCHAR2, REF; atrybuty typów kolekcji. 2. Atrybuty typów obiektowych rozwijają się w poddrzewa odpowiadające ich typom, jak również w poddrzewa wszystkich podtypów ich typów. 3. Tabela obiektowa jest reprezentowana przez tabelę relacyjną, której kolumny odpowiadają atrybutom tego drzewa plus kolumny odpowiadające atrybutom drzew wszystkich podtypów danego typu. 30

Przykład CREATE TYPE Person AS OBJECT ( first VARCHAR2(50), last VARCHAR2(50)) NOT FINAL; CREATE TYPE Emp UNDER Person ( salary NUMBER) FINAL; CREATE TYPE Stud UNDER Person ( StudId NUMBER) FINAL; CREATE TABLE Osoby OF Person; Oracle reprezentuje wewnętrznie tabelę Osoby przez tabelę relacyjną: OsobyRel (OID, CzyPustyObiekt, TypObiektu, first, last, salary, StudId) 31

Perspektywy obiektowe Alternatywnie, można samemu zdefiniować relacyjną bazę danych jako podstawę składowania zawartości tabel obiektowych i udostępniać ją jako obiektową za pomocą perspektyw obiektowych. 1. Zdefiniowanie wymaganych typów obiektowych w oparciu o atrybuty odpowiadające istniejącym kolumnom tabel relacyjnych. 2. Zdefiniowanie perspektyw obiektowych w postaci zapytań określających jak wydobywać dane z tabel relacyjnych. 3. Określenie jednoznacznych identyfikatorów umożliwiających tworzenie wskaźników do obiektów w perspektywie (np. istniejący klucz główny). 4. W przypadku złożonej perspektywy można użyć wyzwalaczy INSTEAD OF do określenia sposobu modyfikacji danych w perspektywie obiektowej. 32

Duże obiekty LOB Atrybut typu obiektowego Kolumna w tabeli Wartość zmiennej w PL/SQL Przepis (CLOB) Foto (BLOB) Film (BFILE) FILESTREAM w SQLServer w miejsce BFILE. 33

Tabela z obiektami LOB SQL> CREATE TABLE employee 2 (emp_id NUMBER, 3 emp_name VARCHAR2(35), 4 resume CLOB, 5 picture BLOB); 34

Programowanie obiektowe w bazie danych - Java składowana w bazie danych Kod Javy może być zapisywany w bazie danych oraz może być realizowany na serwerze bazy danych, tak jak kod języka SQL w ramach tej samej sesji i tej samej transakcji. Obiekty Javy tworzone przy wykonywaniu kodu nie są składowane w bazie danych (tylko kod w słowniku danych). Z kodu SQL lub PL/SQL można wywoływać tylko metody statyczne klas Javy. Z kodu Javy można sięgać do bazy danych przez JDBC. 35

XML - ułatwienie wymiany danych biznesowych między aplikacjami. Integracja informacji. Łatwiej jest wymienić dane między aplikacjami wystarczy skupić się na danych i ich strukturze abstrahując od konkretnych protokołów sieciowych i komunikacyjnych, bez konieczności interpretowania wewnętrznych i wzajemnie niezgodnych formatów przesyłania danych w sieci. 36

Przykład XML: Lista publikacji <LISTA> <PUBLIKACJA> <AUTOR> <IMIĘ>Milan</IMIĘ><NAZWISKO>Kundera</NAZWISKO> </AUTOR> <TYTUŁ>Identity</TYTUŁ> <ROK>1998</ROK> </PUBLIKACJA> <PUBLIKACJA> <AUTOR> <IMIĘ>Richard</IMIĘ><NAZWISKO>Feynman</NAZWISKO> </AUTOR> <TYTUŁ>The Character of Physical Law</TYTUŁ> <FORMAT>Twardy</FORMAT> </PUBLIKACJA> </LISTA> 37

Metody reprezentowania dokumentów XML w bazie danych Dokumenty XML mogą być reprezentowane za pomocą nowego obiektowego typu danych XML (w Oracle XMLType), którego wartości mogą się pojawić jako wartości kolumny w tabeli. Może być zastosowana struktura CLOB lub BLOB. Dokumenty XML o ustalonym schemacie mogą być reprezentowane przez zbiór zwykłych tabel relacyjnych. 38

Oracle: Wbudowany typ obiektowy XMLType CREATE TABLE Kontakty( Nazwisko VARCHAR2(50), Karta XMLTYPE, Data_utworzenia DATE); lub CREATE TABLE Obj_Kontakty OF XMLType; 39

Trzy komponenty baz analitycznych v Hurtownia danych: Zintegrowane dane pochodzące z wielu źródeł: Ładowanie nowych danych z wielu źródeł. Integracja semantyczna (np. uzgodnienie walut, miar, formatów). v OLAP: Złożone zapytania i perspektywy SQL. Zapytania podobne do operacji na arkuszach kalkulacyjnych i na wielowymiarowych danych. Zapytania interakcyjne i online. v Data Mining: Eksploracyjne wyszukiwanie interesujących trendów i anomalii. Wszystkie mogą być realizowane przez serwer bazy danych 40

Schemat gwiazda W schemacie tym mamy jedną tabelę faktów w środku układu i zbiór tabel wymiarów, każda z nich opisuje jeden wymiar. Identyfikatory wartości wymiarów stanowią klucze obce w tabeli faktów. Przykład: tabela faktów sprzedaży w podziale względem wymiarów struktury sprzedaży, czasu, wymiaru geograficznego i wymiaru produktów. Struktura sprzedaży Wymiar geograficzny id_sprz nazwisko oddział Sprzedaż id_sprz id_geo id_czas id_prod id_geo miasto wojew makroreg Czas id_czas miesiąc kwartał rok ilość cena zniżka wartość Produkty id_prod produkt opakow grupa_pr 41

Indeksy bitmapowe CREATE BITMAP INDEX Ind_P_OsON Osoby(Płeć); CREATE BITMAP INDEX Ind_P_OsON Osoby(Stanowisko); Nazwisko Płeć Stanowisko Kruszewski M Dyrektor Jankowski M Sprzedawca Malinowski M Sprzedawca Gazda K Kasjer Wiśniewski M Kasjer Bojanowska K Sprzedawca Indeks na Płeć Indeks na Stanowisko Nr wiersza M K D S K ----------------------------------------- 1 1 0 1 0 0 2 1 0 0 1 0 3 1 0 0 1 0 4 0 1 0 0 1 5 1 0 0 0 1 6 0 1 0 1 0 SELECT Nazwisko FROM Osoby WHERE (Płeć = 'K' AND Stanowisko ='K') OR (Płeć = 'M' AND Stanowisko = 'D') sprowadza się do wykonania trzech operacji na wektorach bitowych: ([000101] AND [000110]) OR ([111010] AND [100000]) = [100100] dając jako wynik zapytania pierwszą i czwartą osobę (miejsca jedynek w wektorze) 42

Perspektywy zmaterializowane indeksowane perspektywy w SQLServer, tabele zmaterializowanego zapytania w DB2 Po zaprojektowaniu tabel faktów i wymiarów następnie projektuje się perspektywy zmaterializowane określające wymagane agregacje danych z powyższych tabel. Na perspektywie zmaterializowanej można zakładać indeksy, więc ma ona te same własności co tabela. CREATE MATERIALIZED VIEW Sprzedaz_mv ENABLE QUERY REWRITE AS SELECT s.nazwa_sklepu, SUM(f.Wielkosc) AS Suma FROM Sklep s INNER JOIN Sprzedaz f ON f.idsklepu = s.idsklepu GROUP BY s.nazwa_sklepu; ENABLE QUERY REWRITE - zapytania pisane w terminach tabel faktów i wymiarów są przekształcane przez optymalizator do zapytań korzystających z perspektyw zmaterializowanych. 43

Funkcje analityczne nazwa_funkcji(argument,...) OVER (klauzula_okna) Dla każdego wynikowego wiersza zapytania określamy zbiór powiązanych z nim wierszy - nazywany oknem tego wiersza. Definiuje się go za pomocą tzw. klauzuli okna. Funkcja analityczna podaje pewną statystykę wartości w wierszu względem wartości w jego oknie. Występują od standardu SQL 2003. 44

PARTITION BY v v v PARTITION BY jest podobne do GROUP BY z tym, że wartości podsumowujące są załączane do każdego wiersza w grupie, a nie tylko raz dla całej grupy. SELECT e.ename, e.sal, SUM(e.Sal) OVER (PARTITION BY e.deptno) AS Suma, Round(100*e.Sal/(SUM(e.Sal) OVER (PARTITION BY e.deptno))) AS Proc_zarob FROM Emp e ORDER BY e.deptno, e.ename; -- Oknem każdego wiersza jest jego grupa określona przez PARTITION ENAME SAL SUMA PROC_ZAROB ---------- ------- --------- -------------------- CLARK 2450 8750 28 KING 5000 8750 57 MILLER 1300 8750 15 ADAMS 1100 10875 10 FORD 3000 10875 28 45