SQL – Analiza i modyfikacja struktury bazy danych: Ćwiczenia

1. Utwórz bazę danych

CREATE DATABASE sklep;
USE sklep;

2. Utwórz tabelę klientów

CREATE TABLE klienci (
  id INT AUTO_INCREMENT PRIMARY KEY,
  imie VARCHAR(50),
  nazwisko VARCHAR(50),
  email VARCHAR(100)
);

3. Utwórz tabelę produktów

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

4. Utwórz tabelę zamówień z relacjami

CREATE TABLE zamowienia (
  id INT AUTO_INCREMENT PRIMARY KEY,
  klient_id INT,
  produkt_id INT,
  data_zamowienia DATE,
  FOREIGN KEY (klient_id) REFERENCES klienci(id),
  FOREIGN KEY (produkt_id) REFERENCES produkty(id)
);

5. Wyświetl strukturę tabeli

DESCRIBE klienci;

6. Wyświetl relacje między tabelami

SELECT * FROM information_schema.KEY_COLUMN_USAGE 
WHERE TABLE_NAME = 'zamowienia' AND TABLE_SCHEMA = 'sklep';

7. Dodaj kolumnę "telefon" do klientów

ALTER TABLE klienci ADD telefon VARCHAR(15);

8. Dodaj tabelę "kategorie" i połącz z produktami

CREATE TABLE kategorie (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nazwa VARCHAR(50)
);

ALTER TABLE produkty ADD kategoria_id INT;
ALTER TABLE produkty 
ADD CONSTRAINT fk_kategoria 
FOREIGN KEY (kategoria_id) REFERENCES kategorie(id);

9. Usuń kolumnę "telefon" z klientów

ALTER TABLE klienci DROP COLUMN telefon;

10. Usuń tabelę "kategorie"

ALTER TABLE produkty DROP FOREIGN KEY fk_kategoria;
ALTER TABLE produkty DROP COLUMN kategoria_id;
DROP TABLE kategorie;

11. Zmień nazwę kolumny "imie" na "imie_klienta"

ALTER TABLE klienci CHANGE imie imie_klienta VARCHAR(50);

12. Zmień typ kolumny "cena" na FLOAT

ALTER TABLE produkty MODIFY cena FLOAT;

13. Zmień nazwę tabeli "produkty" na "asortyment"

RENAME TABLE produkty TO asortyment;

14. Przywróć nazwę tabeli na "produkty"

RENAME TABLE asortyment TO produkty;

15. Zaktualizuj email klienta o ID 1

UPDATE klienci SET email = 'jan@example.com' WHERE id = 1;

16. Dodaj kolumnę "status" do zamówień (z domyślną wartością)

ALTER TABLE zamowienia 
ADD status VARCHAR(20) DEFAULT 'oczekujące';

17. Zmień długość kolumny "nazwisko"

ALTER TABLE klienci MODIFY nazwisko VARCHAR(80);

18. Stwórz tabelę pracownicy

CREATE TABLE pracownicy (
  id INT AUTO_INCREMENT PRIMARY KEY,
  imie VARCHAR(50),
  stanowisko VARCHAR(50),
  pensja DECIMAL(8,2)
);

19. Usuń tabelę "pracownicy"

DROP TABLE pracownicy;

20. Dodaj unikalność do kolumny "email"

ALTER TABLE klienci ADD UNIQUE (email);

21. Dodaj indeks do kolumny "data_zamowienia"

CREATE INDEX idx_data ON zamowienia(data_zamowienia);

22. Usuń indeks "idx_data"

DROP INDEX idx_data ON zamowienia;

23. Zmień nazwę kolumny "nazwisko" na "nazwisko_klienta"

ALTER TABLE klienci CHANGE nazwisko nazwisko_klienta VARCHAR(80);

24. Zadanie końcowe: zaprojektuj nową tabelę "opinie"

Stwórz tabelę z ocenami klientów do produktów. Połącz ją relacjami z tabelami klienci i produkty.

CREATE TABLE opinie (
  id INT AUTO_INCREMENT PRIMARY KEY,
  klient_id INT,
  produkt_id INT,
  ocena INT,
  komentarz TEXT,
  FOREIGN KEY (klient_id) REFERENCES klienci(id),
  FOREIGN KEY (produkt_id) REFERENCES produkty(id)
);