Literatura
- J. Ullman, J. Widom, Podstawowy wykład z systemów baz danych , WNT, Warszawa
2000.
- C. Date, Wprowadzenie do systemów baz danych , WNT, Warszawa 2000
- Thomas Connolly, Carolyn Begg, Systemy baz danych Tom 1 i Tom 2, Praktyczne
metody projektowania implementacji i zarządzania, Wydawnictwo RM 2004
- Jan L. Harrington, SQL dla każdego , Mikom, Warszawa czerwiec 2000
- Steven Roman, Access. Baza danych. Projektowanie i programowanie, Helion, Czerwiec
2001
- Ramez Elmasri, Shamkant B. Navathe, Wprowadzenie do systemów baz danych, Helion
2005
Tematyka wykładów
" Podstawowe pojęcia
" baza danych
" systemy zarządzania bazą danych
" Historia oprogramowania baz danych
" Diagramy związków encji
" SQL
" Modele danych
" proste modele danych
" klasyczne modele danych
" semantyczne modele danych
" Architektury systemu bazy danych
" poziom zewnętrzny
" poziom koncepcyjny
" poziom wewnętrzny
" Relacyjny model danych
" podstawowe teorie dla baz relacyjnych
" algebra działań na relacjach
" normalizacja
" Przetwarzanie zapytań
" Przetwarzanie transakcji
" Bezpieczeństwo baz danych
Warunki zaliczenia
- laboratoriów (?)
- egzamin (trzeba mieć zaliczenie z laborek, ocena do indeksu = średnia ważona 0.6*Egz
+ 0.4 Lab) egzamin pisemny z części teoretycznej i praktycznej (dwie części - jedna
ocena), nie ma zwolnień z egzaminu
Bazy danych
Podstawowe pojęcia
" Słownik online Webstera definiuje bazę danych jako duży zbiór danych o określonej
strukturze, która umożliwia im szybkie wyszukiwanie.
" Wieczerzyński (1994) - nazywa bazą danych zbiór powiązanych danych
" Delobel (1991) - definiuje bazę danych jako uporządkowany zbiór danych, do których
może mieć dostęp wielu użytkowników jednocześnie w dowolnym odpowiadającym im
momencie
" Baza danych jest to logicznie spójny zbiór danych przechowywanych w komputerze,
które służą określonym celom i do których istnieje współbieżny dostęp wielu
użytkowników.
Pańkowski - rok 1992
System bazy danych = baza danych + system zarzadzania baza danych
SBD = ({P, BD, SZBD, SO, U}, R)
" P - pamięć zewnętrzna oraz wewnętrzna komputera
" BD - właściwa baza danyc, zawierająca dane oraz schemat
" SZBD - system zarządzania bazą danych
" SO - system operacyjny komputera
" U - programy użytkowe korzystające z bady danych
" R - zbiór relacji określających powiązania pomiędzy wszystkimi elementami SBD
Baza danych jest magazynem danych z nałożoną na niego wewnętrzną strukturą.
RYSUNEK #1
RYSUNEK #2
System zarządzania bazą danych (Database Management System) - SZBD
" program uruchamiany jest w pamięci wewnętrznej komputera, kontrolowany przez
system operacyjny, który działa jako interfejs między użytkownikami a bazą danych
" zbiór bibliotek, aplikacji i narzędzi, które zwalniają programistę aplikacji z konieczności
pamiętania o szczegółach przechowywania i zarządzania danymi
" dostarcza różnych funkcji do wyszukiwania i aktualizacji
Każda baza danych posiada:
" zródło danych
" użytkowników
" związki z reprezentowaną rzeczywistością
Z pojęciem bazy danych są nierozerwalnie związane dwie cechy:
" trwałość - dane mają być przechowywane przez pewien okres czasu, na ogól z góry
nieokreślony
" zgodność z rzeczywistością - dane w bazie muszą stanowić wierne odzwierciedlenie
modelowanego fragmentu rzeczywistości
Każda baza danych, a także każdy SZBD muszą się stosować do zasad określonego
modelu danych.
Przy budowie bazy danych zwraca się uwagę na:
" kontrolowanie powtarzania się (replikacji) danych
" oparcie się na jednym spójnym systemie reprezentacji danych - model danych
" współbieżny dostęp do bazy danych przez wielu użytkowników
" zapewnienie ochrony danych
" niezależność danych: dane i procesy działające na bazie danych powinny być
niezależne względem siebie
Zbiór zasad, które określają model danych:
" definicja danych - jaka jest struktura danych
" operowanie danymi - jak operuje się danymi
" integralność danych - jakie stany bazy są poprawne
=======================RYSUNEK #3===========================
Rozwój systemów baz danych
" kawałek po kawałku
" system zintegrowany
Modelowanie baz danych
Diagramy związków encji
=======================RYSUNEK #4============================
Pojęcia = -> ODL, -> E/R
Relacje = <- ODL, <- E/R
ERD - Diagramy relacyjne danych
- Modelowanie związków encji - podejście zstępujące do projektowania bazy danych
- Wyodrębnianie istotnich danych - encji oraz związków pomiędzy nimi, które powinny być
reprezentowane w modelu
- Dodanie do modelu coraz więcej szczegółów - o encjach i związkach
- Diagram związków encji - abstrakcyjny projekt bazy danych
- ERD służą do analizy powiązań i zależności pomiędzy tabelami oraz do usuwania z tym
związanych problemów
Wykorzystuje się je głównie do:
- analizy zależności funkcyjnych w bazie danych
- wykrywaniu i usuwaniu problemów z redundancją (nadmiarowością) danych
- projektowaniu struktury bazy
- czytelnej i przejrzystej wizualizacji położenia atrybutów
- analizy powiązań przy definiowaniu i wykorzystywaniu kluczy złożonych
Zalety diagramów związków encji
- niezależność od systemu
- przejrzystość
- łatwość interpretacji
Obecnie nie istnieje standardowa notacja dla modelu ERD
- diagramy Chena, które składają się z prostokątów reprezentujących zbiory encji, rombów
reprezentujących związki oraz odcinków, które je łączą
- noracja kurzej łapki, w której podobnie jak w diagramach Chena wykorzystuje się
prostokąty do reprezentacji zbiorów encji oraz odcinki pomiędzy encjami do reprezentacji
związków: na końcach odcinków reprezentujących związki funkcyjne pojawiają się kurze
łapki, od których pochodzi nazwa notacji
- UML (Unifield Modeling Language) - najnowszy język modelowania obiektowego
nazywanym zunifikowanym językiem modelowania
ERD - Diagramy relacyjne danych
Dziedzina koncepcyjna postrzegana jako zbiór encji oraz związków między encjami
Podstawowe elementy modelu ERD
- encja
- związek
- atrybut
- Encja - rozróżnialny obiekt wzięty z rzeczywistego świata
- Wystąpienie encji - unikalny, rozpoznawalny obiekt ze zbioru encji
- Zbiór encji identyfikowany jest przez nazwę i listę właściwości
- Nazwa encji - rzeczownik w liczbie pojedynczej
- W notacji UML - początek dużą literą
Graficzna ( :D ) prezentacja zbiorów encji Personel i Biuro
Personel <---- Nazwa encji ----> Biuro
Związki
- Związek - zbiór powiązań pomiędzy jednym lub większą liczbą uczestniczących w
związku zbiorów encji
- Każdemu związkowi nadaje się nazwę, która opisuje jego funkcje
- binarne - obejmuje dwie encje
- wielorakie - obejmuje więcej niż dwie encje
- Związek jest na ogół opisywany tylko w jednym kierunku, co oznacza, że nazwę związku
można sensownie interpretować tylko w tym wybranym kierunku
Graficzna prezenracja związku Biuro Ma Personel
Personel < Ma Biuro
^
|
Nazwa związku
- Encje biorące udział w danym związku nazywane są uczestnikami tego związku
- Liczba uczestników w związku nazywana jest stopniem związku
Graficzna prezentacja potrójnego związku nazwanego Rejestruje
Personel
Biuro
|
Klient
Graficzna prezentacja poczwórnego związku nazwanego Uzgadnia
Pracownik
|
Kupujący Instytucja finansowa
|
Oferta
Graficzna prezentacja opisu rekurencyjnego Kieruje z nazwami ról Kierownik i Kierowany
=========================Rysunek #5=============================
Przykład encji powiązanej ze sobą poprzez dwa różne związki
=========================Rysunek #6=============================
Atrybut
- każda konkretna cecha zbioru encji nazywana jest atrybutem
- atrybuty zawierają wartości, które opisują każde wystąpienie encji, i które są główną
częścią danych pamiętanych w bazie
- związki przedstawiające powiązania pomiędzy zbiorami encji także mogą mieć atrybuty
- każdemu atrybutowi przypisywany jest zbiór wartości nazywany dziedziną
- dziedzina określa wszystkie potencjalne wartości, jakie może przyjmować atrybut
- atrybuty mogą być
- proste lub złożone
- jednowartościowe lub wielowartościowe
- pochodne
Graficzna prezentacja encji Personel i Biuro wraz z ich atrybutami
======================Rysunek #7===============================
/ - oznacza ze atrybut jest atrybutem pochodnym
Atrybuty powinny być atomowe (niepodzielne)
Silne i słabe zbiory encji
Zbiory encji dzieli się na silne i słabe
- Silny zbiór encji to zbiór encji, którego istnienie nie jest zależne od innych zbiorów encji.
Możemy jednoznacznie identyfikować każdego pracownika poprzez atrybut
peacownikNr, który jest kluczem głównym zbioru encji Personel
- Słaby zbiór encji to zbiór encji, którego istnienie zależy od innych zbiorów encji. Cechą
charakterystyczną słabego zbioru encji jest brak jednoznacznej identyfikacji każdego
wystąpienia encji za pomocą atrybutów przypisanych wyłącznie temu zbiorowi encji.
Silny zbiór encji klient i słaby zbiór encji Preferencje
=========================Rysunek #8============================
Przykład związku Ogłasza z atrybutami dataOgłoszenia i koszt
=========================Rysunek #9============================
Krotność wzajemnie jednoznacznego związku 1:1 Personel Zarządza Biuro
========================Rysunek #10============================
Krotność związku jeden do wielu Personel Nadzoruje Nieruchomość
========================Rysunek #11============================
Krotność przedstawiona jako więzy liczności i uczestnictwa dla związku Personel
Zarządza Biuro
========================Rysunek #12============================
ERD - Notacja Chena (ze dwa slajdy mi brakuje :-] )
Nazwa encji/związku w: rodzaj:
prostokącie silna encja
podwójnym prostokącie słaba encja
rombie związek
podwójnym rombie związek powiązany ze
słabą encją
podwojnym rombie, pod
spodem prostokąt
kole atrybut
kole z podkresleniem atrybut klucza głównego
podwójnym kole atrybut wielowartościowy
kole wykropkowanym atrybut pochodny
ERD - notacja Kurzej Aapki
Historia rozwoju baz danych
- Charles Bachman - pakie IDS (Integrated Data Store) do uruchomienia wyłącznie na
maszynach GEC (General Electric Company)
- system IDMS w latach 60, 70 i 80 działał na dużych komputerach IBM
- koncepcję modelu relacyjnego - 1970 rok Ted Codd
- prototyp relacyjnego SZBD o nazwie System/R - lata 70
- pierwsza relacyjna baza danych DB2 dla dużych komputerów - 1989 rok
- lata 80 - SZBD dla komputerów klasy PC np. DBASE II itp.
I generacja (lata 60 i 70)
- charakteryzowała się oddzieleniem informacji logicznej i fizycznej
- po raz pierwszy do opisania struktur fizycznych zastosowano modele danych
- opierając się o pojęcie grafu opracowano modele hierarchiczny i sieciowy
II generacja
- systemy relacyjne (początek lat 80)
- relacje - ważne pojęcie matematyczne
- generacja związana z modelem opracowanym przez Codda
III generacja
- rozszerzone relacyjne systemy baz danych
- obiektowo - relacyjne
- obiektowe
Modele danych dostarczają pojęć
- dotyczących integralności danych
- umożliwiających definiowanie danych
- umożliwiających operowanie danymi
Modele danych
- proste modele danych
- klasyczne modele danych
- modele hierarchiczne
- sieciowe
- relacyjne
- semantyczne modele danych
- obiektowe modele danych
Ewolucja modeli danych
Systemy plików > Diagramy Bachmana > (Model hierarchiczny; Model sieciowy) >
Płaski model relacyjny > (Zagnieżdżony model relacyjny > Modele obiektów złożonych;
Model związków encji > Semantyczne modele danych) > Modele obiektowe
Hierarchiczny model danych - definicja danych
- typ rekordu
- związki nadrzędny-podrzędny pomiędzy nimi
- typy rekordów tworzą strukturę drzewa
Operowanie danymi
Typowe operacje na danych w tym modelu to:
- wyszukiwanie rekordów
- usuwanie rekordów
- dodawanie rekordów
- edycja ich pól
Realizowane poprzez funkcje lub procedury pisane w językach programowania o
charakterze zazwyczaj proceduralnym, np. C
Integralność danych
- każdy rekord (z wyjątkiem korzenia) musi być powiązany z rekordem nadrzędnym
właściwego typu
- usunięcie rekordu nadrzędnego wiąże się z usunięciem wszystkich rekordów względem
niego podrzędnych
- nie można wstawić rekordu bez powiązania go z rekordem nadrzędnym
- zawartość każdego pola rekordu musi odpowiadać typowi danych z definicji danego typu
rekordu
Sieciowy model danych - definicja danych
- typy rekordów
- typy kolekcji (powiązania) - są to binarne związki typu jeden-do-wielu - określają nazwy
typów rekordów posiadacza i uczestnika
- każdemu rekordowi typu uczestnik odpowiada dokładnie jeden rekord typu posiadacz
- każdemu rekordowi typu posiadacz odpowiada zero, jeden lub więcej rekordów typu
uczestnik
Operacje można podzielić na trzy grupy
- wyszukiwanie informacji
- zmiana rekordów
- usuwanie lub dodawanie danych
Sieciowy model danych
Warunki integralności danych
- zgodność zawartości pól rekordu z określeniem typu rekordu i unikalności pól
kluczowych
- wymóg przynależności rekordu do jakiegoś wystąpienia określonego typu kolekcji
Dlaczego szukano nowego modelu
- nowe dziedziny dla baz danych:
- projektowanie (design databases)
- multimedia (multimedia databases)
- sztuczna inteligencja (knowledge bases
- dane niejednorodne
- długie łańcuchy znakowe o zmiennej długości
- obiekty złożone
- wielowersyjność
- obiekty równoważne
- długie transakcje
Obiektowy model danych
- obiektowa baza danych składa się z obiektów i klas obiektów, powiązanych pewną liczbą
mechanizmów abstrakcji
- obiekt jest pakietem danych i procedur
- dane są trzymane w atrybutach obiektu
- procedury są definiowane za pomocą metod obiektu
- metody są uaktywniane przez komunikaty przekazywane między obiektami
Obiektowy model danych powinien dostarczać środków do realizacji:
- tożsamości obiektów - możliwość rozróżnienia dwóch obiektów o takich samych cechach
- mechanizmu uogólnienia - deklarowanie pewnych klas obiektów jako podklas innych klas
obiektów
- powiązania obiektów z klasami obiektów
Rozwój modeli danych
- systemy plików ( x - 2000)
- hierarchiczne i sieciowe BD (1962 - 1990)
- cośtam
- obiektowe
Korzyści ze stosowania baz danych
- zmniejszenie nadmiarowości przechowywanych danych
- współdzielenie danych - na tych samych danych mogą współbieżnie pracować różne
aplikacje, bez zagrożenia wzajemnego ich niszczenia
- autoryzacja dostępu do danych
- wielość interfejsów do danych
Codd definiując model relacyjny podał 12 reguł dotyczących przedstawiania relacji jako
tabeli
- reguła informacyjna
- reguła gwarantowanego dostępu
- uporządkowana obsługa wartości NULL
- aktywny katalog dostępny na bieżąco, oparty na modelu relacyjnym
- reguła dotycząca podjęzyka obsługi danych o pełnych możliwościach
- (...)
Relacyjny model danych
- relacyjny model danych został opracowany przez E. F. Codda w latach 70-80
- od połowy lat 80 stał się podstawą architektury większości popularnych SZBD
Definicja danych
- model relacyjny oparty jest na tylko jednej podstawowej strukturze danych - relacjai
- pojęcie relacji można uznać za pewną abstrakcję
Relacyjny model danych
- relacyjna baza danych zawiera kolekcję tablic (relacji), każda tablica posiada unikalną
nazwę
- nazwane kolumny tablic reprezentują atrybuty encji
- wiersze tablicy reprezentują wartości atrybutów dla określonej encji
- istnieje bezpośredni związek między pojęciem tablicy a pojęciem relacji w
matematycznym ujęciu
- podstawowe teorie dla baz relacyjnych
- algebra relacji wykorzystująca podstawowe operacje na bazach relacyjnych typu
selekcja, projekcja, złączenie, produkt kartezjański, unia
- rachunek relacyjny
- teoria normalizacji
Klucze główne i obce
- klucz
- jeden lub wiele atrybutów K, które spełniają unikalność (nie istnieją dwie krotki,
które posiadają tą samą wartość dla K) oraz tzw. minimum (jeśli zbiór K jest
złożony, żaden z komponentów nie może być wyeliminowany bez naruszenia
unikalności)
- klucz główny - jeden z kluczy kandydatów
- klucz obcy - jeden z atrybutów, który wskazuje klucz główny innej lub tej samej relacji
- integralność referencyjna - wartości kluczy obcych muszą być określone na podstawie
zbioru korespondujących kluczy głównych
Integralność danych w relacyjnej bazie danych
- integralność relacji - każda relacja musi posiadać klucz główny, wartości klucza
głównego w ramach relacji muszą być unikalne i nie równe NULL
- integralność referencyjna - każda wartość klucza obcego może być równa wartości
klucza głównego występującej w tabeli powiązanej lub wartość NULL
- reguły postępowania w wypadku usuwania krotki z tabeli powiązanej:
- Restricted - usunięcie wiersza jest zabronione, dopóki nie zostaną usunięte lub
zmodyfikowane wiersze odnoszące się do klucza
- Cascades - usunięcie wiersza z tabeli (krotki z relacji) powoduje usunięcie
wszystkich wierszy odpowiadających z innych tabel
- Nullifies - nieważne są wartości klucza, zastępuje się wartością NULL
Relacje i ograniczenia
- atrybut musi mieć unikalną nazwę
- atrybut krotki nie może być wielowartościowy
- wartość atrybutu nie może być złożona
- wartością atrybutu nie może być wskaznik
- wartości kolumn są tego samego typu
- nie mogą istnieć dwie identyczne krotki
Operacje w algebrze relacji można podzielić na cztery szerokie kategorie
- zwyczajne działania algebry zbiorów: suma, przecięcie i różnica zastosowane do tabeli
- operacje zawężania tabeli: selekcja eliminuje pewne wiersze, a rzutowanie(projekcja)
niektóre kolumny
- operacje tworzenia wierszy z innych wierszy pochodzących z różnych tabel: iloczyn
kartezjański (tworzy wszystkie możliwe kombinacje par wierszy pochodzących z dwóch
różnych tabel), różne warianty operacji złączenia, która w sposób selektywny łączy w
pary wiersze z dwóch różnych tabel
- operacje przemianowania , które nie zmieniają wierszy tabeli, ale jej schemat, tzn.
nazwy atrybutów lub nazwę samej tabeli
Połączenia typu theta tabel R i S R|><|cS
Wynik takiego złączenia definiuje się następująco:
- utworzyć iloczyn kartezjański tabel R i S
- z iloczyn kartezjańskiego wybrać tylko te wiersze, dla których warunek C jest spełniony
- schemat utworzonej w ten sposób tabeli jest sumą schematów tabel R oraz S, przy czym
atrybut o takiej samej nazwie poprzedza się odpowiedznio R lub S, aby w ten sposób
oznaczyć skąd pochodzi tabela (?)
Złączenie naturalne
B C D
2 3
A B C
1 2 3
6 7 8
9 7 8
Złączenia zewnętrzne
- tworzone są podobnie jak złączenia naturalne, z tym że w relacji wynikowej
pozostawiamy wiersze jednej z tabel, które nie mają odpowiedników w drugiej
- złączenie lewostronne - uzupełnia się o wiersze z pierwszego argumentu nie posiadające
odpowiednika w drugim argumencie, brakujące atrybuty przyjmują wartość NULL
- złączenie prawostronne
- złączenie obustronne
Złączenia zewnętrzne - półzłączenia
- wykonaj operację złączenia dwóch relacji
- wykonaj rzutowanie wyniku na atrybuty pierwszego argumentu
Zalety:
- zmniejszenie liczby krotek, które muszą być przetworzone, by obliczyć złączenie
- szczeg (...)
Niektóre operacje można przedstawić za pomocą innych operacji algebry relacji
- przecięcie można przedtsawić jako złożenie różnic
- złączenie theta to kombinacja iloczynu kartezjańskiego i selekcji (...)
Wybrane elementy składnie i semantyki języka VBA
Typy danych - skalarne
- Boolean
- Integer
- Long
- Single
- Double
- Currency
- String
- Variant (dowolne liczby i napisy)
Obiektowe typy danych
- Application - aplikacja w Accesie
- Control - element dialogowy (formant)
- DoCmd - pojedynczy obiekt służący do wykonywania akcji makr
- Form - formularz
- Report - raport
- Module - moduł klasy lub standardowy
- Screen - pojedynczy obiekt reprezentujący ekran
- Section - sekcja w formularzu lub raporcie
Deklaracje zmiennych
Dim nazwa zmiennej As typ
- Static - zmienna lokalna w procedurze zachowuje wartość między kolejnymi wywołaniami
procedury
- Public - zmienna zadeklarowana w sekcji deklaracji modułu - jest dostępna w całej
aplikacji (najlepiej jest mieć jeden moduł z deklaracjami zmiennych globalnych aplikacji)
Przy braku deklaracji domyślnie przyjmowany jest typ Variant, który ma dwie specjalne
wartości
- pustą oznaczającą brak przyporządkowanej wartości zmiennej (sprawdzający predykat -
IsEmpty(W) )
- null oznaczającą brakującą lub nieznaną wartość pola w formularzach dopóki nie wstawi
się do nich wartości mają domyślnie wartość Null (sprawdzający predykat - IsNull(W) )
- obie wartości są różne od pustego napisu oraz zera
- zmiennym innych typów nie można przypisać wartości Null (jest to traktowane jako błąd)
- typ Variant może być w szczególności użyty dla dat
Składnia instrukcji
If warunek Then instrukcja [Else instrukcja]
(w jednym wierszu)
lub
If warunek Then
instrukcje
[Else
instrukcje]
End If
IIf (warunek, akcja dla prawdy, akcja dla fałszu)
można używać w polach obliczeniowych formularzy i raportów (w polu obliczeniowym
średnik)
Select Case wyrażenie
warunek
instrukcje
[Case lista wyrażeń
instrukcje ] ...
[Case Else
instrukcje]
End Select
With(...)
While(...)
Do {Until | While} warunek
instrukcje
Loop
Do
Instrukcje
Loop {Until | While} warunek
For licznik = start To koniec [Step przyrost]
Instrukcje
Next [licznik]
(licznik, start, koniec, przyrost są typu liczbowego)
Ze środka instrukcji iteracji można wyjść za pomocą Exit For lub Exit Do
Ze środka proceduwy można wyjść za pomocą Exit Function lub Exit Sub
Podstawowa składnia tworzenia obiektu zestawu rekordów.
Poniżesz instrukcje tworzą nowy obiekt Recordset i dołączają go do kolekcji Recordsets
Set zmienna = baza_danych.OpenRecordSet(zródło)
yródło jest istniejącym obiektem typu:
- TableDef
- QueryDef
- RecordSet
Zestawy rekordów
Rem Deklaracje zmiennych obiektowych
Dim MojaBd As Database
DIM MojeRekordy As RecordSet
Rem Wybranie w kodzie bieżącej bazy danych
Set MojaBd = CurrentDb
Rem Określenie zródła rekordów
Set MojeRekordy =
MojaBd.OpenRecordset( nazwa obiektu )
Moje Rekordy.MoveFirst
Do Until Moje Rekordy.EOF
If MojeRekordy!Ulica = Długa 24/2 Then
Moje Rekordy.Edit
Rem Tryb edytowania
MojeRekordy!Ulica = Warszawska 24
MojeRekordy.Update
Rem zapisanie zmian w bazie danych
End if
Moje Rekordy.MoveNext
Loop
MojeRekordy.Close
Do formularza o nazwie student można się odwołać:
Forms![student]
Forms( student )
(...)
Przykłady odwołań
Forms![student] - może oznaczać zbiór obiektów związanych z formularzem, czyli tzw.
kolekcję
Forms![student]![nazwisko] - oznacza obiekt będący polem tekstowym nazwisko (...)
Polecenie DoCmd
Rem Chodzenie po rekordach rormularza
DoCmd.GoToRecord , , acFirst
(w miejsce acFirst można użyć acPrevious, acNext, acLast, acNewRec)
Rem Otwieranie formularza, raportu
DoCmd.OpenForm DoCmd.OpenReport
np. DoCmd.OpenForm student ,,,,acAdd
DoCmd.Close
DoCmd.Close acForm, student
DoCmd.OpenQuery xxxx , acNormal, acEdit
lub
DoCmd.RunSQL SQL
DoCmd.ShowAllRecords
DoCmd.Quit
lub
Application.Quit
Funkcja DloopUp()
- wykorzystywana jest do pozyskiwania wartości z określonego pola w ustalonej domenie
- domena to zdefiniowany zestaw rekordów
- wykorzystywana jest w makrach, procedurach, a nawet w formancie do zwracania
danych, które są aktualnie poza aktywnym zródłem danych (do pozyskiwania danych z
innej tabeli lub kwerendy)
- składnia: DLoopUp (wyrażenie, domena [,kryterium])
- wyrażenie - identyfikuje pole zawierające wartość, którą chce się otrzymać, jeśli funkcja
DLoopUp() znajdzie odpowiednią wartość zwraca ją, jeśli znajdzie więcej niż jedną
możliwą wartość, zwraca pierwszą wartość, którą napotka, jeśli nie znajdzie niczego,
zwraca wartość NULL
- wartość możńa sprawdzić w następujący sposób: IsNull (DLoopUp(wyrażenie,
domena, kryterium)
- domena (drugi argument) - wyrażenie znakowe, które identyfikuje zestaw rekordów
- kryterium (opcjonalne) - ogranicza zakres rekordów (jeśli jest pominięte - wszystkie
rekordy określone w domenie
Przykład zastosowania
- utwórz pole tekstowe
- w arkuszu właściwości ustaw zródło formantu
=DLoopUp( [telefon] , klienci , [id_klienta]=' &Forms![zamówienia]!
[id_klienta]& ;)
- funkcja zwróci (...)
Procedura otwierająca formularz szczegóły produktu na podstawie wartości pola
ID_produktu, które jest częścią podformularza
Przycisk alfa znajduje się w formularzu zamówienia
Sub alfa_click()
Dim nazwa, produkt As string
nazwa= szczegóły produktu
produkt= [id_produktu]=Forms![zamówienia]![zamówieniaPodformularz].Form!
[id_produktu]
DoCmd.Openform nazwa,,,produkt
Forms![zamówienia].SetFocus
Forms![zamówienia]![zamówieniaPodformularz].SetFocus
End Sub
Instrukcja Inpiutbox i Msgbox
- Inputbox - prowadzanie danych z klawiatury
- Msgbox - wyprowadzanie danych
Przykład
Dim a As string
a= Inputbox( Czy na pewno TAK/NIE )
Msgbox(a)
wyliczenie wyrażenia filtru zanim zostanie przekazane do funkcji DLookup
Dim filtr As string
filtr= Idproduktu= (...)
SQL (Structured Query Language)
- SQL powstał w wyniku prac prowadzonych przez IBM w San Jose w Kaliforni w latach 70
- implementacja prototypowa relacyjnego SZBD - SEQUEL
- 1979 - ORACLE zastosował po raz pierwszy język SQL
- 1986 - język został uznany za standard relacyjnych baz danych - ANSI, ISO
- międzynarodowa wersja tego standardu opracowana przez ISO, pojawiła się w 1987
roku
- 1989 - opracowano następną wersję SQL89
- 1992 - powstał SQL92 - istniejący standard poddano kolejnemu unowocześnieniu, dzięki
czemu SL zyskał szereg nowych możliwości
- do pazdziernika 1996 producenci oprogramowania SZBD mogli przedstawiać swoje
produkty instytutowi NIST (Narodowy Instytut Standardow i Technologii) w celu
określenia ich zgodności ze standardem SQL
- SQL jest standardem w systemach zarządzania bazami danych:
- ORACLE
- INGRES
- INFORMIX
- SYBASE
- DB2
- ACCESS
- służy do komunikowania się z bazą danych, nie umożliwia napisania kompletnego
programu
- ma możliwości znacznie większe niż język zapytań, ponieważ pozwala tworzyć tabele,
wprowadzać dane itd.
- jest językiem deklaratywnym, nieproceduralnym, nie podaje komputerowi sposobu
(algotytmu) rozwiązania zadania, tylko określa co ma być wykonane
- oparty na trójwartościowej logice: wyrażenia logiczne jest prawdziwe TRUE, fałszywe
FALSE, lub nieokreślone UNKNOWN, jeżeli występował argument nieokreślony NULL
- interaktywny SQL - używany do wyszukiwania informacji z bazy danych i do
wprowadzania danych do bazy
- statyczny SQL - stały kod napisany przed wykonaniem programu
- zanurzony SQL - instrukcje SQLa wpisuje się w aplikację w trakcie tworzenia
- modułowy - moduły są łączone z modułami programów zródłowych
- dynamiczny SQL - generowany przy wykonaniu np. graficznych poleceń użytkownika
- język definiowania danych DDL (Data Definition Language) - służy do definiowania tabel,
schematów, kluczy, indeksów (stworzenie schematu implementacyjnego)
- język manipulowania danymi DML (Data Manipulation Language) - służy do opisywania,
edycji i usuwania danych
- język sterowania danymi DCL (Data Control Language) - kontroluje uprawnienia
użytkowników, steruje transakcjami
- język zapytań QL (Query Language) - daje możliwość pobierania z bazy danych
informacji zgodnych z podanymi warunkami
SQL - zaawansowane operacje
- operatory matematyczne
- operatory logiczne
- operatory specjalne
- funkcje agregujące
- eliminowanie duplikatów
- kopiowanie tablic
- tworzenie złączeń
- tworzenie podzapytań
- sortowanie
- grupowanie
Operator Opis Przykład
() Zmienia normalną kolejność wykonywania ... NOT (A=1 OR B=1)
działań
+,- Operatory jednoargumentowe zachowania
i zmiany znaku
*, / Mnożenie, dzielenie
() zmienia normalną kolejność wykonywania ... NOT (A=1 OR B=1)
działań
= sprawdza równość dwóch wyrażeń ... WHERE KWOTA =
100
!=, ^=, <> sprawdza różność
< mniejsze niż
> większe niż
<=
>=
IN równy dowolnemu elementowi WHERE ZAWOD IN
( ELEKTRYK,
LEKARZ)
NOT IN różny od każdego z elementów, wynikiem WHERE KWOTA NOT
jest FALSE jeśli dowolny element zbioru IN (SELECT...
jest równy NULL
Operator Opis Przykład
ANY porównuje wartość z każdą wartością po ... WHERE KWOTA =
prawej stronie zbioru, musi być ANY (SELECT
poprzedzony jednym z operatorów: =, !=, KWOTA FROM
<, >, <=, >=, zwraca TRUE jeśli PRACOWNIK WHERE
przynajmniej jeden z elementów spełnia INSTYTUT = 25)
podany warunek
ALL Porównuje wartość z każdą wartością po ... WHERE (KWOTA,
prawej stronie zbioru, musi być PREMIA) >= ALL
poprzedzony jednym z operatorów: =, !=, ((2000, 300), (3000,
<, >, <=, >=, zwraca TRUE jeśli każdy z 500)
elementów spełnia podany warunek
[NOT] BETWEEN [Nie] większy lub równy X i mniejszy lub ... WHERE A
X AND Y równy Y BETWEEN 2 ANY 10
[NOT] EXISTS TRUE jeśli zapytanie [nie] zwraza ... WHERE EXISTS
przynajmniej jeden wiersz (SELECT ...
[NOT] LIKE [nie] spełnia podany wzorzec, znak % ... WHERE STAN LIKE
zastępuje dowolny ciąg znaków (0 lub K%'
więcej) różny od NULL, znak _ zastępuje
pojedynczą literę
IS [NOT] NULL [Nie] jest równe NULL ... WHERE ZAWOD IS
NULL
NOT zaprzeczenie wyrażenia logicznego ... WHERE NOT
(KWOTA IS NULL)
AND iloczyn logiczny równy TRUE jeśli wartości
obu operandów są TRUE
OR
UNION unia dwóch zbiorów, łączy dwa zbiory - ... SELECT ... UNION
powtarzające się elementy występują tylko SELECT ...
raz
INTERSECT część wspólna łączonych zbiorów ... SELECT ...
INTERSECT
SELECT ...
MINUS różnica dwóch zbiorów
Funkcje dzielimy na sześć kategorii:
- agregujące (grupujące)
- daty i czasu
- arytmetyczne
- znakowe
- konwertujące
- pozostałe
Operator Opis Przykład
ABS(n) wartość bezwzględna
CEIL(n) najmniejsza liczba całkowita >=n CEIL(15.7) wynik 16
FLOOR(n) największa liczba całkowita <=n
MOD(m,n) zwraca reszte
POWER(m,n)
SIGN zwraca 0 gdy n=0 1 gdy n>0 -1 gdy n<0
SQRT(n) pierwiastek
TRUNC(m[,n]) zwraca m obcięte do n miejsc po przecinku
ROUND(n[,m] zwraca liczbę n zaokrągloną do m miejsc
po przecinku [m pominięte przyjmje się 0]
jeśli m<0 zakrąglenie przed przecinkiem
CHR(n) zwraca znak o podanym kodzie CHE(65) wynik A
ASCII(string) zwraca kod ASCII pierwszej litery podanego ASCII( A') wynik 65
ciągu
INITCAP(string) zwraca łańcuch znaków, w którym każde INITCAP ( PAN
słowo ma pierszą literę dużą, pozostałe są KOWALSKI JAN)
małe
LOWER(string)
UPPER(string)
LTRIM(string, Usuwa litery z tekstu od lewej strony do LTRIM( xxxXxxOstatni
[zbiór]) napotkania litery należącej do tekstu zbiór, e słowo','x') Wynik:
jeśli zbiór nie jest podany przyjmowany jest XxxOstatnie słowo
ciąg pusty
REPLACE(string zwraca string z zamienionym każdym REPLACE( Jan
, wystąpieniem tekstu search na string1 Jarek','J','Wa') Wynik:
search[,string1]) Waan Waarek
LPAD(string1,n[, zwraca łańcuch 2 uzupełniony lewostronnie LPAD( Ala ma', 15,
string2]) do długości n znakami z łańcucha 2, jeśli kota*') Wynik
łańcuch2 nie jest podany przyjmowana jest kota*kotaAla ma
spacja, gdy n< od dlugości łańcucha1
zwracane jest n pierwszych znaków
łańcucha1
Operator Opis Przykład
RPAD(string1,n[, zwraca łańcuch 2 uzupełniony
string2]) prawostronnie do długości n znakami z
łańcucha 2, jeśli łańcuch2 nie jest podany
przyjmowana jest spacja, gdy n< od
dlugości łańcucha1 zwracane jest n
pierwszych znaków łańcucha1
SUBSTR(string, zwraca podciąg z ciągu znaków string SUBSTR( Alasrtma',
m[,n]) zaczynający się od znaku m o długości n, 3,2) Wynik: as
jeśli n nie jest podane zwracane są znaki od
pozycji m do ostatniego w stringu
LENGTH(n) Zwraca długość podanego ciągu znaków
INSTR(string1, zwraca pozycję m tego wystąpienia string2 INSTR( ALAASTAA','A
string2[,m [,n]]) w string1, jeśli szukanie rozpoczęto od '
pozycji m, jeśli m lub n jest pominięte
przyjmowane są wartości 1
Funkcje operujące na datach
- MONTHS_BETWEEN(data1,data2) - zwraca liczbę miesięcy, jakie upłynęły między
datami
- ADD_MONTHS(data,n) - zwraca datę plus n miesięcy kalendarzowych
- NEXT_DAY(data, dzień)- zwraca następującą datę po podanej, przypadającą na podany
dzień
- LAST_DAY(data) - zwraca datę ostatniego dnia w miesiącu podanej daty
- ROUND(data1,MONTH') - data pierwszego dnia miesiąca zawierającego data1, jeśli
data1 jest datą z pierwszej połowy miesiąca, w przeciwnym razie jest to data pierwszego
dnia następnego miesiąca
- ROUND(data1,YEAR') - data pierwszego dnia roku zawierającego data1, jeśli data1 jest
datą z pierwszej połowy roku, w przeciwnym razie jest to data pierwsego dnia
następnego roku
- TRUNC(data1,znaki') - data pierwszego dnia roku zawierającego data1 jeśli znaki =
MONTH, lub pierwszego dnia roku jeśli znaki= YEAR
Format daty
- SS - sekundy
- MI - minuty
- HH24 - godziny (24h)
- HH
- AM PM
- DAY
- DD
- MONTH
- MM
- BC AD
- YYYY
- SCC - stulecie
Funkcje grupowe
AVG([DISTINCT|ALL] num) zwraca wartość średnią SELECT AVG(koszt) AS
ignorując wartości puste [ŚredniKoszt] From
wypożyczenia ;
COUNT(*) zwraca liczbę wierszy SELECT COUNT(*)
tabeli, włączając AS[Wszystko] FROM
powtarzające się równe Samochody
COUNT([DISTINCT|ALL] zwraca liczbę wierszy, w SELECT COUNT(ID_SAM)
expr) których expr nie jest równe AS [LiczbaSamochodow]
NULL FROM Samochody
MAX([DISTINCT|ALL] expr) zwraca max wartość SELECT MAX(koszt_dnia)
wyrażenia AS [NajdrozszySamochod]
FROM Samochody
MIN([DISTINCT|ALL] expr) zwraca minimalną wartość SELECT MIN(koszt_dnia)
wyrażenia AS [Najtańszy Samochod]
FROM samochody
SUM([DISTINCT|ALL] num) zwraca sumę wartości num SELECT SUM(koszt_dnia *
30) AS [WartośćCałkowita]
FROM samochody
VARIANCE ([DISTINCT| zwraca wariancję wartości SELECT VARIANCE
ALL] num) num ignorując wartości (zarobki) Wariancja
NULL FROM pracownicy
STDDEV([DISTINCT|ALL] zwraca odchylenie SELECT STDDEV(Zarobki)
num) standardowe warości num Odchylenie FROM
ignorując wartości NULL Pracownicy
DML - język modelowania danych
- SELECT - wydonywa dane z tabel
- UPDATE - uaktualnia dane w tabeli
- DELETE - kasuje dane z tabeli
- INSERT INTO - wprowadza dane do tabeli
DDL - język definicji danych
- CREATE TABLE - tworzy nową tabelę
- ALTER TABLE - zmienia istniejącą tabelę
- DROP TABLE - kasuje istniejącą tabelę
- CREATE INDEX - tworzy indeks
- DROP INDEX - usuwa indeks
Standard SQL dzieli tabele na trzy kategorie:
- trwałe tabele bazowe - zawartość jest przechowywana w bazie danych na stałe
- globalne tabele tymczasowe - do przechowywania w bazie tymczasowych danych, są
kasowane przy zamykaniu sesji SQL-a, należy je wypełnić danymi przed ich użyciem,
mogą być wykorzystywane tylko przez jednego użytkownika, ale są widoczne dla całej
sesji SQL-a
- lokalne tabele tymczasowe - widzi je tylko moduł programowy, w którym zostały one
utworzone
CREATE TABLE
- tworzenie tabel w bazie danych
CREATE TABLE
(
...
[PRIMARY KEY (attr-name [, attr-name] ... ) ],
[FOREIGN KEY (attr-name [, attr-name] ... ) ],
[REFERENCES ()] );
Typy danych
- INTEGER (INT) - liczba całkowita (dodatnia lub ujemna)
- SMALLINT -krótka liczba całkowita
- NUMERIC - stałoprzecinkowa liczba rzeczywista np NUMERIC (6,2) > XXXX,XX
- DECIMAL - stałoprzecinkowa liczba rzeczywista podobna do NUMERIC, ale w
przypadku DECIMAL SZBD może przchowywać więcej cyfr po przecinku niż wskażemy
- REAL - zmiennoprzecinkowa liczba rzeczywista pojedynczej precyzji
- DOUBLE PRECISION - zmiennoprzecinkowa liczba rzeczywista o podwójnej
dokładności
- FLOAT - liczba zmiennoprzecinkowa o wybieralnej precyzji, SZBD zachowa dokładność
wskazaną przez użytkownika, którą można zwiększyć
- BIT - wartość złożona z ustalonej ilości niezależnych bitów np. BIT(n)
- BIT VARYING - wartość złożona ze zmiennej ilości niezależnych bitów, ilość ta nie może
przekroczyć podanego maksimum
- DATE - data
- TIME - godzina
- TIMESTAMP - połączenie daty i godziny
- CHARACTER (CHAR) - łańcuch tekstowy o stałej długości
- CHARACTER VARYING (VARCHAR) - łańcuch tekstowy o zmiennej długości
- INTERVAL
Klucze główne
- aby zdefiniować w nowo utworzonej tabeli klucz podstawowy, dodajemy do wyrażenia
CREATE TABLE klauzulę PRIMARY KEY (nazwa kolumny)
- SZBD o zgodności z SQL92 wymagajż zadeklarowania wszystkich kolumn wchodzącyw
w skład klucza podstawowego jako NOT NULL
- standard SQL89 umożliwia wprowadzenie do tabel kluczy obcych i przerzucenie
odpowiedzialności za integralność referencyjną na SZBD
- aby wskazać w tworzonej tabeli klucz obcy, dodajemy do jej deklaracji klauzulę
FOREIGN KEY
FOREIGN KEY - nazwa klucza obcego (kolumny klucza obcego)
REFERENCES - tabela klucza podstawowego (kolumny klucza podstawowego)
ON UPDATE - czynność podejmowana przy modyfikacji
ON DELETE - czynność podejmowana przy usuwaniu
Podejmowanie czynności
- SET NULL - zastąp wskazaną wartość klucza obcego przez NULL, operacja ta nie jest
możliwa, jeśli klucz obcy wchodzi jednocześnie w skład klucza podstawowego swojej
tabeli
- SET DEFAULT - zastąp wskazaną wartość klucza obcego przez wartość domyślną
- CASCADE - skasuj lub zmodyfikuj wszystkie wiersze zawierające wskazaną wartość
klucza obcego
- NO ACTION (tylko modyfikacja) - nie wprowadzaj zmian do wartośći klucza obcego
- RESTRICT (tylko kasowanie) - nie dopuść do skasowania wiersza zawierającego
wskazaną wartość klucza podstawowego
Dodatkowe ograniczenia kolumn
- żądanie unikatowych wartości - jeśli chcemy, aby wszystkie wartości w kolumnie nie
wchodzącej w skład klucza podstawowego różniły się między sobą, należy dołączyć do
deklaracji kolumny słowo kluczowe UNIQUE
- klauzula UNIQUE może również zostać umieszczona na końcu wyrażenia CREATE
TABLE, obok deklaracji klucza podstawowego i kluczy obcych - UNIQUE (nazwa
kolumny)
- predykaty w klauzulach CHECK - jeśli chcemy wprowadzić nowe ograniczenia, w miejsce
konkretnej wartości
CREATE TABLE
CREATE TABLE SAMOCHODY (
ID_SAM NUMBER(4) CONSTRAINT ID_SAM PRIMARY KEY,
NR_REJ VARCHAR2(8) CONSTRAINT NR_REJ NOT NULL
MARKA VARCHAR2(12),
MODEL VARCHAR2(12),
ROK_PROD NUMBER(4)
KRAJ_PROD VARCHAR2(15),
POJ_SIL NUMBER(3,1),
KOSZT_DNIA NUMBER(4) CONSTRAINT KOSZT_DNIA
CHECK(KOSZT_DNIA>0)
);
CREATE TABLE WYPOZYCZENIA(
ID_WYP NUMBER(4) CONSTRAINT ID_WYP PRIMARY KEY
ID_SAM NUMBER(4) CONSTRAINT ID_SAM REFERENCES SAMOCHODY
(...)
Hierarchia obiektów bazodanowych w standardzie SQL92
======================Rysunek13 =====================
Warunki według których przeprowadza się szukanie
- porównanie - porównuje wartość jednego wyrażenia z wartością innego
- zakres - sprawdza czy wartość danego wyrażenia znajduje się w określonym przedziale
wartości
- przynależność - sprawdza, czy wartość wyrażenia jest taka sama jak jedna z wartości w
podanej grupie
- wzór - sprawdza, czy łańcuch znaków zgadza się z podanym wzorem
- pusty - sprawdza, czy kolumna ma pustą (niewiadomą) wartość
Polecenie SELECT umożliwia:
- wybieranie kolumn oraz wierszy
- łączenie tabel
- grupowanie danych
- przeprowadzanie na nich prostych obliczeń
DML - instrukcja SELECT
SELECT [DISTINCT|ALL] {*| [nazwa_kolumy [AS nowa_nazwa] ] [,...]}
FROM nazwa_tabeli [alias] [,...]
[WHERE warunek]
[GROUP BY lista_kolumn] [HAVING warunek]
[ORDER BY lista_kolumn]
Wyświetl nazwy marek i modeli samochodów oraz miesięczny koszt ich wypożyczenia (tej
kolumnie nadać nazwę miesięczny_koszt) (przykład projekcji, zawężania kolumn)
SELECT marka,model,koszt_dnia*30 AS miesięczny_koszt FROM samochody;
Wyświetl nazwiska, imiona i identyfikatory klientów sortując nazwiska w kolejności
alfabetycznej
SELECT NAZWISKO, IMIE, ID_KLI
FROM KLIENCI
ORDER BY NAZWISKO;
Wyświetl nazwę wszystkich marek i modeli samochodów bez powtórzeń
SELECT DISTINCT MARKA,MODEL
FROM SAMOCHODY
ORDER BY MARKA;
Wyświetl wszystkie informacje z tabeli WYPOŻYCZENIA w kolejności od najbardziej do
najmniej kosztownego
SELECT *
FROM WYPOŻYCZENIA
ORDER BY KOSZT DESC;
Wyświetl wszystkie informacje na temat samochodów wyprodukowanych w Niemczech od
2005 roku
SELECT *
FROM SAMOCHODY
WHERE KRAJ_PROD=NIEMCY'
AND ROK_PROD>2004
Wyświetl numery rejestracyjne oraz identyfikatory wszystkich samochodów
zarejestrowanych na terenie Krakowa (rejestracje zaczynające się na KR)
SELECT NR_REJ,ID_SAM
FROM SAMOCHODY
WHERE NR_REJ LIKE 'KR%';
Wyświetl imiona i nazwiska klientów tak, aby zaczynały się z wielkiej litery, nazwy kolumn
mają pozostać niezmieniona
SELECT INITCAP(IMIE) AS IMIE ,INITCAP(NAZWISKO) AS NAZWISKO
FROM KLIENCI;
Wyświetl minimalny, średni oraz maksymalny koszt dnia dla wszystkich samochodów
SELECT MIN(koszt_dnia) AS KOSZT_MINIMALNY , AVG(koszt_dnia) AS
KOSZT_SREDNI (...)
Wyświetl markę oraz średnią pojemność silnika dla danej marki z tabeli SAMOCHODY
SELECT marka, AVG(poj_sil)
FROM samochody
GROUP BY marka
ORDER BY marka;
Wyświetl marki wszystkich samochodów, jeżeli dany samochód jest marki Opel, zamiast
tego słowa, powinno zostać wypisane General Motors
SELECT REPLACE(marka,Opel',General Motors') AS (...)
Wyświetl koszty wypożyczenia oraz nazwiska klientów
SELECT SUM(KOSZT) AS KOSZT , NAZWISKO
FROM WYPOZYCZENIA, KLIENCI
WHERE KLIENCI.ID_KLI = WYPOZYCZENIA.ID_KLI
GROUP BY NAZWISKO
Wyświetl nazwiska oraz liczbę wypożyczonych samochodów przez poszczególnych
klietnów, nagłówek kolumy z liczbą wypożyczeń powinien być liczba_wyp, posortuj wynik
pod względem wypożyczeń w kolejności malejącej
SELECT NAZWISKO,
COUNT(WYPOZYCZENIA.ID_KLI) AS LICZBA_WYP
FROM KLIENCI, WYPOZYCZENIA
WHERE KLIENCI.ID_KLI=WYPOZYCZENIA.ID_KLI
GROUP BY NAZWISKO
ORDER BY LICZBA_WYP DESC;
Wyświetl wszystkie dane na temat samochodu o największej pojemności silnika spośród
samochodów wyprodukowanych w Japonii
SELECT *
FROM SAMOCHODY
WHERE KRAJ_PROD=JAPONIA' AND POJ_SIL=[SELECT MAX(POJ_SIL) FROM
SAMOCHODY WHERE KRAJ_PROD=JAPONIA'];
Wyświetl wszystkie dane na temat klienta, który wypożyczył samochód na najdłuższy
okres czasu oraz termin, na jaki samochód zostal wypożyczony
SELECT KL.*, W.DATA_ZWR - W.DATA_WYP
FROM KLIENCI KL, SAMOCHODY S, WYPOZYCZENIA W
WHERE W.ID_KLI = KL.ID_KLI AND W.ID_SAM = S.ID_SAM AND (W.DATA_ZWR -
W.DATA_WYP) = (SELECT MAX(DATA_ZWR - DATA_WYP) FROM WYPOZYCZENIA);
Zapytanie zawierające unię
Aby umieścić operator UNION w zapytaniu SQL musisz utworzyć dwa oddzielne
wyrażenia SELECT
SELECT KOLUMNA
FROM TABELA
WHERE PREDYKAT
UNION
SELECT KOLUMNA
FROM TABELA
WHERE PREDYKAT
Projekcja wykonywana w języku SQL za pomocą instrukcji SELECT z operatorem
EXISTS.
Warunek zawierający operator EXISTS zwraca wartość true jeśli rezultat podzapytania nie
jest pusty, w przeciwnym wypadku warunek zwraca wartość false
Przykład:
Podać wykaz klientów, kla których są wypożyczenia złożone po 01/03/2008
SELECT ID_KLI, NAZWISKO, IMIE
FROM KLIENCI
WHERE EXISTS (SELECT * FROM WYPOZYCZENIA WHERE WYPOZYCZENIA.ID_KLI
= KLIENCI.ID_KLI AND DATA_WYP > '01-03-08');
Projekcja wykonywana w jęyku SQL za pomocą instrukcji SELECT
SELECT ID_KLI, NAZWISKO, IMIE
FROM KLIENCI JOIN WYPOZYCZENIA
GROUP BY NAZWISKO, IMIE
ORDER BY NAZWISKO, IMIE;
HAVING
SELECT KOSZT, COUNT (*)
FROM WYPOZYCZENIA
WHERE KOSZT>500
GROUP BY KOSZT;
SELECT KSOZT, COUNT(*)
FROM WYPOZYCZENIA
GROUP BY KOSZT
HAVING KOSZT >500;
SELECT KOSZT, COUNT (*)
FROM WYPOZYCZENIA JOIN KLIENCI
WHERE NAZWISKO=IKSINSKI'
GROUP BY KOSZT
HAVING KOSZT>500;
Modyfikowanie danych
INSERT
INTO [(ATTR1 [,ATTR2] ...)]
VALUES (ATTR1-VALUE [,ATTR2-VALUE] ...);
INSERT INTO SAMOCHODY VALUES
(100,KRA-023',OPEL',ASTRA',1995',NIEMCY',1.4,45);)
Drugim zastosowaniem polecenia INSERT jest kopiowanie dowolnej liczby wierszy
z jednej tabeli do drugiej
Wiersze, które mają być skopiowane wskazuje się za pomocą wyrażenia SELECT
INSERT INTO NAZWA TABELI
SELECT PEANA POSTAĆ
Kolumny zwracane przez SELECT muszą odpowiadać tym, z których składa się tabela
docelowa, co do ilości i typu danych
Uaktualnianie danych
UPDATE NAZWA TABELI
SET KOLUMNA1 = NOWA WARTOSC, KOLUMNA2 = NOWA WARTOSC, ...
WHERE KRYTERIA WYBORU WIERSZY
Podnieś PENSJE wszystkich pracowników o 10%
UPDATE STANOWISKA SET PENSJA=PENSJA+(PENSJA*0.1)
Podnieś PREMIE wszystkich pracowników na stanowisku KIEROWNIK o 100
UPDATE PRACOWNICY
SET PREMIA=PREMIA+100
WHERE ID_STAN=(SELECT ID_STAN FROM STANOWISKA WHERE
NAZWA=KIEROWNIK');
Modyfikowanie elementów bazy danych
- za wyjątkiem tabel większość elementów bazy danych nie poddaje się podyfikacjom
- cechy tabel można łatwo zmienić za pomocą polecenia ALTER TABLE
Dopisywanie nowych kolumn
ALTER TABLE NAZWA TABELI
ADD NAZWA KOLUMNY TYP DANYCH, OGRANICZENIA KOLUMNY,
ADD NAZWA KOLUMNY TYP DANYCH, OGRANICZENIA KOLUMNY, ...
Usuwanie z tabeli
DELETE FROM NAZWA TABELI
WHERE KRYTERIA
Do tabeli Pracownicy dodaj następujące kolumny:
- PREMIA NUMBER(5)
- URLOP NUMBER(2)
ALTER TABLE PRACOWNICY
ADD (...)
Zmodyfikuj kolumny tabel STANOWISKA i PRACOWNICY:
NAZWA - nie pusta
PENSJA - większa od zera
PREMIA - pomiędzy 0 a 1500
ALTER TABLE STANOWISKA MODIFY (NAZWA NOT NULL, CONSTRAINT
CH_PENSJA PENSJA CHECK (PENSJA>0))
ALTER TABLE PRACOWNICY MODIFY (CONSTRAINT CH_PREMIA PREMIA CHECK
(PREMIA>0) CHECK (PREMIA<1500))
Ustawić dla tabel PRACOWNICY i STANOWISKA odpowiednie komentarze:
- dane na temat pracowników wypożyczalni samochodów
- dane na temat stanowisk pracowników
COMMENT ON TABLE PRACOWNICY IS DANE NA TEMAT PRACOWNIKOW
WYPOZYCZALNI SAMOCHODOW'
COMMENT ON TABLE STANOWISKA IS DANE NA TEMAT STANOWISK
PRACOWNIKOW'
Wyświetlic komentarze dotyczące tabel PRACOWNICY i STANOWISKA
SELECT TABLE_NAME AS TABELA,
COMMENTS AS KOMENTARZ
FROM USER_TAB_COMMENTS
WHERE TABLE_NAME=PRACOWNICY'
OR TABLE_NAME=STANOWISKA'
Wyświetl nazwy oraz typ wszystkich ograniczeń nałożonych na tabelę PRACOWNICY
SELECT CONSTRAINT_NAME,
CONSTRAINT_TYPE FROM
USER CONSTRAINTS WHERE
TABLE_NAME (...)
Dla tabeli STANOWISKA ustaw komentarze dla następujących kolumn:
NAZWA: NAZWA STANOWISKA
PENSJA: PENSJA PODSTAWOWA
COMMENT ON COLUMN STANOWISKA.PENSJA
IS 'PENSJA PODSTAWOWA'
Wyświetl wszystkie komentarze nałożone na kolumny w tabeli STANOWISKA
SELECT COLUMN_NAME AS KOLUMNA ,
COMMENTS AS KOMENTARZ FROM USER_COL_COMMENTS
WHERE TABLE_NAME=STANOWISKA';
Zmiana nazwy tabeli
ALTER TABLE KLIENCI
RENAME NOWA_NAZWA
Zmiana nazwy kolumny
ALTER TABLE KLIENCI
RENAME NAZWA_STARA TO NAZWA_NOWA
Kasowanie elementów bazy danych
- operacja skasowania tabeli jest nieodwracalna
- większość SZBD żąda potwierdzenia przed usunięciem tabeli i wszystkich danych w niej
zawartych
Polecenie DROP umożliwia kasowanie następujących elementów bazy danych:
DROP TABLE NAZWA_TABELI - tabel
DROP VIEW NAZWA_PERSPEKTYWY - perspektyw
DROP INDEX NAZWA_INDEKSU - indeksów
DROP DOMAIN NAZWA_DOMENY - domen
Nie można skasować tabeli lub perspektywy używanej w danej chwili przez innego
użytkownika
Usuń z tabeli PRACOWNICY kolumnę TELEFON:
ALTER TABLE PRACOWNICY DROP COLUMN TELEFON
Perspektywa
Perspektywa jest tabelą wirtualną wygenerowaną przez zapytanie SQL'owe
Perspektywy
- umożliwiają zapisanie często wykonywanych złożonych zapytań w strukturze bazy;
SELECT * FROM NAZWA_PERSPEKTYWY
- pomagają w dostosowaniu środowiska bazodanowego do indywidualnych potrzeb
użytkowników lub ich grup
- umożliwiają zapewnienie bezpieczeństwa danych
Zdefiniuj perspektywę TANIE_SAMOCHODY zawierającą wszystkie atrybuty relacji
SAMOCHODY. Perspektywa ma zawierać informacje tylko na temat samochodów, których
KOSZT_DNIA < 60
CREATE VIEW TANIE_SAMOCHODY AS SELECT * FROM SAMOCHODY WHERE
KOSZT_DNIA < 60
Utwórz perspektywę OKRESY_WYPOŻYCZEC, na podstawie ID_SAM, MARKA, MODEL
z tabeli SAMOCHODY oraz sumy okresów, na jakie wypożyczono poszczególne
samochody z tabeli WYPOŻYCZENIA
CREATE VIEW OKRESY_WYPOZYCZEN AS
SELECT DISTINCT SAMOCHODY.ID_SAM, SAMOCHODY.MARKA (...)
Standard SQL - warunki na perspektywy modyfikowalne:
- perspektywa musi być utworzona w oparciu o pojedynczą tabelę
- perspektywy zawierające np. złączenia nie są modyfikowalne
- perspektywa musi opierać się na pojedynczym zapytaniu, perspektywy zawierające np.
unie nie są modyfikowalne
- jeśli perspektywa bazuje na innej perspektywie, wówczas ta inna perspektywa również
musi być modyfikowalna
- klauzula SELECT może zawierać wyłącznie nazwy kolumn tabeli zródłowej, nie można
do niej dopisywać kolumn wyliczonych ani funkcji agregujących
- perspektywa nie może być oparta na zapytaniu grupującym
- zapytanie, na którym opiera się perspektywa nie może zawierać słowa kluczowego
DISTINCT
- zapytanie, na którym opiera się perspektywa może zawierać podzapytanie, jeśli bazuje
ono na tej samej tabeli co zapytanie zewnętrzne
Tabele tymczasowe - nie są trwale zapisane w bazie i istnieją tylko na czas sesji, w
której zostały utworzone
- perspektywa istnieje tylko na potrzeby jednego zapytania, przy każdym wywołaniu,
system zarządzania dokonuje rekonstrukcji jej zawartości
- tabela tymczasowa istnieje przez cały czas trwania sesji, w której została utworzona
- do perspektywy zostają automatycznie wprowadzone dane zwrócone przez zapytanie,
na którym perspektywa ta bazuje
- do tabeli tymczasowej należy wprowadzić dane za pomocą INSERT
- tylko perspektywy modyfikowalne umożliwiają zmianę swojej zawartości
- wszystkie tabele tymczasowe można dowolnie modyfikować
- dane zawarte w perspektywach są zawsze aktualne, ponieważ SZBD każdorazowo
wczytuje je z tabel bazowych
- dane zawarte w tabeli tymczasowej odzwierciedlają stan z chwili, w której zostały do niej
wprowadzone
Tabele tymczasowe
CREATE GLOBAL TEMPORARY TABLE
TO_CO_W_CREATE_TABLE
CREATE LOCAL TEMPORARY TABLE
TO_CO_W_CREATE_TABLE
Indeksy - za i przeciw
- indeksy zajmują miejsce w bazie danych - dyski są duże i tanie, więc nie jest to zacząca
wada
- kiedy wprowadzamy, modyfikujemy lub usuwamy dane z indeksowanej kolumny, SZBD
musi uaktualnić indeks - spowolnienie przeprowadzanej operacji, zwłaszcza gdy tabela
bazowa ma dużo wierszy
- indeksy zdecydowanie przyspieszają dostęp do danych
CREATE INDEX NAZWA_INDEKSU
ON NAZWA_TABELI (kolumny klucza indeksu)
CREATE UNIQUE INDEX NAZWA_INDEKSU
ON NAZWA_TABELI (kolumny klucza indeksu)
CREATE INDEX NAZWA_INDEKSU
ON NAZWA_TABELI (kolumny klucza indeksu DESC)
Przyznawanie i odbieranie praw dostępu
SELECT - umożliwia odczytywanie danych z tabel lub perspektyw
INSERT - umożliwia dopisywanie nowych wierszy do tabel lub modyfikowalnej
perspektywy
UPDATE - umożliwia modyfikowanie wierszy w tabeli lub modyfikowalnej perspektywie
DELETE - umożliwia kasowanie wierszy z tabeli lub modyfikowalnej perspektywy
REFERENCES - umożiwia tworzenie odwołań do danej tabeli w postaci kluczy obcych
ALL PRIVILEGES - przyznaje użytkownikowi wszystkie wymienione prawa
- prawa dostępu do tabel i perspektyw są przechowywane w słowniku danych
- struktura słownika zależy od SZBD - dwie tabele systemowe
- systableperm
- syscolperm
Tabela Systableperm
- table_id - identyfikator tabeli lub perspektywy
- grantee - identyfikator użytkownika, któremu przyznano prawa dostępu
- grantor - identyfikator użtwkotnika, który przyznał prawa dostępu
- selectauth - prawo SELECT
- insertauth - prawo INSERT
- deleteauth - prawo DELETE
- updateauth - prawo UPDATE
- updatecols -
- referenceauth -
Przyznawanie i odbieranie praw dostępu
GRANT PRAWA_DOSTPU
ON NAZWA_TABELI lub PERSPEKTYWY TO ID_UZYTKOWNIKA1, ..., ...
- można przyznać prawa wszystkim, korzystając z identyfikatora PUBLIC
GRANT PRAWA_DOSTPU
ON NAZWA_TABELI lub PERSPEKTYWY TO PUBLIC
- do odbierania praw służy polecenie REVOKE
REVOKE PRAWA_DOSTEPU
FROM NAZWA_TABELI lub PERSPEKTYWY FROM ID_UZYTKOWNIKA
==============rysunek 14===========================
Trzypoziomowa architektura bazy danych zgodna z ANSI/SPARC
- fizyczna baza danych - przechowuje surowe dane istniejące na fizycznym obiekcie, takim
jak dysk twardy
- dane na tym poziomie nie mają żadnego logicznego znaczenia - jednak mają one bardzo
określoną strukturą fizyczną, co umożliwia sprawny dostęp, innymi słowy, dane są czymś
więcej niż tylko łańcuchem bitów
- istnieje wiele różnych struktur, w których dane mogą być przechowywane, np. tabele,
drzewa, listy łączone, zagnieżdżone rekordy, itd.
- na poziomie fizycznym dane są postrzegane jako strukturalna kolekcja bitów
- celem tej struktury jest umożliwienie wydajnego dostępu do danych
- pojęciowy model danych - konceptualne przedstawienie bazy danych jako całości
- dane otrzymują strukturę logiczną - na przykład w systemie relacyjnych baz
danych dane są postrzegane jako kolekcja tabel z nagłówkami kolumn
opisującymi atrybuty
- tabele są ze sobą związane dzięki pewnym kolumnom
- model pojęciowy jest pomyślany jako obraz danych takich, jakimi są naprawdę, a nie jak
widzi je użytkownik, użytkownik widzi dane przez ograniczenia narzucone mu np przez
stosowany język, czy sprzęt
- pojęciowy model danych definiuje się za pomocą schematu pojęciowego - tworzony jest
za pomocą kolejnego języka definicji danych pojęciowego DDL
- w terminologii ANSI/SPARC obraz widziany przez indywidualnego użytkownika nazywa
się zewnętrznym modelem danych
- zawartość bazy danych widziana przez konkretnego użytkownika
- cała informacja jest reprezentowana w formie rekordów
- niektóre systemy dopuszczają również inny sposób reprezentacji
===============rysunek 15================
===============rysunek 16================
Trzypoziomowa architektura bazy danych zgodna z ANSI/SPARC
- model koncepcyjny jest modelem świata rzeczywistego, który wyrażony jest za pomocą
wymagań dotyczących danych
- model logiczny jest modelem świata rzeczywistego, który wyrażony jest za pomocą reguł
pewnego modelu danych
- model fizyczny jest modelem świata rzeczywistego, który wyrażony jest za pomocą
plików i struktur danych, a także metod dostępu do danych
Funkcjonalność SZBD - jako struktura czteropoziomowa
Poziom interfejsu
- model danych i język zapytań
- interfejs języka zewnętrznego
- inne interfejsy
Poziom języka przetwarzania
- zarządzanie perspektywami
- sterowanie integralnością semantyczną
- autoryzacja
- kompilator języka
- interpreter języka
- dekompozycja zapytania
- optymalizacja zapytania
- generowanie planu dostępu
Poziom przetwarzania transakcji
- wykonanie planu dostępu
- generowanie transakcji
- kontrola współbieżności
- zarządzanie buforem
- odtwarzanie
Poziom zarządzania pamięcią pomocniczą
- zarządzanie fizyczną strukturą danych
- dostęp do dysku
====================================================================
===============BRAK JEDNEGO WYKAADU
=========================================================
Normalizacja
- proces identyfikowania logicznych związków między elementami danych
- proces projektowania baz danych, który będzie identyfikować takie związki - bez anomalii
Anomalia baz danych nienormalizowanych:
- anomalia dołączania
- anomalia aktualizacji
- anomalia usuwania
W celu wykonania normalizacji danych potrzebujemy:
- zrozumienia zależności funkcyjnej - w przypadku baz danych często jesteśmy
zainteresowani zależnościami funkcyjnymi pomiędzy kolumnami
- zdrowego rozsądku
- zrozumienia znaczenia danych - nazywamy to definicją wymagań
- zrozumienia oczekiwań zleceniodawcy w stosunku do bazy danych
- znajomości procesu normalizacji
Proces normalizacji można traktować jako proces, podczas którego schematy
relacji posiadające niepożądane cechy są dekomponowane na mniejsze schematy o
pożądanych własnościach
- dekompozycja - podział atrybutów tabeli R między dwa schematy nowych tabel
- reguła dekompozycji obejmuje również podział wierszy tabeli R między nowe tabele
- tabelę R o schemacie {A1, A2, ..., An} dekomponujemy na dwie tabele: S - {B1, B2, ...,
Bm} oraz T - {C1, C2, ..., Ck} wg zasad:
- {A1, A2, ..., An} = {B1, B2, ..., Bm} {C1, C2, ..., Ck}
- wiersze relacji S i T powstają przez projekcję wszystkich wierszy relacji R na zbiór
atrybutów odpowiednio {B1, B2, ..., Bm} i {C1, C2, ..., Ck}
Normalizacja
- celem normalizacji jest minimalizacją fizycznego rozmiaru bazy danych oraz uniknięcie
anomalii związanych z wstawianiem, aktualizacją i usuwaniem wierszy
- proces normalizacji musi posiadać trzy własności:
- żaden atrybut nie może zostać zagubiony w trakcie procesu normalizacji
- dekompozycja tabeli nie może prowadzić do utraty informacji
- wszystkie zależności funkcyjne muszą być reprezentowane w pojedynczych
schematach tabel
Pierwsza postać normalna 1PN
- tabela jest w pierwszej postaci normalnej, jeśli każda wartość atrybutu w każdym wierszu
tej tabeli jest wartością elementarną, czyli nierozkładalną (atomową)
- 1NF zabrania definiowania złożonych atrybutów, które są wielowartościowe
- tabele, które dopuszczają definiowanie złożonych atrybutów to tabele zagnieżdżone
(koncepcja ta nie mieści się w ramach klasycznego relacyjnego modelu)
Definicja zależności funkcyjnej
Atrybut B tabeli R jest funkcyjnie zależny od atrybutu A tej tabeli, jeżeli zawsze każdej
wartości a atrybutu A odpowiada nie więcej niż jedna wartość b atrybutu B
Definicja pełnej zależności funkcyjnej
Atrybut A jest w pełni zależny funkcjonalnie od zbioru atrybutów X, gdy jest zależny
funkcjonalnie od całego zbioru, a nie od podzbioru atrybutów z X
Druga postać normalna 2PN
Tabela R jest w drugiej postaci normalnej, jeśli jest w pierwszej postaci normalnej i każdy
atrybut tej tabeli nie wchodzący w skład klucza jest w pełni funkcyjnie zależny od
wszystkich kluczy potencjalnych tej tabeli (jest w pełni zależny od klucza).
Trzecia postać normalna 3PN
Tabela R o danym schemacie jest w trzeciej postaci normalnej, jeżeli jest w drugiej postaci
normalnej i żaden atrybut nie wchodzący w skład klucza potencjalnego tej tabeli nie jest
przechodznio zależny od żadnego klucza potencjalnego tej tabeli. Każdy atrybut musi być
w pełni zależny od klucza głównego i niezależny od pozostałych atrybutów.
Normalizacja
- relacja jest w 1PN jeśli każdy jej atrybut ma wartości atomowe i każdy atrybut
niekluczowy jest funkcyjnie zależny od klucza głównego
- relacja jest w 2 PN jeśli jest w 1 PN i każdy atrybut niekluczowy jest w pełni funkcyjnie
zależny od klucza głównego
- relacja jest w 3 PN jeśli jest w 2 PN i każdy atrybut niekluczowy jest bezpośrednio (a nie
pośrednio) zależny od klucza głównego
Postać normalna BCNF (Boyce-Codd normal form)
Tabela ma postać BCNF, gdy każdy atrybut tabeli zależy funkcjonalnie tylko od klucza
podstawowego.
Postacią normalną, która rzeczywiście usuwa wszystkie zależności przechodnie jest
postać BCNF.
Czwarta postać normalna 4PN
Dana tabela jest w czwartej postaci normalnej wtedy i tylko wtedy, gdy jest w trzeciej
postaci normalnej i wielowartościowa zależność podzbioru Y od X pociąga za sobą
funkcjonalną zależność wszystkich atrybutów tej tabeli od X.
Piąta postać normalna 5PN
Tabela jest w piątej postaci normalnej gdy jest w czwartej postaci normalnej i gdy
zależność połączeniowa ( w przypadku jej występowania) wynika z zależności od klucza.
Wyszukiwarka
Podobne podstrony:
22 Bazy danych – wykład wstępnyid)482
bazy danych wyklad3
bazy danych wyklad1
BAZY DANYCH Streszczenie z wykładów
Wykład 11 Recovery – Transakcyjne odtwarzanie bazy danych po awarii
Bazy Danych (SQL) wykład ROBERT CHWASTEK
Strona polecenia do bazy danych
2004 11 Porównanie serwerów relacyjnych baz danych Open Source [Bazy Danych]
MySQL Mechanizmy wewnętrzne bazy danych
więcej podobnych podstron