Ćwiczenia w PHP i SQL - Portal Sakila

Niniejszy wpis jest pewnego rodzaju "instrukcją" prowadzącą do zbudowania portalu obsługującego wypożyczalnię wideo - Sakilę. Portal ten bazuje na testowej bazie danych Sakila (tutaj zip), z której korzystam podczas zajęć związanych z bazami danych. Przy każdej liście zadań znajduje się zaznaczenie, które metody spośród CRUD są implementowane w zadaniach na liście.

(Lista jest w trakcie tworzenia. Data ostatniej aktualizacji: 02.11.2023.)

Lista 1: wyświetlanie informacji podstawowych (cRud)

  1. Utwórz plik index.php wyświetlający listę filmów w bazie. Każdy film powinien być linkiem do pliku film.php, wysyłającym metodą GET (ale nie formularzem!), który film wyświetlić.
  2. Utwórz plik film.php. Plik ten powinien wyświetlić informacje o wybranym filmie (parametr wysłany metodą GET) - tytuł, opis, rating, długość. Następnie należy wyświetlić kategorie, do których film należy (każda kategoria "klikalna" - link do category.php wyświetlającego szczegóły kategorii), oraz obsadę (lista/tabela aktorów, każdy "klikalny" - link do actor.php wyświetlającego szczegóły aktora).
  3. Utwórz plik actor.php. Plik ten powinien wyświetlić szczegóły dotyczące aktora: imię i nazwisko, liczbę filmów, w których grał. Poniżej powinna być przedstawiona lista filmów, w których grał (każdy tytuł "klikalny" jak w p. 2).
  4. Utwórz plik category.php. Plik ten powinien wyświetlać szczegóły kategorii: nazwę, liczbę filmów w tej kategorii i ich listę (każdy tytuł "klikalny" jak w p. 2).

W tym momencie powinno być możliwe przeglądanie listy filmów, szczegółów o filmach, aktorach i kategoriach.

Czytaj dalej

Konfiguracja interfejsów sieciowych w Linuksie z wykorzystaniem netplanu

Netplan jest narzędziem zarządzającym konfiguracją wszelkich aspektów konfiguracji sieci komputerowych podłączonych do urządzenia z systemem Linux. System Ubuntu zaadaptował to narzędzie w wersji 17.10 Artful Aardvark (Pomysłowy Mrównik) i od tamtej pory należy z niego korzystać, aby „trwale” skonfigurować sieć w systemie.

Dzięki netplanowi możliwe jest:

  • konfigurowanie tylko podanych interfejsów / urządzeń (te niewymienione w pliku konfiguracyjnym nie są "ruszane"),
  • wykorzystanie sieci w ekstremalnie okrojonym systemie (wręcz na etapie initramfs),
  • bardzo szybka zmiana konfiguracji, ponieważ jest ona ustalana przy starcie systemu i tracona przy restarcie (efemeryczna),
  • możliwe jest generowanie maszyn wirtualnych / kontenerów z zadaną konfiguracją sieciową jedynie poprzez dodanie pliku konfiguracyjnego do jej plików.
Czytaj dalej

Ograniczenia modelu relacyjnego. Rodzaje kluczy w relacyjnych bazach danych

Tworząc schematy baz danych, możemy korzystać z narzucanych przez model relacyjny ograniczeń, aby system baz danych "pilnował nas" podczas pracy z przechowywanymi w bazie danymi.

Ograniczenia modelu relacyjnego możemy podzielić na trzy grupy:

  1. ograniczenia oparte na modelu danych, wynikające wprost z założeń modelu relacyjnego,
  2. ograniczenia oparte na schemacie (ograniczenia bezpośrednie), wynikające z zaprojektowanego schematu danych,
  3. ograniczenia oparte na aplikacjach (ograniczenia semantyczne / reguły biznesowe), wynikające z założeń, na podstawie których projektuje się schemat bazy danych; ograniczenia te nie mogą być zaprogramowane w bazie danych (lub jest to bardzo trudne do zaimplementowania), przez co są wyrażane w projektowanej aplikacji bazodanowej.
Czytaj dalej

Ćwiczenia w kwerendach wprowadzających/wstawiających

Bazując na bazie testowej Sakila, wykonaj następujące ćwiczenia. Pod listą zadań znajduje się przypomnienie składni polecenia INSERT INTO.

  1. Stworzyć kwerendę wprowadzającą do tabeli actor następujące dane.
polewartość
actor_id201
first_nameAndrew
last_nameMcConaughey
last_update2020-10-21 14:12:23

2. Stworzyć kwerendę dodającą do tabeli film_actor następujące dane. Nieokreślone dane pozostawić domyślne.

actor_idfilm_id
2011
2012
2013

3. Utworzyć tabelę actor_copy zgodną z definicją tabeli actor.

4. Utworzyć zapytanie wykonujące kopię danych z tabeli actor do tabeli actor_copy.

Czytaj dalej

SQL DQL - ćwiczenia w zapytaniach, funkcjach agregujących i złączeniach

Bazując na bazie testowej Sakila (tutaj zip), wykonaj następujące ćwiczenia. Ułatwieniem może być widok schematu relacji tej bazy. Data ostatniej aktualizacji list: 07.10.2024.

Lista 1: zapytania na jednej tabeli

  1. Podaj tytuły, opisy, czas wypożyczenia, koszt wypożyczenia za dzień i całkowity koszt wypożyczenia (jako iloczyn czasu wypożyczenia i jego kosztu) dla każdego filmu. Przyjmij, że pole rental_rate zawiera koszt wypożyczenia za dzień (według dokumentacji bazy jest to koszt wypożyczenia na tyle dni, ile zapisano w polu rental_duration).
    • Wersja zgodna z dokumentacją. Podaj tytuły, opisy, czas wypożyczenia oraz koszt wypożyczenia za dzień (jako iloraz kosztu wypożyczenia na przewidzianą liczbę dni) dla każdego filmu.
  2. Podaj alfabetyczną listę nazwisk aktorów, każde nazwisko jeden raz.
  3. Wypisz wszystkie rodzaje ratingów filmów (każdy rating jednokrotnie).
  4. Wypisz tytuły, opisy, ratingi i długość filmów, które trwają 3 godziny lub dłużej.
    1. Zmodyfikuj powyższe zapytanie tak, aby czas był wyświetlany w godzinach (np. 75 minut = 1,25 godz.).
    2. Zmodyfikuj powyższe zapytanie tak, aby czas był wyświetlany w godzinach z dokładnością do drugiego miejsca po przecinku (np. 75 minut = 1,25 godz.).
    3. Zmodyfikuj powyższe zapytanie tak, aby kolumna z długością filmu w godzinach miała nazwę (alias) length_hours.
  5. Wypisz wszystkie informacje z tabeli customer o tych klientach, którzy są nieaktywni albo ich nazwisko kończy się na M.
  6. Wypisz wszystkie kategorie, których identyfikator jest większy niż 4, a których nazwa zaczyna się na C, S lub T. Użyj klauzuli WHERE.
    • Wykonaj powyższe ćwiczenie, używając operatora IN do określenia zbioru liter C, S, T.
      Uwaga. Trzeba użyć pewnej funkcji na tekstach.
  7. Wypisz wszystkie filmy z ratingiem G, PG-13 lub NC-17. Użyj operatora IN.
  8. Wypisz listę otwartych wypożyczeń (czyli wypożyczono film, ale jeszcze go nie zwrócono).
  9. Wypisz wypożyczenia, które miały miejsce między 25 a 26 maja 2005 r. Skorzystaj z operatora BETWEEN. Zwróć uwagę, że w polu rental_date przechowywana jest zarówno data, jak i godzina (typ danych to DATETIME).
  10. Wypisz listę dziesięciu ostatnio wypożyczonych filmów.
Czytaj dalej