Tworzenie i administrowanie bazami danych – ćwiczenia

Plan jednostek metodycznych

Lp. Tematy jednostek metodycznych Liczba godzin Wymagania podstawowe Wymagania ponadpodstawowe Efekt z podstawy programowej
1Organizacja zajęć i regulamin1Stosuje zasady BHPSamodzielnie opracowuje regulamin grupyINF.03.1(5)
2Podstawowe pojęcia baz danych2Określa encje, atrybuty, klucze, relacjeAnalizuje zależności logiczneINF.03.4(1)
3Relacyjne bazy danych3Charakteryzuje relacje, klucze główne i obceProjektuje relacje 1:N i N:NINF.03.4(2)
4Typy danych i normalizacja4Rozróżnia typy danych w tabelachNormalizuje do 3NFINF.03.4(3)
5Projektowanie diagramu E/R3Tworzy podstawowy diagram E/RProjektuje złożony diagram z atrybutami złożonymiINF.03.4(4)
6Tworzenie tabel i relacji w SQL3Tworzy tabele, ustala klucze główneDodaje więzy integralności i klucze obceINF.03.4(5)
7Tworzenie formularzy i zapytań3Dodaje dane przez formularz i wykonuje SELECTŁączy tabele i filtruje wynikiINF.03.4(6)
8Tworzenie i formatowanie raportów2Tworzy podstawowy raportFormatowanie raportu z nagłówkami i sumamiINF.03.4(7)
9Związki między encjami2Tworzy dodatkową tabelę i relacje 1:NProjektuje złożone powiązania N:MINF.03.4(2,5)
10Typy danych dla atrybutów encji2Modyfikuje typy kolumn w tabelachDodaje kolumny z typami DATE i DECIMALINF.03.4(3)
11Typy systemów zarządzania bazami danych2Rozróżnia SZBDTworzy tabelę porównawczą systemówINF.03.4(1)
12Tworzenie tabel pracowników2Tworzy podstawową tabelę pracownikówDodaje i edytuje kolumny oraz kluczeINF.03.4(5)
13Tworzenie formularzy dla pracowników3Formularz dodaje pracownikówFormularz umożliwia edycję rekordówINF.03.4(6)

Ćwiczenia praktyczne

Jednostka 1 – Organizacja zajęć

Polecenie: Zapoznaj się z regulaminem pracowni i przygotuj listę zasad bezpieczeństwa.

Efekt: Dokument z zasadami BHP w pracowni komputerowej.

Jednostka 2 – Podstawowe pojęcia baz danych

Polecenie: Utwórz tabelę klienci z polami id_klienta, imie, nazwisko, email, miasto.

CREATE TABLE klienci (
  id_klienta INT AUTO_INCREMENT PRIMARY KEY,
  imie VARCHAR(50),
  nazwisko VARCHAR(50),
  email VARCHAR(100),
  miasto VARCHAR(50)
);
query($sql);
$conn->close();
echo "Tabela utworzona!";
?>
Efekt: Pusta tabela klienci utworzona w bazie danych.

Jednostka 3 – Relacyjne bazy danych

Polecenie: Dodaj tabelę zamowienia i połącz ją relacją 1:N z tabelą klienci.

CREATE TABLE zamowienia (
  id_zamowienia INT AUTO_INCREMENT PRIMARY KEY,
  id_klienta INT,
  data DATE,
  FOREIGN KEY (id_klienta) REFERENCES klienci(id_klienta)
);
query($sql);
$conn->close();
echo "Tabela zamowienia utworzona!";
?>
Efekt: Tabela zamówienia utworzona i powiązana z klientami.

Jednostka 4 – Typy danych i normalizacja

Polecenie: Dodaj kolumnę telefon do tabeli klienci i sprawdź typ danych VARCHAR(20).

ALTER TABLE klienci ADD telefon VARCHAR(20);
query($sql);
$conn->close();
echo "Dodano kolumnę telefon!";
?>
Efekt: Kolumna telefon dodana do tabeli klienci.

Jednostka 5 – Projektowanie diagramu E/R

Polecenie: Narysuj diagram E/R dla tabel klienci i zamowienia, zaznaczając klucze główne i obce.

Efekt: Diagram E/R pokazujący relację 1:N między klientami a zamówieniami.

Jednostka 6 – Tworzenie tabel i relacji w SQL

Polecenie: Utwórz tabelę produkty i powiąż ją z tabelą zamowienia relacją N:M poprzez tabelę zamowienia_produkty.

CREATE TABLE produkty (
  id_produktu INT AUTO_INCREMENT PRIMARY KEY,
  nazwa VARCHAR(100),
  cena DECIMAL(10,2)
);

CREATE TABLE zamowienia_produkty (
  id_zamowienia INT,
  id_produktu INT,
  ilosc INT,
  FOREIGN KEY (id_zamowienia) REFERENCES zamowienia(id_zamowienia),
  FOREIGN KEY (id_produktu) REFERENCES produkty(id_produktu)
);
query("CREATE TABLE produkty (id_produktu INT AUTO_INCREMENT PRIMARY KEY, nazwa VARCHAR(100), cena DECIMAL(10,2))");
$conn->query("CREATE TABLE zamowienia_produkty (id_zamowienia INT, id_produktu INT, ilosc INT, FOREIGN KEY (id_zamowienia) REFERENCES zamowienia(id_zamowienia), FOREIGN KEY (id_produktu) REFERENCES produkty(id_produktu))");
$conn->close();
echo "Tabele produkty i zamowienia_produkty utworzone!";
?>
Efekt: Utworzone tabele produkty i powiązania N:M z zamówieniami.

Jednostka 7 – Tworzenie formularzy i zapytań

Polecenie: Utwórz formularz dodający nowego klienta i wyświetl listę wszystkich klientów.

<form method="post">
Imię: <input type="text" name="imie">
Nazwisko: <input type="text" name="nazwisko">
Email: <input type="email" name="email">
Miasto: <input type="text" name="miasto">
<input type="submit" value="Dodaj klienta">
</form>

<?php
$conn = new mysqli("localhost","root","","sklep");
if($_SERVER["REQUEST_METHOD"]=="POST"){
  $conn->query("INSERT INTO klienci (imie,nazwisko,email,miasto) VALUES ('".$_POST["imie"]."','".$_POST["nazwisko"]."','".$_POST["email"]."','".$_POST["miasto"]."')");
}
$result = $conn->query("SELECT * FROM klienci");
echo "<table class='effect-table'><tr><th>Imię</th><th>Nazwisko</th><th>Email</th><th>Miasto</th></tr>";
while($row=$result->fetch_assoc()){
  echo "<tr><td>".$row['imie']."</td><td>".$row['nazwisko']."</td><td>".$row['email']."</td><td>".$row['miasto']."</td></tr>";
}
echo "</table>";
$conn->close();
?>
Efekt: Formularz dodaje klienta i wyświetla aktualną listę.

Jednostka 8 – Tworzenie i formatowanie raportów

Polecenie: Wyświetl raport zamówień z nazwami produktów, ilością i ceną, posortowany według klienta.

<?php
$conn = new mysqli("localhost","root","","sklep");
$sql="SELECT k.imie,k.nazwisko,p.nazwa,zp.ilosc,p.cena FROM klienci k 
JOIN zamowienia z ON k.id_klienta=z.id_klienta
JOIN zamowienia_produkty zp ON z.id_zamowienia=zp.id_zamowienia
JOIN produkty p ON zp.id_produktu=p.id_produktu
ORDER BY k.nazwisko";
$result=$conn->query($sql);
echo "<table class='effect-table'><tr><th>Klient</th><th>Produkt</th><th>Ilość</th><th>Cena</th></tr>";
while($row=$result->fetch_assoc()){
  echo "<tr><td>".$row['imie']." ".$row['nazwisko']."</td><td>".$row['nazwa']."</td><td>".$row['ilosc']."</td><td>".$row['cena']."</td></tr>";
}
echo "</table>";
$conn->close();
?>
Efekt: Raport zamówień z klientami, produktami i ceną, posortowany alfabetycznie.

Jednostka 9 – Związki między encjami

Polecenie: Utwórz tabelę dostawcy i połącz ją z tabelą produkty relacją 1:N.

CREATE TABLE dostawcy (
  id_dostawcy INT AUTO_INCREMENT PRIMARY KEY,
  nazwa VARCHAR(100),
  kontakt VARCHAR(100)
);

ALTER TABLE produkty ADD id_dostawcy INT;
ALTER TABLE produkty ADD FOREIGN KEY (id_dostawcy) REFERENCES dostawcy(id_dostawcy);
query("CREATE TABLE dostawcy (id_dostawcy INT AUTO_INCREMENT PRIMARY KEY, nazwa VARCHAR(100), kontakt VARCHAR(100))");
$conn->query("ALTER TABLE produkty ADD id_dostawcy INT");
$conn->query("ALTER TABLE produkty ADD FOREIGN KEY (id_dostawcy) REFERENCES dostawcy(id_dostawcy)");
$conn->close();
echo "Tabela dostawcy utworzona i powiązana z produktami!";
?>
Efekt: Tabela dostawcy utworzona i powiązana z produktami.

Jednostka 10 – Typy danych dla atrybutów encji

Polecenie: Zmień typ danych kolumny telefon na VARCHAR(15) i dodaj kolumnę data_urodzenia typu DATE.

ALTER TABLE klienci MODIFY telefon VARCHAR(15);
ALTER TABLE klienci ADD data_urodzenia DATE;
query("ALTER TABLE klienci MODIFY telefon VARCHAR(15)");
$conn->query("ALTER TABLE klienci ADD data_urodzenia DATE");
$conn->close();
echo "Zmieniono typ kolumny telefon i dodano data_urodzenia!";
?>
Efekt: Kolumna telefon zmieniona, dodano kolumnę data_urodzenia.

Jednostka 11 – Typy systemów zarządzania bazami danych

Polecenie: Przeanalizuj różne SZBD i przygotuj tabelę porównawczą MS Access, MySQL, Oracle, MSSQL.

Efekt: Tabela porównawcza systemów baz danych z podziałem na możliwości i ograniczenia.

Jednostka 12 – Tworzenie raportów z filtrami

Polecenie: Wyświetl raport zamówień dla klienta o wybranym ID.

<form method="get">ID klienta: <input type="number" name="id_klienta">
<input type="submit" value="Pokaż raport"></form>

<?php
$conn = new mysqli("localhost","root","","sklep");
if(isset($_GET["id_klienta"])){
  $id=$_GET["id_klienta"];
  $result=$conn->query("SELECT k.imie,k.nazwisko,p.nazwa,zp.ilosc,p.cena FROM klienci k
JOIN zamowienia z ON k.id_klienta=z.id_klienta
JOIN zamowienia_produkty zp ON z.id_zamowienia=zp.id_zamowienia
JOIN produkty p ON zp.id_produktu=p.id_produktu
WHERE k.id_klienta=$id");
  echo "<table class='effect-table'><tr><th>Produkt</th><th>Ilość</th><th>Cena</th></tr>";
  while($row=$result->fetch_assoc()){
    echo "<tr><td>".$row['nazwa']."</td><td>".$row['ilosc']."</td><td>".$row['cena']."</td></tr>";
  }
  echo "</table>";
}
$conn->close();
?>
Efekt: Raport zamówień wybranego klienta.

Jednostka 13 – Tworzenie formularza do edycji danych

Polecenie: Stwórz formularz umożliwiający edycję danych klienta.

<form method="post">ID klienta: <input type="number" name="id">
Imię: <input type="text" name="imie">
Nazwisko: <input type="text" name="nazwisko">
Miasto: <input type="text" name="miasto">
<input type="submit" value="Edytuj klienta">
</form>

<?php
$conn = new mysqli("localhost","root","","sklep");
if($_SERVER["REQUEST_METHOD"]=="POST"){
  $conn->query("UPDATE klienci SET imie='".$_POST["imie"]."', nazwisko='".$_POST["nazwisko"]."', miasto='".$_POST["miasto"]."' WHERE id_klienta=".$_POST["id"]);
}
$conn->close();
?>
Efekt: Możliwość edycji danych istniejącego klienta.