Tworzenie kompletnej bazy danych
Zadanie: Zaprojektuj i stwórz kompletną bazę danych.
Projekt końcowy polega na zaprojektowaniu funkcjonalnej bazy danych dla konkretnej aplikacji lub systemu. Scenariusz może być dowolny, np. system do zarządzania rezerwacjami w hotelu, platforma e-commerce albo mała baza dla aplikacji fitness.
Wymagania:
-
Kompleksowa struktura:
- Powinna zawierać co najmniej 4-5 tabel.
- Każda tabela powinna mieć odpowiednie klucze główne i obce.
- Zastosuj różne typy danych (
INT
,VARCHAR
,DATE
itp.).
-
Związki:
Uwzględnij związki pomiędzy tabelami. W projekcie powinny wystąpić relacje, takie jak:- Relacja jeden-do-wielu (np. klienci i zamówienia w sklepie internetowym).
- Relacja wiele-do-wielu (np. kursy i studenci na uniwersytecie).
-
Przygotowanie przykładowych danych testowych:
- Wstaw co najmniej 5-10 rekordów do każdej tabeli.
Propozycja projektu: System zarządzania hotelem
Tabele:
- Pokoje: informacje o pokojach w hotelu.
- Goście: dane osobowe gości.
- Rezerwacje: zawiera szczegóły o każdej rezerwacji.
Tworzenie bazy:
CREATE DATABASE hotel;
USE hotel;
CREATE TABLE pokoje (
id INT AUTO_INCREMENT PRIMARY KEY,
numer_pokoju INT,
rodzaj VARCHAR(50),
cena_doba DECIMAL(10, 2)
);
CREATE TABLE goście (
id INT AUTO_INCREMENT PRIMARY KEY,
imię VARCHAR(50),
nazwisko VARCHAR(50),
telefon VARCHAR(15)
);
CREATE TABLE rezerwacje (
id INT AUTO_INCREMENT PRIMARY KEY,
id_pokoju INT,
id_gościa INT,
data_przyjazdu DATE,
data_wyjazdu DATE,
FOREIGN KEY (id_pokoju) REFERENCES pokoje(id),
FOREIGN KEY (id_gościa) REFERENCES goście(id)
);
-- Dodawanie danych testowych
INSERT INTO pokoje (numer_pokoju, rodzaj, cena_doba)
VALUES (101, 'Standard', 150.00), (102, 'Premium', 250.00);
INSERT INTO goście (imię, nazwisko, telefon)
VALUES ('Anna', 'Nowak', '123-456-789'), ('Jan', 'Kowalski', '987-654-321');
INSERT INTO rezerwacje (id_pokoju, id_gościa, data_przyjazdu, data_wyjazdu)
VALUES (1, 1, '2025-02-15', '2025-02-20');
Praktyka w optymalizacji zapytań i zarządzaniu danymi
Po stworzeniu bazy danych należy napisać optymalne zapytania do zarządzania danymi, w tym:
-
Wyszukiwanie danych:
Znajdź wszystkich gości z rezerwacjami na miesiąc luty:SELECT g.imię, g.nazwisko, r.data_przyjazdu, r.data_wyjazdu FROM goście g JOIN rezerwacje r ON g.id = r.id_gościa WHERE MONTH(r.data_przyjazdu) = 2;
-
Optymalizacja zapytań:
Zastosuj indeksy w tabelach z dużą ilością danych, aby przyspieszyć wyszukiwanie:CREATE INDEX idx_numer_pokoju ON pokoje(numer_pokoju);
-
Zapytania analityczne:
Oblicz przychód z wynajmu pokoi w lutym 2025:SELECT SUM(p.cena_doba * DATEDIFF(r.data_wyjazdu, r.data_przyjazdu)) AS przychód FROM rezerwacje r JOIN pokoje p ON r.id_pokoju = p.id WHERE MONTH(r.data_przyjazdu) = 2;