Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 3 (część 1 Projektu) Na zajęciach należy zaprojektować schemat bazy danych oraz przygotować dokument zawierający: Temat: Autor: 1. Opis 2. Wymagania funkcjonalne 3. Schemat bazy danych (diagram + skrypt sql) Ocena 0-10 pkt. Przykład Temat: Biblioteka 1. Opis W Filiach biblioteki znajdują się Książki wydane przez różnych Wydawców oraz należące do różnych Gatunków. Do Filii przychodzą Czytelnicy będący studentami lub pracownikami różnych Wydziałów uczelni. Czytelnicy wypożyczają i oddają Książki. 2. Wymagania funkcjonalne (ok. 20) System powinien oferować następujące Zestawienia: 1 Lista czytelników (Imię, Nazwisko, Wydział, Adres) w porządku alfabetycznym wg nazwiska, imienia 2 Lista filii biblioteki (Numer filii, lokalizacja, godziny otwarcia) 3 Lista książek (Tytuł, Autor, Rok wydania, Gatunek) w porządku alfabetycznym wg tytułów 4 Lista autorów (Nazwisko, Imie, Liczba książek) uporządkowana malejąco wg liczby książek 5 Lista czytelników, którzy nie oddali książek (Nazwisko, Imie, Wydział, Tytul, Data_wypozyczenia) posortowana alfabetycznie wg nazwiska, imienia 6 Lista wydziałów z liczbą wypozyczeń (Nazwa wydziału, Liczba wypożyczonych książek) posortowana malejąco wg liczby wypożyczonych książek 7
3. Schemat CREATE TABLE [dbo].[ksiazka]( [id] [int] IDENTITY(1,1) NOT NULL, [tytul] [nvarchar](50) NULL, [rok_wydania] [smallint] NULL, [id_wydawnictwa] [int] NULL, [liczba_stron] [int] NULL, [gatunek] [nchar](20) NULL, [cena] [decimal](10, 2) NULL, [id_filii] [int] NULL, CONSTRAINT [PK_ksiazka] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[ksiazka] WITH CHECK ADD CONSTRAINT [FK_ksiazka_wydawnictwo] FOREIGN KEY([id_wydawnictwa]) REFERENCES [dbo].[wydawnictwo] ([id]) GO ALTER TABLE [dbo].[ksiazka] CHECK CONSTRAINT [FK_ksiazka_wydawnictwo] GO...
LAB 4-5 (część 2 Projektu) Na zajęciach należy napisać zapytania SQL realizujące wymagania funkcjonalne określone w części 1 Projektu. Przed tworzeniem zapytań należy wstawić przykładowe dane do bazy w celu upewnienia się, że schemat bazy jest odpowiedni do postawionych wymagań (w razie potrzeby należy poprawić schemat). Wymagania funkcjonalne określone w części 1 Projektu można rozszerzyć, zmienić lub doprecyzować w razie potrzeby. Do przygotowanych zapytań należy przygotować dokumentację: Nr zapytania Kategoria zapytania (wg poniższej listy) Opis słowny wyniku zapytania + przykładowy wynik SQL Wskazane jest, by przygotować min. 1 zapytanie z każdej kategorii. Ocena 0-20 pkt. Kategorie zapytań (nieformalna klasyfikacja): 1. Lista uporządkowana (SELECT ORDER BY) 2. Lista uporządkowana z warunkiem (SELECT WHERE ORDER BY) 3. Lista uporządkowana z warunkiem złożonym (będącym sumą logiczną / iloczynem logicznym innych warunków) (SELECT WHERE (OR/AND) ORDER BY) 4. Lista uporządkowana z użyciem operatora LIKE w warunku 5. Lista uporządkowana z użyciem operatora NOT IN / IN w warunku 6. Lista uporządkowana zawierająca kolumny z więcej niż jednej tabeli (INNER JOIN) 7. Lista uporządkowana zawierająca kolumny z więcej niż jednej tabeli (LEFT/RIGHT OUTER JOIN) 8. Lista uporządkowana z warunkiem opartym na wyniku zapytania zagnieżdżonego 9. Lista uporządkowana z kolumną będącą wynikiem zapytania zagnieżdżonego 10. Lista z użyciem funkcji MONTH()/ YEAR()/ DAY() 11. Lista z użyciem funkcji operujących na datach DateADD/ DateDIFF 12. Lista uporządkowana z operatorem UNION 13. Lista uporządkowana z operatorem INTERSECT 14. Lista uporządkowana z operatorem EXCEPT 15. Lista z użyciem funkcji agregującej SUM() (SELECT.. GROUP BY ) 16. Lista z użyciem funkcji agregującej COUNT() (SELECT.. GROUP BY ) 17. Lista z użyciem funkcji agregującej AVG(), MIN(), MAX() (SELECT.. GROUP BY ) 18. Lista z użyciem funkcji agregującej i opóźnionym warunkiem (SELECT..GROUP BY HAVING) 19. Lista z użyciem widoku, CASE WHEN END, IIF(,,) 20. Lista z użyciem PIVOT Dokumentacja części 2 Projektu powinna być wysłana na adres katpalik@pg.edu.pl na koniec zajęć Lab 4 oraz na koniec zajęć Lab 5. Ocena jest wystawiana po Lab 5.
Przykład dokumentacji: Zapytanie 1 Kategoria 7. Lista uporządkowana zawierająca kolumny z więcej niż jednej tabeli (LEFT/RIGHT OUTER JOIN) Wynik: Lista czytelników (Imię, Nazwisko, Wydział) w porządku alfabetycznym wg nazwiska, imienia. Czytelnicy bez przypisanego wydziału będą posiadali NULL w kolumnie Akronim SELECT Imie, Nazwisko, Akronim Zapytanie 2 Kategoria 6. Lista uporządkowana zawierająca kolumny z więcej niż jednej tabeli (INNER JOIN) Wynik: Lista czytelników, którzy nie oddali książek (Nazwisko, Imie, Wydział, Tytul, Data_wypozyczenia) posortowana alfabetycznie wg nazwiska, imienia SELECT Imie, Nazwisko, Akronim, Tytul, Data_wypozyczenia INNER JOIN Wypozyczenie ON Czytelnik.id = Wypozyczenie.id_czytelnika INNER JOIN Ksiazka ON Ksiazka.id = Wypozyczenie.id_ksiazki WHERE Data_zwrotu IS NULL Zapytanie 3 Kategoria 20. Lista z użyciem PIVOT Wynik: Lista średnich cen książek z podziałem na gatunki i języki książek
select gatunek,[pol],[eng] from (select gatunek,jezyk, Cena from ksiazka) AS SourceTable PIVOT (AVG(Cena) FOR Jezyk IN ([POL],[ENG]) ) As PivotTable Zapytanie 4 Kategoria 19. Lista z użyciem widoku, CASE WHEN END, IIF(,,) Wynik: Lista czytelników (Imię, Nazwisko, Wydział) w porządku alfabetycznym wg nazwiska, imienia. Czytelnicy bez przypisanego wydziału będą posiadali brak w nazwie wydziału CREATE VIEW ListaCzytelnikow AS SELECT Imie, Nazwisko, IIF(Akronim IS NULL, brak,akronim) AS Wydzial Select * from ListaCzytelnikow Zapytanie 5 Kategoria 19. Lista z użyciem widoku, CASE WHEN END, IIF(,,) Wynik: Lista czytelników (Imię, Nazwisko, Typ) w porządku alfabetycznym wg nazwiska, imienia. Czytelnicy bez statusu będą posiadali nieznany w nazwie typu CREATE VIEW ListaCzytelnikow AS SELECT Imie, Nazwisko, CASE WHEN status=0 THEN 'student' WHEN status=1 THEN 'pracownik' WHEN status IS NULL THEN 'nieznany' END AS typ Select * from ListaCzytelnikow Zapytanie 6 Kategoria 11. Lista z użyciem funkcji operujących na datach DateADD/ DateDIFF Wynik: Lista średniej liczby dni przetrzymywania książki w zależności od gatunku select gatunek,avg(datediff(dd,data_wypozyczenia,data_zwrotu)) AS Ile_dni from ksiazka inner join wypozyczenie on wypozyczenie.id_ksiazki=ksiazka.id group by gatunek
Kopia bazy Backup bazy (Schemat + dane) Generacja skryptu (schemat)
Zapis danych do pliku.csv Przygotowanie komend INSERT INTO przy pomocy funkcji ZŁĄCZ.TEKSTY