Wykład 1 Wojciech Pieprzyca

Slides:



Advertisements
Podobne prezentacje
Indeksy w bazie danych Oracle
Advertisements

Język C/C++ Funkcje.
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Projektowanie bazy danych
SQL – Strukturalny język zapytań
BD-LAB4 Wojciech Pieprzyca
PROGRAMOWANIE STRUKTURALNE
Komponenty bazy danych Baza danych Jest to uporządkowany zbiór powiązanych ze sobą danych charakterystycznych dla pewnej klasy obiektów lub zdarzeń,
WPROWADZENIE DO BAZ DANYCH
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
MS Access 2000 Tworzenie tabel Piotr Górczyński 2005.
25/08/2001 Bazy danych II 1 Piotr Górczyński Wstęp do SQL.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 7: Relacje i ograniczenia integralnościowe Język definiowania danych - DDL (Data Definition.
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
Język definicji danych (Data Definition Language)
Język definicji danych (Data Definition Language)
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
Wykład 2 Wojciech Pieprzyca
Wykład 8 Wojciech Pieprzyca
BD-LAB6 Wojciech Pieprzyca
Wykład 5 Wojciech Pieprzyca
Wykład 2 struktura programu elementy języka typy zmienne
Modele baz danych - spojrzenie na poziom fizyczny
Język SQL (Structured Query Language) DDL (Data Definition Language)
Bezpieczeństwo baz danych
Teoria relacyjnych baz danych
Bazy Danych II prowadzący: mgr inż. Leszek Siwik
PROJEKTOWANIE TABEL W PROGRAMIE: ACCESS
SQL – Structured Query Language (3)
Podstawy programowania
MySQL – ODBC - ACCESS.
Podstawy programowania
Instrukcje: CREATE, INSERT, UPDATE, DELETE, DROP
SQL – Structured Query Language (1)
Bazy danych podstawowe pojęcia
Systemy baz danych Wykład 1
Budowanie tabel i relacji
Prezentacja i szkolenie
Informatyka Relacyjne bazy danych.
SQL - Structured Query Language
Jak zacząć w MS SQL? USE master; GO IF DB_ID (Nbaza') IS NOT NULL DROP DATABASE baza; GO CREATE DATABASE baza; GO USE baza; GO.
Wybrane zagadnienia relacyjnych baz danych
Programowanie baz danych
Operacje edycyjne w bazie danych - kwerendy funkcjonalne Marzena Nowakowska Katedra Informatyki Stosowanej, WZiMK, PŚk.
Komendy SQL do pracy z tabelami i bazami
MICROSOFT Access TWORZENIE MAKR
PL/SQL – dalsza wędrówka
Projektowanie stron WWW
Projektowanie bazy danych
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Systemy Baz Danych Wykład III
Temat 3: Integralność danych. Integralność danych, określana również mianem spójności danych, jest to funkcja SZBD, która gwarantuje, że dane nie zostaną.
Programowanie strukturalne i obiektowe C++
Autor: Damian Urbańczyk
Projektowanie relacyjnych baz danych – diagramy związków encji
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Komendy SQL do pracy z danymi
Projektowanie postaci formularza:
BAZY DANYCH MS Access.
Wykład 3 Prowadzący: dr Paweł Drozda. Użytkownik bazy danych – osoba lub aplikacja, mająca dostęp do części danych zgromadzonych w bazie Uprawnienia –
Pętle – instrukcje powtórzeń
BAZY DANYCH Microsoft Access Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i.
ASP.NET Kontrolki źródła danych i prezentacji danych w ASP.Net
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Temat: Tworzenie bazy danych
Strukturalny język zapytań SQL - historia
Technologie Informacyjne Bazy danych
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

Wykład 1 Wojciech Pieprzyca Systemy Baz Danych Wykład 1 Wojciech Pieprzyca

Organizacja zajęć 7 zajęć wykładowych (I połowa semestru) 7 zajęć projektowych (I połowa semestru) Na zajęciach 4 i 7 kolokwia będące podstawą do uzyskania zaliczenia wykładu w I terminie Projekt – oddanie projektu na zajęciach 6, obrona i ocena na zajęciach 7

Wprowadzenie We współczesnym świecie trudno sobie wyobrazić dobrze funkcjonujące instytucje i firmy, których działalność mogłaby być prowadzona bez korzystania z baz danych. Bowiem wszystkie inne mechanizmy, nie są w stanie konkurować pod względem szybkości i wiarygodnego dostępu do informacji z dobrze zaprojektowanym oraz prawidłowo wdrożonym systemem baz danych. Częścią około 90% wszystkich systemów informatycznych są bazy danych. Zawartość baz danych ma często kluczowe znaczenie dla strategii i działalności korporacji.

Architektura klient-serwer Współczesne systemy baz danych są tworzone jako wielodostępne o architekturze klient-serwer. Architektura klient-serwer jest rodzajem systemu informatycznego, w którym dwa procesy współdziałają ze sobą jako nadrzędny i podrzędny. Proces klienta zawsze rozpoczyna współdziałanie od zgłoszenia zapotrzebowania. Proces serwera odpowiada na zgłoszone zapotrzebowanie. Odbywa się to w ten sposób, że stacja klienta przesyła zapytanie do bazy danych na ogół w języku SQL, a serwer przekazuje z powrotem gotową odpowiedź. SERWER zapytanie wynik KLIENT KLIENT KLIENT KLIENT KLIENT

Architektura klient-serwer Serwer umożliwia równoczesną obsługę wielu klientów. Zasoby serwera są współdzielone pomiędzy klientów na zasadzie tworzenia odrębnych procesów dla każdego z klientów. Serwer zarządzający bazą danych zapewnia zachowanie integralności referencyjnej danych oraz chroni bazę danych przed nieuprawnionym dostępem. Na stacjach roboczych są zainstalowane aplikacje klientów odpowiedzialne za generowanie zapytań do bazy danych i obsługę interfejsu użytkownika.

Przykładowe SZBD Systemy bazy danych w architekturze klient-serwer to m.in.: DB2 Informix Dynamic Server Firebird Microsoft SQL Server MySQL Oracle PostgreSQL Czasem jednak stosowanie serwera nie jest konieczne. Istnieją bazy danych, które nie muszą być współdzielone przez wielu użytkowników w tym samym czasie.Do takich zastosowań używane są bezserwerowe bazy danych takie jak: Access korzystająca z silnika Microsoft Jet Kexi korzystająca z silnika SQLite

Terminologia ENCJA - obiekt występujący w opisywanej rzeczywistości (tabela), ATRYBUT - własność encji (pole), KROTKA – zbiór atrybutów (rekord), ZWIĄZEK – w logiczny sposób łączy ze sobą encje (związek zwany jest także relacją) TYP ATRYBUTU - zakres wartości jakie może przyjmować dany atrybut, TABELA NADRZĘDNA - tabela w której każdemu wierszowi w relacji jeden do wielu odpowiada wiele wierszy tabeli podrzędnej, TABELA PODRZĘDNA - tabela w której każdemu wierszowi odpowiada dokładnie jeden wiersz w tabeli nadrzędnej,

Terminologia POLE - jest najmniejszą strukturą tabeli służącą do przechowywania jednej własności tabeli . REKORD - synonim wiersza tabeli, grupa wszystkich pól występujących w tabeli, KLUCZ PODSTAWOWY- pole jednoznacznie identyfikujące każdy rekord znajdujący się w tabeli, jest unikalne, co umożliwia spełnienie warunku o niepowtarzalności rekordów w tabeli, KLUCZ OBCY - pole służące do tworzenia relacji między tabelami (powiązań między wierszami tabel), może przyjmować jedynie takie wartości jak odpowiadający mu klucz podstawowy w tabeli nadrzędnej,

Terminologia INDEKS - zbiór uporządkowany według określonej zasady, służący do szybkiego znajdowania rekordu z wymaganą informacją, WIDOK (perspektywa) - jest tabelą otrzymaną w wyniku zapytania SQL. Jako pola wykorzystano dane z innych tabel, zatem sam widok nie posiada własnych danych, a jedynie takie, które dostarcza mu zapytanie SQL, PROCEDURA SKŁADOWANA (stored procedure) - procedura znajdująca się na serwerze w ramach SZBD i mogąca być w dowolnej chwili wywołana, WYZWALACZ (trigger) - procedura związana z określoną tabelą znajdująca na serwerze bazodanowym. Wyzwalacze uruchamiają się automatycznie w odpowiedzi na określone zdarzenie występujące w bazie danych np. dodanie albo aktualizacja rekordu.

Język SQL Większość operacji wykonywanych na bazie danych odbywa się za pomocą języka SQL (Structured Query Language) – Strukturalny Język Zapytań) . W języku tym można wyróżnić trzy podstawowe zbiory instrukcji związane z pełnionymi funkcjami, są to: DDL (Data Definition Language) – zbiór instrukcji dla definiowania struktur danych używany przez administratora systemu do tworzenia wszelkich obiektów bazy danych. Na przykład: - baz danych (databases), - tabel (tables), - widoków (views), - indeksów (indexes), - wyzwalaczy (triggers), - procedur składowanych (stored procedures).

Język SQL DML (Data Manipulation Language) – zbiór instrukcji używany do przeglądania, wprowadzania i modyfikacji danych przez uprawnionego użytkownika. Na przykład polecenia: DCL (Data Control Language) – zbiór instrukcji związanych z ochroną danych, na przykład polecenia: SELECT, INSERT, UPDATE, DELETE. GRANT - przydział uprawnień, REVOKE - odbieranie uprawnień.

Uprawnienia GRANT prawa ON nazwa_tabeli TO nazwa_uzytkownika Poniżej podano ogólną postać poleceń nadawania i odbierania uprawnień użytkownikowi: GRANT prawa ON nazwa_tabeli TO nazwa_uzytkownika REVOKE prawa ON nazwa_tabeli TO nazwa_uzytkownika prawa{SELECT,INSERT,UPDATE,DELETE,EXECUTE,ALL}

Typy danych W współczesnych bazach danych stosuje się, co najmniej kilka różnych typów danych. Najczęściej używane podano w tabeli poniżej. Typ danych Zakres wartości BLOB Dane dowolnego typu w formacie binarnym SMALLINT Liczby całkowite z przedziału od –32768 do +32767 INTEGER Liczby całkowite z przedziału od –2.147.483.648 do +2.147.483.647 NUMERIC(m,n) Liczba dziesiętna z określoną liczbą cyfr m przed przecinkiem i po przecinku n CHAR(n) typ znakowy o stałej długości VARCHAR(n) typ znakowy o zmiennej długości maksymalnie n znaków TIME pole do przechowywania czasu TIMESTAMP Pole do przechowywania daty i czasu

Indeksy Kolejnym składnikiem bazy danych są indeksy. Indeksy mają za zadanie przyspieszenie wyszukiwania informacji. Indeksy tworzy się poleceniem: Indeks może być unikalny (UNIQUE), to znaczy taki, dla którego wartości w kolumnie się nie powtarzają. Wyłączyć działanie indeksu można poleceniem: Usunięcie indeksu odbywa się poleceniem: CREATE [UNIQUE] INDEX nazwa_indeksu ON nazwa_tabeli (lista kolumn określających index); ALTER INDEX nazwa_indeksu INACTIVE ; DROP INDEX nazwa_indeksu;

Integralność referencyjna Aby dane były poprawne muszą tworzyć integralną całość. Integralność danych powinna być zachowana podczas wszelkich ich modyfikacji. Jest to jeden z najpoważniejszych aspektów projektowania dobrego systemu baz danych Aby zapewnić odpowiednie połączenia (relacje) między wierszami tabel należy określić klucz podstawowy w tabeli nadrzędnej oraz klucz obcy w tabeli podrzędnej, odpowiadające sobie wiersze mają tę samą wartość klucza. Składnia polecenia jest następująca: ALTER TABLE nazwa_tabeli_podrzednej ADD CONSTRAINT nazwa_powiazania FOREIGN KEY (nazwa_pola) REFERENCES nazwa_tabeli_nadrzednej (nazwa_klucza_tabeli_nadrzednej) ON DELETE akcja;

Integralność referencyjna Słowo akcja określa, co stanie się z wierszami w tabeli podrzędnej po tym jak zajdzie usunięcie wiersza w tabeli nadrzędnej. Wyróżniamy cztery rodzaje akcji: NO ACTION – nie pozwala usunąć wiersza w tabeli nadrzędnej, dopóki istnieją do niego odwołania w tabeli podrzędnej, CASCADE – usuwanie kaskadowe, usunięcie wiersza z tabeli nadrzędnej jest jednoznaczne z usunięciem wszystkich wierszy w tabeli podrzędnej odwołujących się do usuwanego wiersza z tabeli nadrzędnej, SET DEFAULT – usunięcie wiersza z tabeli nadrzędnej spowoduje ustawienie pola w tabeli podrzędnej odwołującego się tabeli nadrzędnej na wartość domyślną, SET NULL – pole wiersza (klucz obcy) odwołującego się do usuwanego wiersza w tabeli nadrzędnej, w tabeli podrzędnej otrzyma wartość NULL.

Zawartość tabeli systemowej Tabele systemowe Interbase i FireBird przechowują informacje o strukturze bazy danych w specjalnych tabelach systemowych w tak zwanym katalogu. Informacje z tabel systemowych można uzyskać tworząc odpowiednie zapytanie w języku SQL analogicznie jak to ma miejsce w przypadku zwykłych tabel. Tabela systemowa Zawartość tabeli systemowej RDB$CHECK_CONSTRAINTS informacje o ograniczeniach CHECK oraz o kolumnach NOT NULL RDB$DATABASE opis bazy danych opis tabel i kolumn z których korzystają inne obiekty bazy danych jako widoki, procedury, wyzwalacze,i kolumny wyliczane RDB$DEPENDENCIES RDB$EXCEPTIONS opis błędów procedur oraz wyjątków RDB$FIELD_DIMENSIONS opis wymiarów tablicy zastosowanej jako typ dlakolumny RDB$FIELDS opis właściwości wszystkich kolumn tabeli RDB$FILES opis dodatkowych plików bazy danych oraz plików z kopią bazy RDB$FUNCTION_ARGUMENTS opis parametrów funkcji, ich pozycji, typu, długości, etc.

Zawartość tabeli systemowej Tabele systemowe Tabela systemowa Zawartość tabeli systemowej RDB$FUNCTIONS opis funkcji zdefiniowanych przez użytkownika RDB$GENERATORS informacje o generatorach RDB$INDEX_SEGMENTS opis indeksów złożonych z kilku kolumn RDB$INDICES opis dla indeksów prostych i złożonych RDB$PAGES opis alokacji stron dla bazy danych RDB$PROCEDURE_PARAMETERS opis parametrów procedury bazy danych RDB$PROCEDURES informacje o procedurach RDB$REF_CONSTRAINTS opis ograniczeń integralności referencyjnej RDB$RELATION_CONSTRAINTS opis ograniczeń o integralności danych tabeli RDB$RELATION_FIELDS opis kolumn wszystkich tabel RDB$RELATIONS opis tabel i widoków RDB$ROLES opis roli i właściwości roli RDB$TRIGGER_MESSAGES informacje o wyzwalaczu i jego komunikat RDB$TRIGGERS opis zdefiniowanych wyzwalaczy RDB$PRIVILEGES informacje o prawach użytkowników

Wyjątki W skrypcie SQL wyjątki definiowane są przez wywołanie: Wyjątki są wywoływane przez system w wyniku powstania określonego błędu występującego w czasie pracy z bazą danych. Tworzy się je w następujący sposób: CREATE EXCEPTION nazwa_wyjatku ‘komunikat_o_bledzie’ ; W skrypcie SQL wyjątki definiowane są przez wywołanie: EXCEPTION: WHEN SQLCODE numer_bledu DO EXCEPTION nazwa_wyjatku;

Transakcje Transakcja polega na wykonaniu pewnego ciągu poleceń, które mogą zakończyć się albo całkowitym wykonaniem i przejściem w nowy stan albo anulowaniem wszelkich zmian i pozostaniem w dotychczasowym stanie. Przykładem transakcji jest np. wypłata pieniędzy z konta bankowego. Transakcja rozpoczyna się poleceniem START TRANSACTION. W przypadku całkowitego poprawnego wykonania transakcji wywoływana jest funkcja COMMIT TRANSACTION, która zatwierdza wszystkie zmiany w bazie. W razie niepowodzenia wykonania jakiekolwiek części transakcji, wszelkie zmiany są anulowane poprzez wywołanie funkcji ROLLBACK.

Procedury zapamiętane Wyróżniamy dwa rodzaje procedur zapamiętanych: procedury wykonawcze, procedury wybierające, które występują w głównie w postaci zapytań języka SQL i zwracają zbiór wierszy. Dodatkową zaletą tych procedur jest ich fizyczne umieszczenie tylko na jednym komputerze, co w przypadku zmian powoduje konieczność modyfikacji kodu tylko w jednym, konkretnym miejscu, a nie dla każdego klienta.

Procedury zapamiętane Składowane procedury są przechowywane w pliku bazy danych. Umożliwiają one bezpośrednie manipulowanie danymi w bazie danych, bez generowania ruchu sieciowego. W odróżnieniu od tradycyjnych środowisk programistycznych, w których programy wykonują się u klienta, procedury składowane są wykonywane przez serwer bazy danych i wykonują się całkowicie na serwerze. Najprostszą metodą wykonania składowanej procedury jest użycie wyrażenia: Wywołanie procedury wybierającej możliwe jest z poziomu języka SQL poprzez odpowiednie zapytanie: EXECUTE PROCEDURE nazwa_procedury(parametry); SELECT * FROM nazwa_procedury(parametry);

Procedury zapamiętane Usunięcie procedury następuje po wydaniu polecenia: Procedury składowane można uruchamiać w następująco: z programów użytkowych i procedur składowanych; z wnętrza wyzwalacza; z wnętrza aplikacji, takiej jak na przykład C++Builder; jako zapytanie SELECT języka SQL. DROP PROCEDURE nazwa_procedury;

Procedury zapamiętane Procedura ma postać ciągu instrukcji języka proceduralnego. Do każdej procedury mogą być przekazane parametry. Procedura może nadawać wartości parametrom zwrotnym deklarowanym po klauzuli RETURNS. Wewnątrz procedury można używać zmiennych pomocniczych deklarowanych po klauzuli AS. Składowane procedury są tworzone za pomocą wyrażenia CREATE PROCEDURE języka SQL. Wyrażenie to ma następującą składnię: CREATE PROCEDURE nazwa_procedury [(parametry)] RETURNS [lista parametrów zwrotnych] AS [zmienne lokalne] BEGIN ciało procedury END

Procedury zapamiętane Nazwa procedury musi być unikalna w bazie danych. Składa się ona z ciągu liter, cyfr i znaków podkreślenia. Nazwa powinna rozpoczynać się od litery. Duże i małe litery w nazwie są nierozróżnialne. Lista parametrów jest ciągiem zmiennych, które są przekazywane do procedury z aplikacji wywołującej. Parametry te są wykorzystywane wewnątrz procedury. Lista parametrów zwrotnych reprezentuje wartości, które procedura może zwracać z powrotem do aplikacji wywołującej. Lista parametrów i lista parametrów zwrotnych mają następujący format: Nazwa_parametru_1 typ_parametru_1 [,Nazwa_parametru_2 typ_parametru_2,..]

Procedury zapamiętane Przekazywane oraz zwracane parametry znajdujące się w treści procedury muszą być dodatkowo poprzedzone znakiem dwukropka. Po słowie kluczowym AS można zadeklarować zmienne o zakresie lokalnym. Zmienne te są widoczne tylko wewnątrz procedury i są niszczone po zakończeniu jej działania. Zmienne lokalne deklaruje się po klauzuli AS przy pomocy wyrażenia DECLARE VARIABLE. Poniżej podano przykład deklaracji dwóch zmiennych. Typem parametru lub zmiennej lokalnej może być dowolny typ danych, oprócz typu BLOB i typów tablicowych. DECLARE VARIABLE nazwa CHAR(20); DECLARE VARIABLE kwota NUMERIC(12,2);

Procedury zapamiętane Poniżej podano dopuszczalne typy danych: dopuszczalny typ danych ::= SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION | DECIMAL | NUMERIC [(precyzja [,skala])] | DATE | TIME | TIMESTAMP | CHAR | VARCHAR [(INT)][CHARACTER SET WIN1250]

Procedury zapamiętane Ciało procedury rozpoczyna się słowem kluczowym BEGIN, a kończy się słowem END. Ciało procedury składa się z ciągu instrukcji języka SQL poprzeplatanych słowami języka proceduralnego przypominającego „Pascal”. Jest to ta część języka SQL, która umożliwia manipulowanie danymi. Umożliwia to, budowanie wyrażeń warunkowych oraz instrukcji pętli. Wewnątrz procedur można używać następujących polecenia języka SQL: INSERT UPDATE DELETE SELECT

Procedury zapamiętane SET TERM ^ ; CREATE PROCEDURE WARTOSC RETURNS ( R_ID_TOW INTEGER, R_TOWAR CHAR(20), R_WARTOSC NUMERIC(8, 2) ) AS BEGIN FOR SELECT ID_TOWARU, NAZWA_TOWARU, ILOSC*CENA FROM TOWARY INTO :R_Id_Tow, :R_Towar, :R_WARTOSC DO SUSPEND; END ^ SET TERM ; ^ COMMIT WORK; Jeżeli w bazie danych, jest umieszczona tabela TOWARY, to uruchomienie tej procedury następuje z programu narzędziowego IBConsole lub ISQL poleceniem:   SELECT * FROM Wartosc;

Procedury zapamiętane Wynik działania procedury R_Id_Tow R_Towar R_Wartosc 23 Cukier 4000 25 Kawa 8250 16 Sok jabłkowy 1250 17 Napój Frugo 5040 33 Sok pomarańczowy 975

Procedury zapamiętane Słowa kluczowe BEGIN i END mogą być również wykorzystane do zaznaczenia dowolnego bloku kodu wszędzie tam, gdzie wymagane jest użycie pojedynczego wyrażenia. Blok kodu składa się z ciągu instrukcji logicznie stanowiących jedną całość, taką jak na przykład instrukcja wykonywana wewnątrz pętli. Bloki kodu mogą być stosowane do grupowania instrukcji w dowolnych miejscach procedur. Bloki kodu BEGIN..END mogą być zagnieżdżane wewnątrz innych bloków. Blok kodu ma następującą składnię: BEGIN Wyrażenie SQL END

Procedury zapamiętane Instrukcja FOR SELECT..DO wykonuje blok kodu lub wyrażenie dla każdego wiersza zwróconego przez zapytanie SELECT. Polecenie SUSPEND zatrzymuje działanie procedury aż do momentu pobrania kolejnego wiersza z tabeli. Składnia instrukcji FOR SELECT jest następująca: FOR SELECT * | Lista atrybutów FROM Nazwa tabeli | Lista polaczonych tabel WHERE Warunek wyboru wierszy INTO Lista parametrów zwrotnych> DO BEGIN Ciag Instrukcji; SUSPEND; END

Procedury zapamiętane Podobnie jak w innych językach programowania, przy tworzeniu procedury składowanej można posłużyć się wyrażeniem wykonywanym warunkowo. Służy do tego instrukcja IF..ELSE. Struktura tej instrukcji jest następująca: Jeżeli warunek jest prawdziwy, to wykonywane jest wyrażenie SQL_1, w przeciwnym przypadku realizowane jest wyrażenie SQL_2. IF (warunek) THEN Wyrazenie SQL_1; ELSE Wyrazenie SQL_2;

Procedury zapamiętane Pętla WHILE działa według podobnej zasady jak w języku C. Ogólna struktura tej pętli jest następująca: Wyrażenie SQL jest tak długo powtarzane jak długo warunek jest prawdziwy. Wyrażenie powinno zawierać kod, który sprawi, że warunek sterujący działaniem pętli przyjmie ostatecznie wartość fałszywą. Jeżeli ten kod zostanie pominięty, to pętla będzie wykonywana w nieskończoność, co będzie wyglądało jak zawieszenie się programu. WHILE(warunek)wyrazenie_SQL;

Procedury zapamiętane SET TERM ^ ; CREATE PROCEDURE CENY ( P_NOWA_CENA NUMERIC(8, 2), P_STATUS CHAR(10) ) RETURNS R_STATUS CHAR(10), R_NAZWA CHAR(12), R_CENA_NETTO NUMERIC(8, 2), R_CENA_SPRZED NUMERIC(8, 2), R_VAT NUMERIC(8, 2) AS DECLARE VARIABLE i INTEGER; DECLARE VARIABLE Cen NUMERIC(8, 2); BEGIN i = 1; WHILE (i < 3) DO

Procedury zapamiętane BEGIN FOR SELECT 'Stara cena', NAZWA_TOWARU, CENA, CENA*(1+VAT), VAT FROM TOWARY INTO :R_Status, :R_Nazwa, :R_Cena_Netto, :R_Cena_Sprzed, :R_VAT DO IF (i=2) THEN Cen = R_Cena_Netto; R_Status = P_Status; R_Cena_Netto = Cen * P_Nowa_Cena; R_Cena_Sprzed = Cen * P_Nowa_Cena * (1 + R_VAT)*1.05; END SUSPEND; i = i + 1; END ^ SET TERM ; ^ COMMIT WORK;

Procedury zapamiętane Po uruchomieniu procedury poleceniem: Otrzymuje się w wyniku następującą tabelę: SELECT * FROM CENY(1.2,’Nowa cena’); R_Status R_Nazwa R_Cena_Netto R_Cena_Sprzed VAT Stara cena Cukier 2.00 2.14 0.07 Kawa 5.50 6.71 0.22 Olej sojowy 5.00 5.35 Kakao 8.00 8.56 Margaryna 1.50 1.83 Nowa cena 2.40 2.70 6.60 8.45 6.00 6.74 9.60 10.79 1.80 2.31

Procedury zapamiętane Procedury zapamiętane powinny być stosowane w następujących przypadkach: Jeżeli operacja może być wykonana w całości na serwerze, bez wymogu pozyskania informacji od użytkownika podczas trwania operacji. Jeśli operacja wymaga przetworzenia dużej ilości wierszy, co mogłoby być nadmiernie kosztowne w kategoriach ruchu sieciowego. Jeśli operacja musi być wykonywana okresowo lub często. Jeśli operacja jest wykonywana przez wiele różnych modułów lub procesów wewnątrz aplikacji lub przez różne aplikacje. Jeśli logika operacji często się zmienia.

Projekt – model logiczny Legenda: NO – pole typu autoincrement, używane zazwyczaj dla pól id, VA40 – pole typu tekstowego VARCHAR o maksymalnej długości 40 znaków A5 – pole typu tekstowego CHAR o maksymalnej długości 5 znaków I – pole typu liczba całkowita (INTEGER) F – pole typu liczba rzeczywista (FLOAT) D – pole typu data (DATE) BL – pole typu logicznego (BOOLEAN) PI – primary identifier – klucz główny M – mandatory – pole obowiązkowe

Projekt – rodzaje relacji Relacja 1:1 – jeden do jednego Przykład: relacja pomiędzy tabelą pracownik i samochód przy założeniu, że pracownik może mieć tylko jeden samochód i każdy samochód jest przyporządkowany tylko do jednego pracownika Relacja 1:N – jeden do wielu Przykład: klient może dokonać wielu rezerwacji. Z drugiej strony każda rezerwacje dotyczy tylko jednego konkretnego klienta. Relacja N:N – wiele do wielu Przykład: zamawiającym pozycję z menu jest klient posiadający rezerwacje, może on zamówić dowolnie wiele pozycji, z drugiej strona każda z pozycji menu może być zamówiona przez wielu klientów (posiadających rezerwacje) naraz. Okrąg oznacza opcjonalność danej relacji np. klient może ale nie musi zamówić czegoś z menu restauracyjnego.

Projekt – model fizyczny W modelu fizycznym typy danych zostały odzwierciedlone na rzeczywiście występujące w programie MS Access. Relacje zostały uwzględnione w postaci tzw. kluczy obcych, które pozwalają na łączenie tabel ze sobą np. w tabeli Rezerwacje pojawiły się pola id_klienta, id_pokoju i id_pracownika. Dla relacji N:N (wiele do wielu) dodatkowo tworzone są pośrednie tabele (w przypadku naszego projektu powstała tabela ZamowieniaMenu). <pk> - primary key – klucz główny <fk> - foreign key – klucz obcy