Bazy danych: zadania cwiczebne na tempo i dykcj˛e

Transkrypt

Bazy danych: zadania cwiczebne na tempo i dykcj˛e
Bazy danych: zadania ćwiczebne na tempo i dykcj˛e
1
SQL
1. Baza danych zawiera tabele:
• Firma(nazwa, adres, telefon) : kluczem jest nazwa,
• Komputer(model, producent, typ, model, cena) : kluczem jest model,
zaś producent kluczem zewn˛etrznym do Firma.
Należy zapisać w SQL nast˛epujace
˛ zapytania:
(a) Podaj nazwy i adresy firm, które sprzedaja˛ co najmniej dwa modele komputerów tego samego
typu.
(b) Podaj nazw˛e i telefon firmy która produkuje najtańszy komputer.
(c) Podaj typy komputerów, produkowane przez wszystkich (znanych) producentów.
2. W tym zadaniu korzystać b˛edziemy z bazy danych o nast˛epujacym
˛
schemacie:
CREATE TABLE Ksiazki (
nrk NUMERIC(5) PRIMARY KEY,
tytul VARCHAR(20) NOT NULL,
autor VARCHAR(25),
wydawca VARCHAR(20),
rok_wyd NUMERIC(4),
data_zakupu DATE,
cena NUMERIC(6,2));
CREATE TABLE Czytelnicy (
nrcz NUMERIC(4) PRIMARY KEY,
nazwisko VARCHAR(20) NOT NULL,
imie VARCHAR(15) NOT NULL,
zawod VARCHAR(15));
CREATE TABLE Wypozyczenia (
nrk NUMERIC(5) NOT NULL REFERENCES Ksiazki,
nrcz NUMERIC(4) NOT NULL REFERENCES Czytelnicy,
data_wyp DATE NOT NULL,
data_zwr DATE,
PRIMARY KEY(nrk, nrcz, data_wyp));
Zrealizuj w SQL odpowiedzi na nast˛epujace
˛ pytania (Uwaga: jeśli pytamy o najwi˛ekszy (najdroższy itp.) obiekt, a jest kilka obiektów najwi˛ekszych, to należy podać wszystkie):
1
(a) Która obecnie wypożyczona ksia˛żka jest najdłużej trzymana i przez kogo (może być kilka
takich ksia˛żek — należy podać wszystkie)?
(b) Jaki jest procent przebywania poszczególnych ksia˛żek poza biblioteka?
˛
(c) Podaj numery katalogowe i tytuły pi˛eciu (lub wi˛ecej, jeśli jest “remis”) ksia˛żek o najwi˛ekszej
liczbie wypożyczeń.
(d) Kto czytał najdroższa˛ ksia˛żk˛e wydana˛ przed 1989 rokiem (może być kilka takich ksia˛żek —
podaj dla wszystkich)?
(e) Którzy czytelnicy wypożyczyli w tym roku najwi˛ecej ksia˛żek?
3. W bazie danych znajduja˛ si˛e tabele:
CREATE TABLE Osoby (
id NUMERIC(5) PRIMARY KEY,
nazwisko VARCHAR(20) NOT NULL,
imie VARCHAR(15) NOT NULL,
miasto VARCHAR(20));
CREATE TABLE Agenci (
id NUMERIC(4) PRIMARY KEY,
imie VARCHAR(15) NOT NULL,
nazwisko VARCHAR(20) NOT NULL);
CREATE TABLE Ubezpieczenia (
polisa NUMERIC(5) PRIMARY KEY,
data_od DATE NOT NULL,
data_do DATE NOT NULL CHECK (data_do > data_od),
wariant VARCHAR(1) NOT NULL,
skladka NUMERIC(4) NOT NULL,
ag_id NUMERIC(4) NOT NULL FOREIGN KEY REFERENCES(Agenci),
os_id NUMERIC(5) NOT NULL FOREIGN KEY REFERENCES(Osoby));
CREATE TABLE Skladki (
ub_polisa NUMERIC(5) FOREIGN KEY REFERENCES (Ubezpieczenia),
miesiac DATE,
termin_platnosci DATE NOT NULL,
data_oplacenia DATE,
PRIMARY KEY (ub_polisa, miesiac));
Zapisz w SQL nast˛epujace
˛ polecenia:
• Jaka jest maksymalna liczba ubezpieczeń jednej osoby?
• Wypisz nazwy miast wraz z liczba˛ ubezpieczonych osób w każdym mieście.
• Wypisz łaczn
˛ a˛ prowizj˛e wszystkich agentów od osób ubezpieczonych w Warszawie. Przyjmij,
że od każdej zapłaconej składki każdy agent dostaje 0.8% prowizji.
• Sprawdź, czy nie naliczono składek za okres nieobj˛ety umowa˛ ubezpieczenia.
• Który agent zawarł umow˛e ubezpieczenia o najdłuższym okresie?
• Który agent nie zawarł żadnego ubezpieczenia?
2
• Z jakiego miasta pochodzi najwi˛ecej ubezpieczonych?
• Czy wśród numerów agentów zawierajacych
˛
umowy ubezpieczenia wyst˛epuje numer niezarejestrowany w tabeli AGENCI?
• Czy wszystkie osoby zarejestrowane w tabeli OSOBY sa˛ obecnie obj˛ete ochrona˛ w wariancie ’B’?
• Którzy spośród agentów stracili klienta (nast˛epne ubezpieczenie z ta˛ sama˛ osoba˛ zawarł inny
agent)?
• W którym roku zawarto najwi˛ecej ubezpieczeń?
• Czy sa˛ osoby, które były jednocześnie obj˛ete dwoma różnymi ubezpieczeniami w tym samym
wariancie?
• Wypisz numery polis i czas ich trwania w dniach, miesiacach
˛
i latach.
• Ile jest ubezpieczeń?
• Jaka jest najwi˛eksza składka ubezpieczeniowa?
• Kiedy była ostatnia wpłata?
4. Baza danych sklepu sportowego zawiera tabele:
CREATE TABLE Producenci (
nazwa VARCHAR(30) PRIMARY KEY,
adres VARCHAR(50) NOT NULL,
telefon VARCHAR(15)
);
CREATE TABLE Narty (
model VARCHAR(15) PRIMARY KEY,
producent VARCHAR(30) NOT NULL REFERENCES Producenci,
typ VARCHAR(15),
przeznaczenie VARCHAR(20),
cena INTEGER NOT NULL
);
Należy zapisać w SQL nast˛epujace
˛ zapytania:
(a) Podaj nazwy i adresy producentów, wytwarzajacych
˛
co najmniej dwa różne typy nart o tym
samym przeznaczeniu.
(b) Podaj nazw˛e i telefon producenta wytwarzajacego
˛
najdroższe narty.
(c) Podaj te typy nart, które sa˛ wytwarzane przez wszystkich producentów.
5. W alpinistycznej bazie danych znajduja˛ si˛e tabele:
CREATE TABLE Szczyt (
nazwa VARCHAR(15) PRIMARY KEY,
gory VARCHAR(10) CHECK (gory IN (’Himalaje’, ’Tatry’, ’Alpy’, ’Andy’)),
szerokosc_geo CHAR(4) NOT NULL,
dlugosc_geo CHAR(4) NOT NULL,
wysokosc NUMERIC(4) NOT NULL);
3
CREATE TABLE Droga (
nazwa VARCHAR(20) PRIMARY KEY,
szczyt VARCHAR(15) REFERENCES Szczyt,
trudnosc NUMERIC(2));
CREATE TABLE Zdobywca (
nazwisko VARCHAR(20),
droga VARCHAR(15) REFERENCES DROGA,
data DATE NOT NULL,
PRIMARY KEY (nazwisko, droga));
Zakładamy, że długość i szerokość geograficzna sa˛ podane z dokładnościa˛ do pi˛eciu stopni w
postaci ’35N’ lub ’22W’, gdzie litera wskazuje półkul˛e.
Zakładamy także, że dla każdego szczytu istnieje w bazie co najmniej jedna droga.
Zapisz w SQL nast˛epujace
˛ polecenia:
(a) Wypisz wszystkie szczyty wraz z najtrudniejszymi drogami i ich pierwszymi zdobywcami,
o ile istnieja.˛
(b) Wypisz szerokość geograficzna,˛ wyst˛epujac
˛ a˛ przy najwi˛ekszej liczbie ośmiotysi˛eczników.
(c) Sprawdź, czy istnieja˛ i podaj niezdobyte drogi.
(d) Wypisz zdobywców, którzy zdobyli najwi˛ecej szczytów w Tatrach.
6. Baza danych zawiera tabele
• Gatunki(gatunek, kontynent) — kluczem jest gatunek (zakłada si˛e, że każdy
gatunek pochodzi z dokładnie jednego kontynentu);
• Zwierzaki(imie, gatunek, waga) — kluczem jest imie.
Zrealizuj w postaci zapytania SQL nast˛epujace
˛ polecenia:
(a) Dla każdego gatunku podaj wag˛e najci˛eższego zwierzaka.
(b) Podaj kontynenty, z których mamy co najmniej 7 zwierzaków.
(c) Dla każdego kontynentu podaj gatunki, w których wyst˛epuja˛ zwierzaki ważace
˛ wi˛ecej, niż
średnia waga zwierzaków z tego kontynentu.
7. Baza danych zawiera tabele:
• Gatunki(nazwa, kontynent, chroniony, lubi): kluczem jest nazwa,
• Zwierzaki(imi˛
e, gatunek, płeć, wiek, waga, wybieg): kluczem jest imi˛
e,
zaś gatunek kluczem zewn˛etrznym do Gatunki.
Należy zapisać w SQL nast˛epujace
˛ zapytania:
(a) Dla każdego gatunku podaj najmłodsze zwierzaki (ich imiona).
(b) Ile mamy zwierzaków z tego samego kontynentu co niedźwiedź Kropka?
(c) Dla każdego kontynentu podaj trzy najci˛eższe zwierzaki z tego kontynentu (jego wag˛e, imi˛e
i gatunek).
(d) Dla każdego kontynentu podaj cztery najlżejsze zwierzaki z tego kontynentu (jego wag˛e,
imi˛e i gatunek).
4
(e) Podaj średnia˛ liczb˛e zwierzaków dla gatunków chronionych.
(f) Podaj średnia˛ liczb˛e zwierzaków z kontynentu.
8. Baza danych o sprz˛ecie komputerowym zawiera nast˛epujace
˛ tabele
• Produkt(producent, model)
• PC(model, szybkość, ram, hd, cd, cena)
• Laptop(model, szybkość, ram, hd, ekran, cena)
• Drukarka(model, kolor, typ, cena)
gdzie ram podaje rozmiar pami˛eci w MB, hd pojemność dysku w GB, cd szybkość czytnika
CD-ROM, zaś ekran rozmiar ekranu.
Zrealizuj w SQL nast˛epujace
˛ zapytania:
(a) Podaj te rozmiary twardego dysku, które wyst˛epuja˛ co najmniej w dwóch pecetach.
(b) Kto produkuje komputer (pecet lub laptop) o najwi˛ekszej dost˛epnej szybkości?
9. Spedycyjna kolejowa baza danych zawiera tabele:
• Pociag(nazwa,
˛
stacja, kierownik) : kluczem jest nazwa,
• Wagon(numer, pociag,
˛
typ, producent, ładowność) : kluczem jest numer,
zaś pociag
˛ kluczem zewn˛etrznym do Pociag.
˛
Należy zapisać w SQL nast˛epujace
˛ zapytania:
(a) Podaj nazwy pociagów,
˛
które zawieraja˛ co najmniej dwa różne typy wagonów od tego
samego producenta.
(b) Podaj kierownika pociagu
˛ zawierajacego
˛
wagon o najwi˛ekszej ładowności.
(c) Podaj te typy wagonów, które znajduja˛ si˛e we wszystkich pociagach.
˛
10. Tabela Spółki (definicja poniżej) zawiera w każdym wierszu w kolumnie Wkład kwot˛e wpłacona˛ przez podanego udziałowca na fundusz podanej spółki.
CREATE TABLE Spolki (
Udzialowiec VARCHAR(35),
Spolka VARCHAR(20),
Wklad NUMERIC(8) NOT NULL CHECK (Wklad > 0),
PRIMARY KEY (Udzialowiec, Spolka));
Kapitałem spółki nazywamy sum˛e wkładów wszystkich jej udziałowców. Na zebraniu wszystkich udziałowców dowolnej spółki każdy udziałowiec ma procent głosów równy stukrotnemu
ilorazowi swojego wkładu i kapitału tej spółki.
(a) Utwórz perspektyw˛e Udziały zawierajac
˛ a˛ oprócz wszystkich kolumn tabeli Spółki jeszcze
nast˛epujace
˛ kolumny: ProcentGłosów (danego udziałowca w danej spółce) oraz SpółkaZależna,
w której wyst˛epuje ’TAK’ gdy ProcentGłosów jest wi˛ekszy od 50, zaś ’NIE’ w przeciwnym przypadku.
(b) Utwórz perspektyw˛e Kapitały z kolumnami Spółka, SumaWkładów podajac
˛ a˛ wartości
sum wkładów (kapitały) poszczególnych spółek.
5
Portfelem inwestora (udziałowca) nazywamy sum˛e jego wkładów we wszystkich spółkach.
(a) Utwórz perspektyw˛e Inwestycje zawierajac
˛ a˛ oprócz wszystkich kolumn tabeli Spółki
jeszcze nast˛epujace
˛ kolumny: ProcentWPortfelu (danego wkładu w całym portfelu
udziałowca) oraz SpółkaUlubiona, w której wyst˛epuje ’TAK’ gdy ProcentWPortfelu
jest wi˛ekszy od 50, zaś ’NIE’ w przeciwnym przypadku.
(b) Utwórz perspektyw˛e Portfele z kolumnami Udziałowiec, SumaWkładów podajac
˛ a˛ wartości sum wkładów (portfele) poszczególnych inwestorów.
2
Normalizacja
(a) Dana jest tabela o schemacie
R(A, B, C, D, E, F )
z nast˛epujacymi
˛
zależnościami:
BC → D, BCD → E, BE → F
i. Podaj wszystkie klucze tej tabeli.
ii. Sprowadź t˛e tabel˛e do trzeciej postaci normalnej (3NF).
(b) Dana jest tabela Katalog o schemacie
Katalog(numer, nazwa, typ, klasa, upust, cena)
z nast˛epujacymi
˛
zależnościami:
nazwa typ → klasa
nazwa klasa → upust
typ upust → cena
i. Podaj wszystkie klucze tej tabeli.
ii. Sprowadź t˛e tabel˛e do trzeciej postaci normalnej (3NF).
(c) Dany jest schemat relacji R = {A, B, C, D, E} z nast˛epujacym
˛
zbiorem zależności funkcyjnych:
BC → D
BCD → E
E→D
Podaj wszystkie klucze i sprowadź ten schemat do trzeciej postaci normalnej.
(d) Dana jest tabela o schemacie
R(A, B, C, D, E, F )
z nast˛epujacymi
˛
zależnościami:
A → B, B → C, E → F, F → E, EC → D
i. Podaj wszystkie klucze tej tabeli.
ii. Sprowadź t˛e tabel˛e do trzeciej postaci normalnej (3NF).
(e) Dany jest schemat relacji R(A,B,C,D,E) z nast˛epujacym
˛
zbiorem zależności funkcyjnych:
6
AB → C
C→D
D→B
D→E
Podaj wszystkie klucze i sprowadź ten schemat do trzeciej postaci normalnej.
(f) Dana jest tabela o schemacie
R(A, B, C, D, E, F )
z nast˛epujacymi
˛
zależnościami:
A → B, AB → C, E → F, F D → E
i. Podaj wszystkie klucze tej tabeli.
ii. Sprowadź t˛e tabel˛e do trzeciej postaci normalnej (3NF).
(g) Rozważmy tabel˛e o schemacie R(A, B, C, D, E, F ) z nast˛epujacymi
˛
zależnościami: AB →
C, AD → E oraz CE → F .
i. Podaj wszystkie klucze tej relacji.
ii. Sprowadź t˛e tabel˛e do trzeciej postaci normalnej (3NF).
(h) Rozważmy tabel˛e o schemacie R(A, B, C, D, E) z nast˛epujacymi
˛
zależnościami:
AB → C
C→D
C→E
D→A
E → B.
i. Podaj wszystkie klucze tej relacji.
ii. Sprowadź t˛e tabel˛e do trzeciej postaci normalnej (3NF).
(i) Rozważmy tabel˛e o schemacie R(A, B, C, D, E, F ) z nast˛epujacymi
˛
zależnościami: AB →
CE, C → D, CD → E.
i. Podaj wszystkie klucze tej relacji.
ii. Sprowadź t˛e tabel˛e do trzeciej postaci normalnej (3NF).
(j) Dany jest schemat relacji R(A, B, C, D, E) z nast˛epujacym
˛
zbiorem zależności funkcyjnych:
AB → C
DE → C
B→D
Podaj wszystkie klucze i sprowadź ten schemat do trzeciej postaci normalnej.
(k) Dana jest tabela o schemacie
R(A, B, C, D, E, F )
z nast˛epujacymi
˛
zależnościami:
BC → D, BD → E, CE → F
i. Podaj wszystkie klucze tej tabeli.
ii. Sprowadź t˛e tabel˛e do trzeciej postaci normalnej (3NF).
7
(l) Dana jest tabela R z atrybutami A,B,C,D,E i zależnościami funkcyjnymi
A →
C →
B
D
BD
→
E
E
→
C
Odpowiedz na nast˛epujace
˛ pytania.
i. Ile kluczy ma tabela R? Podaj je.
ii. Które z podanych zależności naruszaja˛ postać normalna˛ Boyce’a-Codda (BCNF)?
iii. Które z podanych zależności naruszaja˛ trzecia˛ postać normalna˛ (3NF)?
(m) Dana jest tabela R z atrybutami A,B,C,D,E,F i zależnościami funkcyjnymi
A
→ B
B
E
→ C
→ F
F
→ E
i. Podaj wszystkie klucze tej tabeli.
ii. Czy któreś z podanych zależności naruszaja˛ trzecia˛ postać normalna˛ (3NF)? Jeśli tak,
to dokonaj dekompozycji na trzecia˛ postać normalna.˛
(n) W bazie danych znajduja˛ si˛e tabele Sklepy
Sklep
Bobas
...
Miasto
Kraków
...
Towar-1
Smoczek
...
Towar-2
Pieluszka
...
Towar-3
null
...
Towar-4
null
...
oraz Towary
Towar
Smoczek
...
Cena
1
...
Dostawca
Superpol
...
Adres
Warszawa
...
Należy ja˛ przekształcić do 3 postaci normalnej (podajac
˛ skrypt SQL) uwzgl˛edniajac
˛ podane
poniżej zależności funkcyjne:
Sklep → Miasto
Towar → Cena Dostawca
Dostawca → Adres
Nast˛epnie należy napisać zapytanie podajace
˛ w ilu sklepach sprzedawane sa˛ towary dostawców
z Krakowa.
8
3
ERD
(a) Na podstawie podanego diagramu ERD napisac polecenia SQL tworzace
˛ odpowiednia˛ baz˛e
danych.
Osoba
# id
* imi˛e
* nazwisko
o PESEL
o data urodzenia
o dowód
o płeć
ubezpieczony
ubezpieczajacy
˛
Polisa
dla # numer
* typ
* data zawarcia
* poczatek
˛ ochrony
* koniec ochrony
* suma
zawarta przez
Wiadomo, że:
•
•
•
•
Dla każdej osoby musi być znany numer PESEL lub numer dowodu.
Istnieja˛ trzy typu ubezpieczeń: wyjazdowe, życiowe, komunikacyjne.
W ubezpieczeniu komunikacyjnym może być ubezpieczona tylko jedna osoba.
Minimalny okres ochrony to 3 tygodnie.
Uwaga:
• Pami˛etaj o wi˛ezach integralności — im b˛edzie ich wi˛ecej i sensowniejsze tym lepiej.
• Zastosuj swoja˛ wiedz˛e i doświadczenie w zakresie ubezpieczeń (lub zdrowy rozsadek.
˛
• Typy kolumn dobierz według własnego uznania (własne uznanie też punktujemy.
(b) Rozważmy baz˛e danych warsztatu samochodowego, zawierajac
˛ a˛ informacje o wykonywanych
naprawach. Warsztat naprawia samochody klientom (klient może posiadać kilka samochodów). Każda naprawa wymaga użycia pewnych cz˛eści, opisanych w cenniku. W skład
kosztu naprawy wchodzi też robocizna.
Niektóre naprawy sa˛ skutkiem reklamacji dotyczacej
˛ poprzednio wykonanej naprawy, wi˛ec
sa wykonywane bezpłatnie.
Zaproponuj baz˛e danych dla takiej firmy (w postaci diagramu zwiazków-encji)
˛
i podaj polecenia SQL tworzace
˛ taka˛ baz˛e. Pami˛etaj o warunkach integralności — im wi˛ecej i sensownych
ich b˛edzie tym lepiej.
(c) Kolejowa baza danych ma zawierać informacje pociagach
˛
i stacjach. Pociagi
˛ bywaja˛ osobowe albo pośpieszne, każdy z nich ma unikalny numer (lub jak kto woli nazw˛e), kierownika i tras˛e.
Trasa pociagu
˛ to lista stacji, na których pociag
˛ zatrzymuje si˛e. Dla każdej stacji podany jest
czas odjazdu/przyjazdu.
Stacje dziela˛ si˛e na lokalne i w˛ezłowe. Pociagi
˛ powinny rozpoczynać i kończyć bieg na
stacjach w˛ezłowych. Pociagi
˛ pośpieszne zatrzymuja˛ si˛e wyłacznie
˛
na stacjach w˛ezłowych,
lokalne na każdej stacji.
Polecenia:
• Wykonaj model danych w postaci diagramu zwiazków-encji
˛
oraz dodatkowych założeń,
których nie da si˛e wyrazić diagramem.
• Według stworzonego modelu zaimplementuj baz˛e danych w SQL, podajac
˛ ciag
˛ poleceń
tworzacych
˛
ja.˛
9
Uwagi:
• Zakładamy na poczatek,
˛
że nie sa˛ dost˛epne informacje “geograficzne” o położeniu
stacji. Potem można dołożyć informacje o bezpośrednim sasiedztwie
˛
i weryfikować
trasy.
• Pami˛etaj o kontroli poprawności.
• Brakujac
˛ a˛ informacj˛e (np. typy kolumn) uzupełnij zgodnie ze zdrowym rozsadkiem
˛
(zdrowy rozsadek
˛
też punktujemy ;-).
(d) W Urz˛edzie Pracy jest potrzebna baza danych dotyczaca
˛ dost˛epnych miejsc pracy oraz
bezrobotnych.
Dane opisujace
˛ miejsca pracy powinny obejmować dane pracodawcy, stanowisko i liczb˛e
wolnych etatów oraz wymagane kwalifikacje (czyli wykształcenie).
Dane bezrobotnego powinny obejmować personalia, wykształcenie oraz dotychczas zajmowane stanowiska.
Jeden pracodawca może oferować wiele stanowisk i wiele etatów na danym stanowisku.
Bezrobotny może być zatrudniony na stanowisku uprzednio przez siebie zajmowanym albo
zgodnie z wykształceniem.
Polecenia:
• Wykonaj model danych w postaci diagramu zwiazków-encji
˛
oraz spisu dodatkowych
założeń, których nie da si˛e wyrazić diagramem.
• Według stworzonego modelu zaimplementuj baz˛e danych w SQL, podajac
˛ ciag
˛ poleceń
tworzacych
˛
ja.˛
Uwagi:
• Zakładamy, że bezrobotni sa˛ obywatelami polskimi.
• Pami˛etaj o kontroli poprawności.
• Brakujac
˛ a˛ informacj˛e (np. typy kolumn) uzupełnij zgodnie ze zdrowym rozsadkiem
˛
(zdrowy rozsadek
˛
też punktujemy ;-).
4
Wyzwalacze i PL/SQL
(a) W tym zadaniu korzystać b˛edziemy z bazy danych o nast˛epujacym
˛
schemacie :
CREATE TABLE Pracownik (
pesel CHAR(11) PRIMARY KEY,
imie VARCHAR(20) NOT NULL,
nazwisko VARCHAR(20) NOT NULL);
CREATE TABLE Kurs (
numer NUMERIC(5) PRIMARY KEY,
prowadzacy CHAR(11) REFERENCES Pracownik,
nazwa VARCHAR(20) NOT NULL,
data DATE NOT NULL);
CREATE TABLE Uczestnik (
pesel CHAR(11) REFERENCES Pracownik,
numer NUMERIC(5) REFERENCES Kurs,
PRIMARY KEY (pesel, numer));
10
Zrealizuj w PL/SQL nast˛epujace
˛ warunki poprawności:
i.
ii.
iii.
iv.
Nikt nie może byc równocześnie prowadzacym
˛
i uczestnikiem tego samego kursu.
Nikt nie może być uczestnikiem dwóch kursów odbywajacych
˛
si˛e w tym samym dniu.
Uczestnikiem kursu o danej nazwie mozna być tylko raz.
Nie można być uczestnikiem kursu (o danej nazwie), dla którego było si˛e wcześniej
prowadzacym.
˛
(b) W tym zadaniu korzystać b˛edziemy z bazy danych o nast˛epujacym
˛
schemacie:
CREATE TABLE Samochody (
nrrej CHAR(10) PRIMARY KEY,
wlasciciel VARCHAR(30) NOT NULL,
typ CHAR(1) CHECK (typ IN (’o’, ’c’)),
miasto VARCHAR(20));
CREATE TABLE Ubezpieczenia (
polisa NUMERIC(5) PRIMARY KEY,
data_od DATE NOT NULL,
data_do DATE NOT NULL,
limit NUMERIC(8) NOT NULL,
auto CHAR(10) NOT NULL REFERENCES Samochody);
CREATE TABLE Odszkodowania (
polisa NUMERIC(5) REFERENCES Ubezpieczenia,
kwota NUMERIC(8),
data DATE,
PRIMARY KEY (polisa, data));
Zrealizuj nast˛epujace
˛ warunki poprawności:
i. Daty wypłat odszkodowań powinny zawierać si˛e w okresie obowiazywania
˛
ubezpieczenia.
ii. Suma wypłat odszkodowań dla danego ubezpieczenia nie może przekroczyć jego limitu.
Fakt odmowy wypłaty odszkodowania należy odnotować w dodatkowej tabeli (która˛
trzeba utworzyć).
(c) W tym zadaniu korzystać b˛edziemy z bazy danych o nast˛epujacym
˛
schemacie:
CREATE TABLE Lekarze (
numer NUMERIC(5) PRIMARY KEY,
nazwisko VARCHAR(20) NOT NULL,
imie VARCHAR(15) NOT NULL,
miasto VARCHAR(20));
CREATE TABLE Pacjenci (
pesel NUMERIC(11) PRIMARY KEY,
nazwisko VARCHAR(20) NOT NULL,
imie VARCHAR(15) NOT NULL,
limit NUMERIC(8) NOT NULL));
CREATE TABLE Zabiegi (
pacjent NUMERIC(11) REFERENCES Pacjenci,
lekarz NUMERIC(5) REFERENCES Lekarze,
11
data DATE,
krytyczny CHAR(3) NOT NULL CHECK (krytyczny IN (’tak’, ’nie’));
koszt NUMERIC(8) NOT NULL,
PRIMARY KEY (pacjent, lekarz, data));
Zrealizuj nast˛epujace
˛ warunki poprawności:
i. Lekarz nie może przeprowadzać wi˛ecej niż 6 zabiegów dziennie.
ii. Sumaryczny roczny koszt zabiegów dla danego pacjenta nie może przekroczyć jego
limitu świadczeń, chyba że zabieg jest krytyczny. Fakt odmowy wykonania zabiegu
należy odnotować w dodatkowej tabeli (która˛ trzeba utworzyć).
(d) Baza danych zawiera tabele:
• Komputer(producent, model, typ),
• PC(model, szybkość, ram, dysk, cdrom, cena),
• Laptop(model, szybkość, ram, dysk, ekran, cena).
Zdefiniuj nast˛epujace
˛ ograniczenia:
• Komputery PC o szybkości mniejszej niż 150 MHz nie moga˛ być sprzedawane drożej
niż za 2500 złotych lub musza˛ mieć co najmniej 64 MB pami˛eci RAM.
• Laptopy o ekranie mniejszym niż 11 cali, które nie maja˛ dysku co najmniej 1GB, sa˛
sprzedawane poniżej 36000 złotych.
(e) Baza danych zawiera tabele:
• Komputer(producent, model, typ),
• PC(model, szybkość, ram, dysk, cdrom, cena),
• Laptop(model, szybkość, ram, dysk, ekran, cena).
Zdefiniuj nast˛epujace
˛ ograniczenie:
• Żaden laptop nie może być sprzedawany taniej niż PC o tej samej lub mniejszej szybkości i pami˛eci RAM.
12

Podobne dokumenty