SQL
Tworzenie struktury bazy danych SQL (CREATE TABLE, constraints)
Definicja tabel, ograniczenia, automatyczne skrypty, ćwiczenia — INF.03
Teoria Definicja tabel i ograniczeń w SQL
SQL pozwala tworzyć elastyczne struktury baz danych. Najważniejsze:
- CREATE TABLE — tworzy nową tabelę
- PRIMARY KEY — jednoznaczny identyfikator rekordu
- FOREIGN KEY — powiązanie tabel (relacja)
- UNIQUE — wymusza unikalność wartości (np. email)
- NOT NULL — pole obowiązkowe
- DEFAULT — wartość domyślna, jeśli nie podano w INSERT
- CHECK — ogranicza zakres wartości (np. wiek >= 18)
Tworząc tabele z dobrze przemyślanymi constraints, zapewniasz spójność i bezpieczeństwo danych.
Ćwiczenie 1 Tworzenie tabeli z ograniczeniami
Stwórz tabelę
klienci z następującymi polami i ograniczeniami:
id INTjako klucz główny z autoinkrementacją.imie VARCHAR(30)obowiązkowe (NOT NULL).email VARCHAR(100)unikalny (UNIQUE).wiek INTz ograniczeniem, że wiek ≥ 18.
CREATE TABLE klienci ( id INT PRIMARY KEY AUTO_INCREMENT, imie VARCHAR(30) NOT NULL, email VARCHAR(100) UNIQUE, wiek INT CHECK (wiek >= 18) );
Ćwiczenie 2 Powiązanie tabel — klucz obcy
Stwórz tabelę
zamowienia, aby każdy rekord wskazywał klienta.
- Dodaj kolumnę
klient_id INTjako klucz obcy. - Ustaw
produkt VARCHAR(50)jako pole wymagane. - Ustaw domyślną wartość
ilosc = 1.
CREATE TABLE zamowienia ( id INT PRIMARY KEY AUTO_INCREMENT, klient_id INT, produkt VARCHAR(50) NOT NULL, ilosc INT DEFAULT 1, FOREIGN KEY (klient_id) REFERENCES klienci(id) );
Ćwiczenie 3 NOT NULL i wartości domyślne
Utwórz tabelę
logowania z datą i statusem domyślnym „OK”.
user_id INTmusi być podany (NOT NULL).- Data logowania domyślnie ustawiana na bieżącą datę.
- Status domyślnie „OK”, ale można go zmienić.
CREATE TABLE logowania ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, data DATE DEFAULT (CURRENT_DATE), status VARCHAR(10) DEFAULT 'OK' );
Ćwiczenie 4 CHECK i skrypt automatyzujący
Napisz skrypt tworzący tabelę
produkty tylko z pozytywną ceną oraz wymuszający unikalność kodu produktu.
- Użyj
CHECK (cena > 0)dla pola cena. - Wymuś unikalność kodu produktu (
UNIQUE). - Dodaj na początku
DROP TABLE IF EXISTS, aby skrypt dało się uruchomić wielokrotnie.
DROP TABLE IF EXISTS produkty; CREATE TABLE produkty ( id INT PRIMARY KEY AUTO_INCREMENT, kod VARCHAR(30) UNIQUE NOT NULL, nazwa VARCHAR(100), cena DECIMAL(10,2) CHECK (cena > 0) );
Ćwiczenie 5 Kompleksowy skrypt bazy z relacjami
Zaprogamuj pełny skrypt tworzący trzy powiązane tabele:
klasy, uczniowie, oceny.
- W tabeli
klasynazwa klasy musi być unikalna. - W tabeli
uczniowieumieść klucz obcy doklasy.id. - W tabeli
ocenyogranicz oceny do zakresu 2–5.
CREATE TABLE klasy ( id INT PRIMARY KEY AUTO_INCREMENT, nazwa VARCHAR(20) UNIQUE NOT NULL ); CREATE TABLE uczniowie ( id INT PRIMARY KEY AUTO_INCREMENT, imie VARCHAR(30) NOT NULL, nazwisko VARCHAR(50) NOT NULL, klasa_id INT, FOREIGN KEY (klasa_id) REFERENCES klasy(id) ); CREATE TABLE oceny ( id INT PRIMARY KEY AUTO_INCREMENT, uczen_id INT, przedmiot VARCHAR(30), ocena INT CHECK (ocena BETWEEN 2 AND 5), FOREIGN KEY (uczen_id) REFERENCES uczniowie(id) );
Zadanie INF.03 Projekt bazy „Wypożyczalnia”
Opis: Zaprojektuj strukturę bazy dla prostej wypożyczalni filmów:
klienci— dane klientów, e‑mail nie może się powtarzać.filmy— lista filmów z ceną wypożyczenia > 0.wypozyczenia— tabela łącząca klientów z filmami.
- Stwórz trzy tabele z odpowiednimi kluczami głównymi.
- Powiąż tabele
wypozyczeniazklienciifilmyprzez klucz obcy. - Wymuś unikalność e‑maila klienta.
- Wymuś, aby cena wypożyczenia filmu była dodatnia.
CREATE TABLE klienci ( id INT PRIMARY KEY AUTO_INCREMENT, imie VARCHAR(30) NOT NULL, nazwisko VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL ); CREATE TABLE filmy ( id INT PRIMARY KEY AUTO_INCREMENT, tytul VARCHAR(100) NOT NULL, cena_wypozyczenia DECIMAL(6,2) CHECK (cena_wypozyczenia > 0) ); CREATE TABLE wypozyczenia ( id INT PRIMARY KEY AUTO_INCREMENT, klient_id INT NOT NULL, film_id INT NOT NULL, data_wyp DATE DEFAULT (CURRENT_DATE), FOREIGN KEY (klient_id) REFERENCES klienci(id), FOREIGN KEY (film_id) REFERENCES filmy(id) );
Quiz Sprawdź wiedzę!
- Jaka jest rola klucza PRIMARY KEY?
- Jak wymusić unikalność wartości w kolumnie?
- Do czego służy ograniczenie CHECK?
- Jak powiązać ze sobą tabele w relacyjnej bazie danych?
- Jak ustawić wartość domyślną dla pola w tabeli?
- Zapewnia jednoznaczną identyfikację każdego rekordu w tabeli.
- Poprzez użycie
UNIQUElub ustawienie kolumny jakoPRIMARY KEY. - Ogranicza możliwe wartości w kolumnie, np. tylko liczby dodatnie lub określony zakres.
- Za pomocą
FOREIGN KEY, który odwołuje się do klucza głównego innej tabeli. - Przy pomocy klauzuli
DEFAULTw definicji kolumny.
Checklista Sprawdź umiejętności
- Tworzę tabele i nadaję ograniczenia: PRIMARY KEY, UNIQUE, NOT NULL, CHECK, DEFAULT, FOREIGN KEY.
- Projektuję relacje między tabelami (1‑w‑wiele) z użyciem kluczy obcych.
- Przygotowuję skrypty DROP + CREATE do wielokrotnego odtwarzania struktury.
- Potrafię zamienić opis słowny systemu na strukturę bazy SQL.
Materiały: INF.03 — Tworzenie struktury bazy SQL · Autor: Tomasz Puchała © 2025