Ćwiczenia SQL – Analiza i modyfikacja struktury bazy

1. Analizowanie struktury bazy danych

Polecenie: Wyświetl informacje o tabelach, kolumnach i kluczach w bazie projekty_it. Użyj poleceń systemowych oraz zapytań do metadanych MySQL.
Po co to robisz?
Na egzaminie bardzo często najpierw dostajesz gotową bazę, a dopiero potem zadania typu „rozbuduj ją”. Bez obejrzenia struktur (SHOW, DESCRIBE, INFORMATION_SCHEMA) łatwo coś popsuć.
-- Lista tabel w bazie
SHOW TABLES;

-- Szczegółowa struktura tabeli
DESCRIBE Projekty;

-- Klucze i relacje
SHOW CREATE TABLE Przydzialy;

-- Alternatywnie: zapytanie do INFORMATION_SCHEMA
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'projekty_it';
        
Efekt: Użytkownik widzi pełną strukturę bazy danych – nazwy tabel, kolumn, typy danych i klucze obce. To pozwala na analizę istniejącego projektu przed jego modyfikacją.

2. Rozbudowa struktury bazy – nowe tabele, pola i relacje

Polecenie: Dodaj tabelę Klienci i połącz ją relacją z tabelą Projekty. Rozszerz także tabelę Projekty o kolumnę id_klienta.
Jak o tym myśleć?
– Każdy projekt ma dokładnie jednego klienta → relacja 1:N (jeden klient, wiele projektów).
– Najpierw tworzysz tabelę „rodzica” (Klienci), dopiero potem dodajesz klucz obcy w tabeli Projekty.
CREATE TABLE Klienci (
    id_klienta INT AUTO_INCREMENT PRIMARY KEY,
    nazwa_firmy VARCHAR(80) NOT NULL,
    miasto VARCHAR(50),
    email VARCHAR(80)
);

ALTER TABLE Projekty
ADD COLUMN id_klienta INT,
ADD CONSTRAINT fk_klient
FOREIGN KEY (id_klienta) REFERENCES Klienci(id_klienta);
        
TabelaNowe poleRelacja
Projektyid_klientaKlienci(id_klienta)
Uwaga egzaminacyjna:
– Jeżeli najpierw dodasz FOREIGN KEY do nieistniejącej tabeli rodzica, skrypt się wywali.
– Literówka w nazwie tabeli lub kolumny w definicji klucza obcego powoduje błąd i utratę punktów w zadaniu.

3. Usuwanie elementów struktury bazy danych

Polecenie: Usuń kolumnę email z tabeli Klienci oraz całą tabelę Przydzialy. Zachowaj ostrożność – usuwanie jest nieodwracalne!
Najpierw zadaj sobie pytania:
– Czy kolumna email jest używana w aplikacji (np. w widokach, raportach)?
– Czy tabela Przydzialy nie ma powiązań jako klucz obcy w innych tabelach?
– Czy masz backup bazy lub pracujesz na kopii?
ALTER TABLE Klienci DROP COLUMN email;

DROP TABLE Przydzialy;
        
Efekt: Kolumna email została usunięta, a tabela Przydzialy całkowicie skasowana z bazy. Operacje tego typu powinny być poprzedzone kopią bezpieczeństwa!

4. Modyfikowanie struktury bazy oraz danych (ALTER TABLE)

Polecenie: Dodaj nową kolumnę status do tabeli Projekty i ustaw wartość domyślną „Aktywny”. Następnie zmień typ kolumny budzet na FLOAT.
Co potrafi ALTER TABLE?
To jedno polecenie służy do dodawania, usuwania i modyfikowania kolumn oraz ich typów i wartości domyślnych. Na INF.03 bardzo często sprawdzane jest rozumienie ADD, DROP COLUMN, MODIFY.
ALTER TABLE Projekty
ADD COLUMN status VARCHAR(20) DEFAULT 'Aktywny',
MODIFY budzet FLOAT;

-- Aktualizacja danych
UPDATE Projekty
SET status = 'Zakończony'
WHERE data_rozpoczecia < '2024-12-31';
        
Nazwa projektuBudżet (FLOAT)Status
System CRM120000Zakończony
Aplikacja mobilna80000Aktywny
Częsty błąd:
– Zmiana typu na zbyt „wąski” (np. z DECIMAL na TINYINT) powoduje utratę części danych.
– Pomylenie ALTER TABLE z UPDATE (ALTER zmienia strukturę, UPDATE – dane).