Opracuj na piśmie schemat bazy danych zamówień na towary (OBOWIĄZKOWE)
klienci, zamówienia, produkty;
musi być możliwość obliczenia, ile każdy klient jest winien za zamówione towary i zaznaczenia, czy klient już zapłacił za dane zamówienie;
określ atrybuty istotne dla poszczególnych obiektów;
określ powiązania, pamiętając, że zamówienie musi mieć co najmniej 1 pozycję, klient może być zarejestrowany mimo, że jeszcze nic nie zamówił, produkt ma stałą cenę jednostkową, zamawia się ściśle określone ilości ściśle określonych produktów, nie wszystkie produkty firmy stały się przedmiotem zamówienia;
nazwij powiązania i określ liczebności po stronie wiele;
Zadania
Zaproponuj relacyjną bazę danych Imieniny.
Jaką wadę ma tabela (ddmm, rok, godz_wschodu_słońca, kurs_dolara)? Zaproponuj przekształcenie na dwie tabele.
Jaką wadę ma tabela (nazwa_kursu, semestr, prowadzący, auto_prowadzącego) ? Zaproponuj przekształcenie na dwie tabele.
Pokaż, dlaczego relacja:
{miasto, dzielnica, symbol_rejestracyjny_samochodów}
F = { miasto, dzielnica --> symbol_rejestracyjny_samochodów,
miasto, symbol --> dzielnica,
symbol_rejestracyjny_samochodów --> miasto }
nie jest w postaci normalnej Boycea-Codda?
Czy jest w trzeciej postaci normalnej?
zadania na ćwiczeniach
podaj na 2 sposoby pary nazwisko pracownika, nazwisko jego szefa - uwzględnij także samego szefa firmy
podaj rodzaje stanowisk, na których firma zatrudniała w okresie '01-JAN-83' - '30-JUN-83' o ile zatrudniała na nich także w okresie '01-JAN-84' - '30-JUN-84'
podaj pracowników zatrudnionych w tym samym departamecie, co SMITH
znajdź na 2 sposoby departament, w którym brak pracowników
podaj ostatnio zatrudnionego pracownika(ów) w każdym z departamentów
wybierz nazwiska i daty zatrudnienia, przy dacie ostatnio zatrudnionego wstaw '*'
odpowiedzi
sposób I: SELECT p.ename, s.enameFROM emp p, emp s
WHERE p.mgr = s.empno(+)
sposób II: SELECT p.ename, s.enameFROM emp p, emp s
WHERE p.mgr = s.empno UNION SELECT ename, FROM emp WHERE mgr IS Null
SELECT job FROM emp WHERE hiredate between '01-JAN-83' and '30-JUN-83'
intersect
SELECT job FROM emp WHERE hiredate between '01-JAN-84' AND '30-JUN-84'
SELECT ename FROM emp WHERE deptno = (SELECT deptno FROM emp WHERE ename=SMITH)
sposób I: SELECT d.deptno, d.dname FROM emp e, dept d WHERE e.deptno(+)=d.deptno and e.empno IS Null
sposób II: SELECT deptno FROM dept MINUS SELECT deptno from emp
SELECT deptno, ename, hiredate FROM emp
WHERE (hiredate, deptno) in
(SELECT max(hiredate), deptno FROM emp GROUP BY deptno)
SELECT ename, hiredate, '*'
FROM emp
WHERE hiredate = (SELECT max(hiredate) FROM emp)
UNION
SELECT ename, hiredate, ' '
FROM emp
WHERE hiredate < (SELECT max(hiredate) FROM emp)
zadania domowe (OBOWIĄZKOWE)
wybierz dane o szefie firmy, podając także nazwę jego departamentu oraz klasę zaszeregowania jego zarobków /IS NULL/
podaj rodzaje stanowisk, na których pracownicy zarabiają od 2000 do 3000; pamiętaj o usunięciu duplikatów
dla każdej klasy zaszeregowania wyznacz osoby zarabiające najmniej w tej klasie /IN, podzapytanie/
podaj nazwisko(a) osób najdawniej zatrudnionej(ych) /podzapytanie/
obok nazwiska każdego pracownika umiesc skrót nazwy jego stanowiska z 3 jego pierwszych znaków, dzien tygodnia, w którym został zatrudniony, zarobki miesieczne w postaci <kwota> zl (np. 1000 zł) oraz prowizję roczną w takim samym formacie; w razie braku prowizji wygeneruj napis BRAK
zadania na ćwiczenia i do domu (OBOWIĄZKOWE)
- Uporządkuj pracowników wg daty ich zatrudnienia
- Oblicz ilu pracowników jest zatrudnionych na każdym stanowisku.
- Oblicz ilu pracowników zarabia miesięcznie powyżej średniej.
- Dla każdego pracownika oblicz ile dni pracuje w firmie.
- Jaki dzień tygodnia przypadnie za 1000 dni?
- Od dzisiaj zamiast stanowiska CLERK obowiązuje OFFICER. Wygeneruj aktualną listę pracowników: nazwisko, stanowisko, data_zatrudnienia.
- Podaj dla każdego szefa ilu ma podwładnych (numer_szefa, liczba_podwładnych).
- Wypełnij w tabeli EMP puste miejsca w kolumnie COMM napisem BRAK.
- Znajdź osoby o najdłuższym nazwisku w firmie.
- Czy istnieje choć jeden pracownik o zarobkach równych średniej?
- Podaj liczbę osób w każdej klasie zaszeregowania.
- Podaj trzech najlepiej zarabiających pracowników.
- Stwórz listę pracowników, wyróżnij osobę/osoby najwcześniej zatrudnione.
- Czy jest departament, w którym każdy pracownik zarabia powyżej średniej?
- Wygeneruj listę pracowników - nazwisko, data_zatrudnienia, nazwa_departamentu, klasa_zaszeregowania.
- Na którym stanowisku/stanowiskach najlepsze są średnie zarobki?
- W którym departamencie zatrudniono najpóźniej pracownika?
zadania na kolokwium grupa I
MODELOWANIE
1. W stolicy zostały wyznaczone trasy linii autobusowych - są to zestawy kolejnych przystanków. Każdą trasą porusza się jeden autobus (np. 159). Autobusy przemieszczają się zgodnie z jednolitym rozkładem jazdy, na którym wyróżnione są godziny jazdy autobusów niskopodłogowych.
Stwórz model komunikacji autobusowej miasta stosując notację ERWina. Pamiętaj o wyróżnieniu atrybutów kluczowych, zaznaczeniu rodzaju związków, zaznaczeniu liczebności oraz reguł spójności referencyjnej.
Zakładając stworzenie na bazie modelu odpowiednich tabel napisz zapytanie wybierające wszystkie linie autobusowe, które z przystanku ŁAŻIENKI zabierają pasażerów na PLAC ZAMKOWY.
2. Przedstaw graficznie związek między encją EMP a encją DEPT.
SQL
- Znajdź departament/departamenty bez obsady.
- Podaj numery departamentów, w których jest mniej niż czterech pracowników.
- Jak liczna jest grupa pracowników w klasie zaszeregowania 3 (GRADE)?
- Wygeneruj za pomocą polecenia SELECT napis "klasówka z SQL".
- Wyznacz stanowiska (JOB), na których nie przysługuje prowizja (COMM). Pamiętaj o wyeliminowaniu duplikatów.
- Ilu pracowników posiada zarobki (SAL) pomiędzy 1000 a 2000?
- Ile miesięcznie w sumie zarabiają pracownicy zatrudnieni na stanowisku ANALYST?
- Podaj pary nazwisk bezpośredni szef, pracownik, uszereguj je w kolejności alfabetycznej nazwisk szefów.
zadania na ćwiczeniach
uwaga: jeśli pracujemy na koncie demo (SCOTT/TIGER) wówczas trzeba pamiętać o konieczności zakładania tabel o różnych nazwach
* znajdź trzech najlepiej zarabiających pracowników
utwórz tabelę emp1 na wzór emp (osoby pracujące na koncie SCOTT tworzą tabele o nazwie s<nr_indeksu>)
w tabeli emp1 wyrównaj wszystkim płace do średniej pensji według stanowisk
udostępnij tabelę emp1 wszystkim do oglądania
zmień w emp1 datę zatrudnienia SCOTTa na 3 kwietnia br. godzina 13:15:00
zajrzyj do tabeli emp1 sąsiada
utwórz jednokolumnową tabelę losowe, (nazwa kolumny liczba, typ kolumny - liczba trzycyfrowa, PRIMARY KEY)
wstaw do tabeli losowe co najmniej 6 liczb (100, 12, 34, 23, 0, 1). Zastosuj parametryzację zapytania w SQL*Plus.
* wybierz z tabeli losowe wartości kolumny liczba w porządku rosnącym nie stosując ORDER BY, numerując je po kolei:1 0
2 1
3 12
4 23
5 34
6 100
- podłącz się jako SCOTT/TIGER; wybierz z tabeli EMP informację o swoim (czyli SCOTT-a) rekordzie danych.
odpowiedzi
SELECT prac.ename FROM emp prac WHERE
3 > (SELECT count(*) FROM emp WHERE prac.sal < sal);
CREATE TABLE emp1 AS SELECT * FROM emp
UPDATE emp1 e1
SET e1.sal = (SELECT max(sal) FROM emp WHERE job = e1.job)
GRANT SELECT ON emp1 TO PUBLIC
UPDATE emp1 SET hiredate=to_date('03-APR-99/13:15:00', 'dd-mon-yy/hh24:mi:ss')
WHERE ename = 'SCOTT'
SELECT * FROM <user_name>.emp1
CREATE TABLE losowe (liczba NUMBER(3) PRIMARY KEY);
INSERT INTO losowe (liczba) VALUES &podaj_3_cyfrowa_liczbe;
SELECT count(*), M.liczba
FROM losowe L, losowe M
WHERE L.liczba <= M.liczba
GROUP BY M.liczba;
CONNECT scott/tiger
SELECT * FROM emp WHERE ename = user;
Zadania na kolokwium z modelowania
grupa I
W warszawskich pubach podają piwo jednego lub kilku gatunków. To samo piwo może mieć różne ceny w różnych pubach. Bywalcy pubów odwiedzają różne puby i kosztują różnych piw. Każdy pije co najmniej jeden gatunek piwa i odwiedza co najmniej jeden pub.
Stwórz w notacji ErWina diagram związków encji oraz zaprojektuj znormalizowaną bazę danych (III postać normalna) umożliwiającą realizację różnych zapytań w zakresie powiązanych między sobą informacji o pubach, bywalcach, piwach i ich cenach.
Przedstaw dwie kolejne fazy tworzenia diagramu. Zaznacz rodzaje związków i ich liczebność.
grupa II
W warszawskich biurach podróży można wykupić przejazdy na różne trasy. Ta sama trasa może różnie kosztować w różnych biurach. Każdy zarejestrowany klient wykupił co najmniej jedną trasę w co najmniej jednym biurze.
Stwórz w notacji ErWina diagram związków encji oraz zaprojektuj znormalizowaną bazę danych (III postać normalna) umożliwiającą realizację różnych zapytań w zakresie powiązanych między sobą informacji o biurach, klientach, trasach i ich cenach.
Przedstaw dwie kolejne fazy tworzenia diagramu. Zaznacz rodzaje związków i ich liczebność
Projekt zaliczeniowy (OBOWIĄZKOWY)
Biuro Nieruchomości BAJKA
Biuro Nieruchomości BAJKA zajmuje się przyjmowaniem ofert sprzedaży mieszkań. Udziela klientom zainteresowanym kupnem mieszkania informacji o dostępnych ofertach sprzedaży, np. o metrażu, liczbie pokoi, które piętro, cena, data ważności oferty, lokalizacja. Biuro umawia swojego pośrednika z klientami na oględziny mieszkań. Jedną z reguł jest to, że pośrednik nie może być umówiony w tym samym czasie na oględziny dwóch różnych mieszkań. Biuro zajmuje się rejestrowaniem zawartych przy swoim pośrednictwie transakcji kupna-sprzedaży.
Stwórz model związków encji w notacji ErWina dla Biura Nieruchomości BAJKA.
Utwórz odpowiednie tabele w Oracleu. Pamiętaj o zdefiniowaniu kluczy, dla których Oracle generuje automatyczne indeksy. Do generowania jednoznacznych identyfikatorów zastosuj sekwencje. Wprowadź przykładowe dane.
Napisz pakiet złożony z co najmniej dwóch procedur służących do obsługi Biura, w tym jednej procedury działającej na kursorze. Przykładowe procedury:
ZAREJESTROWANIE KLIENTA ZAINTERESOWANEGO KUPNEM MIESZKANIA
ZAREJESTROWANIE KLIENTA ZAINTERESOWANEGO SPRZEDAŻĄ MIESZKANIA
ZGŁOSZENIE MIESZKANIA DO SPRZEDAŻY
WYBÓR OFERTY WEDŁUG ZADANYCH KRYTERIÓW
WYŚWIETLENIE TEKSTÓW AKTUALNYCH OFERT (kursor)
Napisz triger (wyzwalacz) dla operacji UMÓWIENIE Z KLIENTEM NA OGLĘDZINY MIESZKANIA, który przy rejestrowaniu umówienia (operacja INSERT) zapobiega umówieniu pośrednika już umówionego o tej samej porze na inne oględziny.
Praca powinna być opracowana na piśmie oraz w Oracleu. Może być wykonywana w grupach dwuosobowych. Procedury i triger powinny działać. Warunkiem zaliczenia pracy jest jej prezentacja na zajęciach.
ZADANIA TESTOWE: patrz lech.pjwstk.waw.pl/bd2