Przejdź do głównej zawartości

Moduł 7 – Projekt: Baza danych Wypożyczalnia Samochodów

Opis projektu

Baza danych Wypożyczalnia Samochodów modeluje działalność firmy wynajmującej pojazdy. Zawiera informacje o klientach, samochodach, pracownikach, oddziałach i transakcjach wypożyczenia.


Schemat bazy danych

MIEJSCA
NR_MIEJSCA (PK)
ULICA, NUMER, MIASTO, KOD, TELEFON, UWAGI

│ 1:M 1:M
├────────────────────────────────────────────────────────────┐
│ │
PRACOWNICY WYPOZYCZENIA
NR_PRACOWNIKA (PK) NR_WYPOZYCZENIA (PK)
IMIE, NAZWISKO, DATA_ZATR NR_KLIENTA ────> KLIENCI
DZIAL, STANOWISKO, PENSJA, DODATEK NR_SAMOCHODU ────> SAMOCHODY
NR_MIEJSCA (FK) ───────────────────────────────────> NR_PRACOW_WYP ────> PRACOWNICY
NR_PRACOW_ODD ────> PRACOWNICY
NR_MIEJSCA_WYP ────> MIEJSCA
NR_MIEJSCA_ODD ────> MIEJSCA
DATA_WYP, DATA_ODD
KAUCJA, CENA_JEDN

Tabele

KLIENCI

Przechowuje dane klientów wypożyczalni.

KolumnaTypOpis
NR_KLIENTACHAR(8)Klucz główny
IMIEVARCHAR(20)Imię klienta
NAZWISKOVARCHAR(20)Nazwisko klienta
NR_KARTY_KREDYTCHAR(20)Numer karty (może być NULL)
FIRMAVARCHAR(40)Nazwa firmy (może być NULL)
ULICAVARCHAR(24)Ulica zamieszkania
NUMERCHAR(8)Numer domu/mieszkania
MIASTOVARCHAR(24)Miasto
KODCHAR(6)Kod pocztowy
NIPCHAR(12)NIP firmy (może być NULL)
NR_TELEFONUCHAR(16)Numer telefonu

SAMOCHODY

Flota samochodów dostępnych w wypożyczalni.

KolumnaTypOpis
NR_SAMOCHODUCHAR(6)Klucz główny
MARKAVARCHAR(20)Marka samochodu
TYPVARCHAR(16)Model/typ
ROK_PRODDATERok produkcji
KOLORVARCHAR(16)Kolor
POJ_SILNIKASMALLINTPojemność silnika (cm³)
PRZEBIEGINTEGERPrzebieg (km)

Dostępne samochody w bazie:

MarkaModele
FiatSeicento, Tipo
FordEscort, Ka, Sierra
Mercedes190D, 230D
OpelCorsa, Vectra
PolonezCaro
SeatIbiza

PRACOWNICY

Pracownicy obsługujący wypożyczenia.

KolumnaTypOpis
NR_PRACOWNIKACHAR(4)Klucz główny
IMIE, NAZWISKOVARCHAR(20)Dane osobowe
DATA_ZATRDATEData zatrudnienia
DZIALVARCHAR(20)Dział: OBSLUGA KLIENTA, TECHNICZNY, KSIEGOWOSC
STANOWISKOVARCHAR(20)Stanowisko: SPRZEDAWCA, KIEROWNIK, MECHANIK, KASJER
PENSJADECIMAL(8,2)Wynagrodzenie podstawowe
DODATEKDECIMAL(8,2)Dodatek do pensji (może być NULL)
NR_MIEJSCACHAR(6)Oddział (FK → MIEJSCA)
NR_TELEFONUCHAR(16)Numer telefonu

MIEJSCA

Oddziały/punkty wypożyczalni.

KolumnaTypOpis
NR_MIEJSCACHAR(6)Klucz główny
ULICA, NUMERVARCHAR/CHARAdres oddziału
MIASTOVARCHAR(24)Miasto: Warszawa, Wrocław, Kraków, Poznań
KODCHAR(6)Kod pocztowy
TELEFONCHAR(16)Telefon oddziału
UWAGIVARCHAR(40)Dodatkowe uwagi

WYPOZYCZENIA

Tabela faktów – każdy rekord to jedno wypożyczenie.

KolumnaTypOpis
NR_WYPOZYCZENIACHAR(8)Klucz główny
NR_KLIENTACHAR(8)FK → KLIENCI
NR_SAMOCHODUCHAR(6)FK → SAMOCHODY
NR_PRACOW_WYPCHAR(4)FK → PRACOWNICY (wydający auto)
NR_PRACOW_ODDCHAR(4)FK → PRACOWNICY (przyjmujący zwrot, może być NULL)
NR_MIEJSCA_WYPCHAR(6)FK → MIEJSCA (miejsce wydania)
NR_MIEJSCA_ODDCHAR(6)FK → MIEJSCA (miejsce oddania, może być NULL)
DATA_WYPDATEData wypożyczenia
DATA_ODDDATEData oddania (NULL = nie oddano)
KAUCJADECIMAL(8,2)Kaucja (może być NULL)
CENA_JEDNDECIMAL(8,2)Cena jednostkowa za dobę

Relacje w bazie

Tabela nadrzędnaTabela podrzędnaKolumna łączącaTyp relacji
KLIENCIWYPOZYCZENIANR_KLIENTA1:M
SAMOCHODYWYPOZYCZENIANR_SAMOCHODU1:M
PRACOWNICYWYPOZYCZENIANR_PRACOW_WYP1:M
PRACOWNICYWYPOZYCZENIANR_PRACOW_ODD1:M
MIEJSCAWYPOZYCZENIANR_MIEJSCA_WYP1:M
MIEJSCAWYPOZYCZENIANR_MIEJSCA_ODD1:M
MIEJSCAPRACOWNICYNR_MIEJSCA1:M

Zadania projektowe

Poziom podstawowy

  1. Wyświetl wszystkich klientów prywatnych (bez firmy).
  2. Wyświetl samochody, które nie były nigdy wypożyczone.
  3. Wyświetl klientów, którzy aktualnie mają wypożyczony samochód (brak daty oddania).

Poziom średni

  1. Oblicz koszt każdego wypożyczenia: (data_odd - data_wyp) * cena_jedn.
  2. Który klient wydał łącznie najwięcej na wypożyczenia?
  3. Wyświetl ranking samochodów wg liczby wypożyczeń.

Poziom zaawansowany

  1. Wyświetl pracowników, którzy obsłużyli więcej niż 3 wypożyczenia.
  2. Znajdź klientów, którzy wypożyczali samochody w więcej niż jednym mieście.
  3. Wyświetl samochody, których łączny przebieg w wypożyczeniach jest nieznany (nie mamy dat oddania).
Wskazówki do zadań projektowych
-- 1. Klienci prywatni
SELECT IMIE, NAZWISKO FROM KLIENCI WHERE FIRMA IS NULL;

-- 2. Samochody nigdy nie wypożyczone (LEFT JOIN + IS NULL)
SELECT s.MARKA, s.TYP
FROM SAMOCHODY s
LEFT JOIN WYPOZYCZENIA w ON s.NR_SAMOCHODU = w.NR_SAMOCHODU
WHERE w.NR_WYPOZYCZENIA IS NULL;

-- 3. Aktualnie wypożyczone (brak daty oddania)
SELECT k.IMIE, k.NAZWISKO, s.MARKA, s.TYP, w.DATA_WYP
FROM KLIENCI k
JOIN WYPOZYCZENIA w ON k.NR_KLIENTA = w.NR_KLIENTA
JOIN SAMOCHODY s ON w.NR_SAMOCHODU = s.NR_SAMOCHODU
WHERE w.DATA_ODD IS NULL;

-- 4. Koszt wypożyczenia
SELECT NR_WYPOZYCZENIA,
DATEDIFF(DATA_ODD, DATA_WYP) AS DNI,
CENA_JEDN,
DATEDIFF(DATA_ODD, DATA_WYP) * CENA_JEDN AS KOSZT
FROM WYPOZYCZENIA
WHERE DATA_ODD IS NOT NULL;

-- 7. Pracownicy z > 3 wypożyczeniami
SELECT p.IMIE, p.NAZWISKO, COUNT(*) AS LICZBA
FROM PRACOWNICY p
JOIN WYPOZYCZENIA w ON p.NR_PRACOWNIKA = w.NR_PRACOW_WYP
GROUP BY p.NR_PRACOWNIKA, p.IMIE, p.NAZWISKO
HAVING COUNT(*) > 3;

Poprzedni moduł: Funkcje agregujące Wróć do: Spis treści