Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
BD-LAB4 Wojciech Pieprzyca
BAZY DANYCH BD-LAB4 Wojciech Pieprzyca
2
Język SQL-DDL Język DDL (Data Definition Language) jest podzbiorem
grupy języków określanych wspólnie jako SQL (Structured Query Language). DDL służy do definiowania danych, a dokładniej do określania struktur i powiązań z jakich ma składać się baza danych. Z pomocą języka DDL można tworzyć tabele wraz z określeniem kluczy głównych i obcych, relacje pomiędzy tabelami, a także dodawać dodatkowe ograniczenia na wprowadzane dane. Użycie DDL pozwala także na zmianę już istniejących struktur.
3
SZBD Oracle Podstawowym celem tego laboratorium jest stworzenie
struktury bazodanowej opartej na projekcie (modelu fizycznym) wcześniej omawianego systemu rezerwacji miejsc hotelowych. Jako system zarządzania bazą danych wykorzystywać będziemy Oracle 10g umieszczony na szkolnym serwerze. Zarządzanie bazą danych możliwe jest poprzez stronę www Każdy ze studentów posiada tam swoje konto o pojemności 5 MB, w ramach którego może umieszczać swoje tabele. Login: inazwisko (np. jkowalski) Hasło początkowe: wsiz
4
SZBD Oracle Po zalogowaniu się dobrym pomysłem jest zmiana
hasła początkowego. W celu zmiany hasła należy wybrać opcję Administration i Change My Password, a następnie wpisać swoje stare hasło (Old Password) i dwukrotnie nowe hasło (New Password, Confirm Password).
5
Typy danych (I) Typy danych występujące w SZBD Oracle:
CHAR(n) – typ tekstowy o stałej długości n znaków VARCHAR(n) – typ tekstowy o zmiennej maksymalnej długości n znaków INTEGER – typ całkowitoliczbowy NUMERIC(p,s) –typ liczbowy przechowujący wartości rzeczywiste o określonej precyzji (p) i skali (s). Precyzja oznacza ilość przechowywanych cyfr liczby, a skala ilość przechowywanych cyfr po przecinku. Przykładowo NUMERIC(6,2) przechowuje liczbę o długości 6 cyfr, w tym 2 cyfry na część ułamkową. FLOAT – typ rzeczywisty o pojedynczej precyzji DOUBLE – typ rzeczywisty o podwójnej precyzji BLOB – dane binarne CLOB – dane tekstowe o dużym rozmiarze
6
Typy danych (II) Typy danych występujące w SZBD Oracle: DATE – data
TIME – czas TIMESTAMP – data+czas INTERVAL specyfikacja – reprezentuje określony przedział czasu (np.2 lata i 4 miesiące) Specyfikacja typu INTERVAL ma postać: INTERVAL najdłuższy_okres TO najkrótszy_okres W Oracle istnieją dwie specyfikacje: INTERVAL YEAR TO MONTH – przechowuje lata i miesiące INTERVAL DAY TO SECOND – przechowuje dni, godziny, minuty i sekundy
7
Tworzenie tabel (III) Tabele można utworzyć za pomocą polecenia
CREATE TABLE. Składnia: CREATE TABLE nazwatabeli (nazwapola1 typpola1, nazwapola2 typpola2, …, nazwapolaN typpolaN) Dodatkowo każda tabela powinna mieć określony klucz główny za pomocą frazy PRIMARY KEY. Przykład: CREATE TABLE osoby (id_osoby INTEGER PRIMARY KEY, nazwisko VARCHAR(40), imie VARCHAR(30), data_ur DATE, liczbadzieci INTEGER, plec CHAR(1))
8
Tworzenie tabel (IV) Niektóre pola są wymagane i nie mogą być puste.
Wówczas przy definicji pola należy dodać frazę NOT NULL. Możliwe jest także ustalenie wartości domyślnej, która będzie przypisywana do pola jeżeli użytkownik nie wprowadzi do tego pola swojej wartości (fraza DEFAULT wartość). Poniższy przykład określa, że pola imie i nazwisko nie mogą być puste, a pole liczbadzieci domyślnie ustalana jest na 0): CREATE TABLE osoby (id_osoby INTEGER PRIMARY KEY, nazwisko VARCHAR(40) NOT NULL, imie VARCHAR(30) NOT NULL, data_ur DATE, liczbadzieci INTEGER DEFAULT 0, plec CHAR(1))
9
Tworzenie tabel (V) Dla każdego z pól tabeli można także wprowadzić
warunki ograniczające domenę (zbiór wartości) akceptowaną przez SZBD przy wpisywaniu danych do określonego pola. Ograniczenia domeny dokonuje się poprzez dodanie frazy CHECK(warunek). W przykładzie podanym poniżej dla pola plec akceptowane są jedynie wartości m i k (warunek CHECK (plec IN ('m','k')) ), a dla pola liczbadzieci wartości większe lub równe 0 (warunek CHECK (liczbadzieci >= 0) ). CREATE TABLE osoby (id_osoby INTEGER PRIMARY KEY, nazwisko VARCHAR(40) NOT NULL, imie VARCHAR(30) NOT NULL, data_ur DATE, liczbadzieci INTEGER DEFAULT 0, plec CHAR(1), CHECK (plec IN ('m','k')), CHECK (liczbadzieci > 0) )
10
Tworzenie relacji (I) Relacja odzwierciedla związek zachodzący pomiędzy dwiema tabelami. W SZBD relacje zaznacza się poprzez zdefiniowanie w tabeli podrzędnej klucza obcego i użycie frazy REFERENCES nazwa_tabeli_nadrzędnej(pole_klucza_głównego). W przykładzie tworzona jest tabela zamówienia, która jest tabelą podrzędną wobec tabel klienci i towary. Relacja z tabelą klienci realizowana jest poprzez dodanie klucza obcego id_klienta, a z tabelą towary poprzez dodanie klucza obcego id_towaru: CREATE TABLE zamowienia (id_zamowienia INTEGER PRIMARY KEY, id_klienta INTEGER REFERENCES klienci(id_klienta), id_towaru INTEGER REFERENCES towary(id_towaru) )
11
Tworzenie relacji (II)
Tworzenie relacji pomiędzy tabelami rodzi pewne konsekwencje, a czasami także pewne wątpliwości. Szczególnie widoczne jest to przy usuwaniu danych z tabel nadrzędnych. Na przykład, pojawia się pytanie czy usunięcie klienta powinno spowodować usunięcie wszystkich jego zamówień czy też zamówienia powinny nadal być przechowywane, ale już bez informacji o tym kto był klientem zamawiającym ? Aby zautomatyzować odpowiedź na takie i podobne pytania stosuje się frazę ON DELETE. Istnieją dwie możliwości: 1) ON DELETE CASCADE – usunięcie rekordu z tabeli nadrzędnej powoduje automatyczne usunięcie wszystkich rekordów ze związanej tabeli podrzędnej Np.usunięcie klienta powoduje usunięcie jego zamówień
12
Tworzenie relacji (III)
2) ON DELETE SET NULL – usunięcie rekordu z tabeli nadrzędnej powoduje wstawienie w tabeli podrzędnej w polu klucza obcego wartości NULL. W przypadku relacji klienci-zamowienia, po usunięciu klienta, w tabeli zamówienia w polu id_klienta wstawiona zostanie wartość NULL. W przykładzie zarówno po usunięciu klienta lub towaru zamówienia dotyczące danego klienta lub towaru są automatycznie usuwane. CREATE TABLE zamowienia (id_zamowienia INTEGER PRIMARY KEY, id_klienta INTEGER REFERENCES klienci(id_klienta) ON DELETE CASCADE, id_towaru INTEGER REFERENCES towary(id_towaru) ON DELETE CASCADE)
13
Modyfikowanie tabel (I)
Dodanie pola do tabeli ALTER TABLE nazwatabeli ADD nazwapola typ Opcjonalnie można dodać CHECK (warunek) Przykład: ALTER TABLE pracownicy ADD telefon VARCHAR(20) CHECK (length(telefon)>6) Zmiana typu pola ALTER TABLE nazwatabeli MODIFY nazwapola typ ALTER TABLE pracownicy MODIFY imie VARCHAR(40)
14
Modyfikowanie tabel (II)
Usunięcie pola z tabeli ALTER TABLE nazwatabeli DROP COLUMN nazwapola Przykład: ALTER TABLE pracownicy DROP COLUMN telefon Zmiana nazwy tabeli RENAME stara_nazwatabeli TO nowa_nazwatabeli RENAME osoby TO pracownicy Usunięcie tabeli DROP TABLE nazwatabeli DROP TABLE pracownicy
15
Sekwencje Sekwencja przechowuje wartość liczbową, która może
być inkrementowana (zwiększana) o określoną liczbę po wywołaniu jej funkcji o nazwie NEXTVAL. Sekwencja jest często wykorzystywana do tworzenia pól typu identyfikacyjnego (klucze główne). Dla takiego pola zwykle początkowa wartość sekwencji ustalana jest na 1 i inkrementowana (zwiększana o 1) każdorazowo przy tworzeniu nowego rekordu. Tak powstała wartość sekwencji zapisywana jest w polu id nowego rekordu. Składnia: CREATE SEQUENCE nazwasekwencji START WITH n INCREMENT BY m Przykład: CREATE SEQUENCE seq_pracownicy START WITH 1 INCREMENT BY 1
16
Wstawianie rekordów do tabeli (I)
Wprowadzanie danych umożliwia polecenie INSERT. Składnia: INSERT INTO nazwatabeli (lista_pól) VALUES (wartości_pól) Przykład: INSERT INTO osoby (id_osoby, imie, nazwisko, liczbadzieci, plec) VALUES (seq_osoby.nextval, ’Jan’,’Kowalski’,3,’m’) Przy tworzeniu tabeli osoby zaznaczyliśmy, że pole liczbadzieci domyślnie ma wartość 0. Wprowadzając więc nowy rekord bez tego pola domyślnie i automatycznie wprowadzona zostanie tam wartość 0. INSERT INTO osoby (id_osoby, imie, nazwisko, plec) VALUES (seq_osoby.nextval, ’Robert’,’Kowalski’, ’m’)
17
Wstawianie rekordów do tabeli (II)
Nieco trudniejsze może być wstawianie informacji do pól typu INTERVAL. 1) Specyfikacja INTERVAL YEAR TO MONTH INTERVAL ’lata-miesiące’ YEAR TO MONTH Przykład: INSERT INTO czasy (czas_lata) VALUES (INTERVAL ’2-4 YEAR TO MONTH) 2) Specyfikacja INTERVAL DAY TO SECOND INTERVAL ’dni godziny:minuty:sekundy’ DAY TO SECOND INSERT INTO czasy (czas_dni) VALUES (INTERVAL ’3 12:15:00’ DAY TO SECOND
18
Instrukcje SQL w SZBD Oracle (I)
Aby wykonać dowolne polecenie języka SQL należy na stronie serwera Oracle, wybrać opcję SQL a następnie SQL Commands. Spowoduje to otwarcie strony na której można wpisywać i uruchamiać (Run) polecenia SQL.
19
Instrukcje SQL w SZBD Oracle (II)
Równocześnie w drugim oknie przeglądarki można uruchomić przeglądarkę tworzonych obiektów (opcja Object Browser). Pozwala to na bieżącą obserwację wprowadzanych zmian w bazie.
20
Zadania (I) 1) Stworzyć tabelę osoby z następującymi polami:
id_osoby - liczba całkowita - klucz główny nazwisko - typ tekstowy zmienny max.40 znaków – nie puste imie - typ tekstowy zmienny max. 40 znaków – pensja - typ numeric sumarycznie 6 cyfr, 2 po przecinku, dla pola pensja sprawdzać czy wprowadzona wartość > 0 (użyć frazy check) rola - typ tekstowy zmienny max.20 znaków - domyślną wartość 'programista' (użyć frazy default), dopuszczalne tylko wartości 'kierownik', 'analityk', 'programista‘ (użyć frazy check). data_urodzenia - data
21
Zadania (II) 2) Stworzyć tabelę czasy z dwoma polami:
czas_lata - interwał przechowujący lata i miesiące czas_dni - interwał przechowujący dni, godziny, minuty i sekundy 3) Stworzyć tabelę test z jednym polem id - liczba całkowita - klucz główny 4) Dodać do tabeli osoby pole życiorys mogące przechowywać duża ilość danych tekstowych 5) Zmienić typ danych pola pensja na float 6) Usunąć z tabeli osoby pole data_urodzenia 7) Zmienić nazwę tabeli osoby na osoby2 8) Usunąć tabelę test
22
Zadania (III) Zgodnie z modelem fizycznym i logicznym (uwzględnić
pola wymagane <m>) projektu systemu rezerwacji miejsc hotelowych: 1) Stworzyć tabelę typy. 2) Stworzyć tabelę pokoje. - uwzględnić potrzebę utworzenia klucza obcego i powiązania z tabelą Typy. Po usunięciu danego typu wszystkie pokoje tego typu powinny być usuwane (odpowiednia fraza ON DELETE). - dla pól cena i maxrabat sprawdzać czy podano wartość > 0 (fraza CHECK).
23
Zadania (IV) 3) Stworzyć tabelę klienci.
4) Stworzyć tabelę pracownicy. dla pola uprawnienia jako domyślną wartość przyjąć 3 (fraza DEFAULT). dla pola uprawnienia jako jedynie dopuszczalne przyjąć wartości 1,2,3 (fraza CHECK). 5) Stworzyć tabelę Rezerwacje. - uwzględnić potrzebę utworzenia trzech kluczy obcych i powiązań z tabelami Pokoje, Klienci, Pracownicy. Po usunięciu pokoju, klienta lub pracownika dane z tabeli dotyczące rezerwacji z nim związanej automatycznie powinny być usuwane.
24
Zadania (V) sprawdzać czy data_wyjazdu jest późniejsza od
daty_przyjazdu uwaga! w Oracle nie ma typu boolean (tak/nie), trzeba go zastępować np. typem char(3) z dopuszczalnymi wartościami 'tak','nie' - dla pola zapłacone jako domyślną wartość przyjąć nie, dopuszczalne wartości tak/nie (fraza check) - dla pola faktura jako domyślną wartość przyjąć tak, dopuszczalne wartości tak/nie (fraza check) - dla pola sniadanie jako domyślną wartość przyjąć tak, dopuszczalne wartości tak/nie (fraza check) 6) Stworzyć tabelę menu. - dla pola cena sprawdzać czy podano wartość > 0.
25
Zadania (VI) sprawdzać czy data_wyjazdu jest późniejsza od
daty_przyjazdu uwaga! w Oracle nie ma typu boolean (tak/nie), trzeba go zastępować np. typem char(3) z dopuszczalnymi wartościami 'tak','nie' - dla pola zapłacone jako domyślną wartość przyjąć nie, dopuszczalne wartości tak/nie (fraza check) - dla pola faktura jako domyślną wartość przyjąć tak, dopuszczalne wartości tak/nie (fraza check) - dla pola sniadanie jako domyślną wartość przyjąć tak, dopuszczalne wartości tak/nie (fraza check) 6) Stworzyć tabelę menu. - dla pola cena sprawdzać czy podano wartość > 0.
26
Zadania (VII) 7) Stworzyć tabelę ZamowieniaMenu.
uwzględnić potrzebę utworzenia klucza obcego z dwóch pól. Trzeba to zrobić nie wskazując istnienia klucza głównego przy każdym polu, ale wprowadzając na końcu polecenia frazę primary key (id_menu, id_rezerwacji) uwzględnić potrzebę utworzenia dwóch kluczy obcych i powiązań z tabelami Menu i Rezerwacje. Po usunięciu rezerwacji powiązany rekord powinien być usuwany z tabeli ZamowieniaMenu.Po usunięciu pozycji z menu powinna być w polu id_menu ustalana wartość null. 8) Utworzyć sekwencja dla 6 tabel projektu (oprocz ZamowieniaMenu). Start:1, inkrementacja:1 Nazwy w postaci: seq_nazwatabeli np. seq_typy
27
Zadania (VIII) 9) Wstawić do tabeli czasy następujące dane
a) dla specyfikacji YEAR TO MONTH 0 lat 10 miesięcy 1 rok 2 miesiące 2 lata 4 miesiące b) dla specyfikacji DAY TO SECOND 1 dzień 0 godzin 0 minut 0 sekund 0 dni 1 godzina 0 minut 0 sekund 2 dni 2 godziny 1 minuta 22 sekundu 30 dni 21 godzin 34 minuty 54 sekundy 10) Dla każdej z tabeli projektu wstawić jeden przykładowy rekord z użyciem polecenia INSERT INTO wykorzystując sekwencje i funkcję NEXTVAL.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.