Wyobraź sobie, że baza danych to ogromna biblioteka.
Każda książka ma swój numer, każda karta czytelnika swoje dane, a każda wypożyczona książka musi być przypisana do konkretnego czytelnika.
Żeby w tej bibliotece panował porządek, ktoś musi pilnować, by:
- nie było dwóch książek o tym samym numerze,
- nie dało się wypożyczyć książki, której nie ma,
- nie dodano czytelnika bez nazwiska,
- i nie można było usunąć klienta, który ma jeszcze wypożyczone książki.
Tym kimś w SQL są właśnie więzy integralności (ang. constraints).
1. Czym są więzy integralności?
Więzy integralności (constraints) to zasady, które określają, co wolno, a czego nie wolno wprowadzać do bazy danych.
Pomagają utrzymać spójność (integralność) danych, czyli pewność, że wszystko do siebie pasuje.
Przykłady:
- nie można mieć dwóch klientów o tym samym identyfikatorze,
- nie można mieć zamówienia bez klienta,
- cena produktu nie może być ujemna.
2. Rodzaje więzów integralności
| Nazwa więzu | Działanie |
|---|---|
| PRIMARY KEY | Unikalny identyfikator rekordu |
| FOREIGN KEY | Powiązanie między tabelami |
| UNIQUE | Wartość w kolumnie nie może się powtarzać |
| NOT NULL | Kolumna nie może być pusta |
| CHECK | Sprawdza warunek logiczny (np. cena > 0) |
| DEFAULT | Ustawia wartość domyślną, jeśli nie podano innej |
3. Przykłady z bazy sklep_muzyczny
a) PRIMARY KEY – klucz główny
Każdy rekord musi mieć unikalny identyfikator.
Najczęściej jest to kolumna id lub id_tabeli.
CREATE TABLE Klienci (
id_klienta INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50),
nazwisko VARCHAR(50),
email VARCHAR(100)
);
PRIMARY KEY sprawia, że:
- każda wartość
id_klientajest unikalna, - nie może być pusta,
- baza sama nie pozwoli na duplikaty.
b) FOREIGN KEY – klucz obcy
Używany do tworzenia relacji między tabelami (np. zamówienie musi należeć do istniejącego klienta).
CREATE TABLE Zamowienia (
id_zamowienia INT AUTO_INCREMENT PRIMARY KEY,
id_klienta INT,
id_produktu INT,
ilosc INT,
FOREIGN KEY (id_klienta) REFERENCES Klienci(id_klienta),
FOREIGN KEY (id_produktu) REFERENCES Produkty(id_produktu)
);
FOREIGN KEY pilnuje, żeby nie można było dodać zamówienia z nieistniejącym id_klienta lub id_produktu.
c) UNIQUE – brak powtórzeń
Zapewnia, że dana kolumna nie może mieć duplikatów.
CREATE TABLE Klienci (
id_klienta INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
Nie można wstawić dwóch klientów z tym samym adresem e-mail.
d) NOT NULL – brak pustych wartości
Wymaga, żeby dana kolumna zawsze miała wartość.
CREATE TABLE Produkty (
id_produktu INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(100) NOT NULL,
cena DECIMAL(10,2) NOT NULL
);
Produkt musi mieć nazwę i cenę – nie można dodać pustych wartości.
e) CHECK – sprawdzanie warunków
Pozwala ustawić reguły logiczne, które muszą być spełnione.
CREATE TABLE Produkty (
id_produktu INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(100) NOT NULL,
cena DECIMAL(10,2) CHECK (cena > 0),
kategoria VARCHAR(50)
);
Nie można wprowadzić produktu o cenie 0 lub mniejszej.
f) DEFAULT – wartość domyślna
Jeśli użytkownik nie poda wartości, baza wstawi domyślną.
CREATE TABLE Zamowienia (
id_zamowienia INT AUTO_INCREMENT PRIMARY KEY,
data_zamowienia DATE DEFAULT (CURRENT_DATE)
);
Jeśli przy dodawaniu zamówienia nie podasz daty, zostanie automatycznie wpisana dzisiejsza data.
4. Modyfikowanie więzów w istniejących tabelach
Dodanie nowego więzu
ALTER TABLE Produkty
ADD CONSTRAINT cena_dodatnia CHECK (cena > 0);
Usunięcie więzu
ALTER TABLE Produkty
DROP CONSTRAINT cena_dodatnia;
5. Co daje stosowanie więzów?
✅ Chroni przed błędami w danych
✅ Zapewnia logiczne powiązania między tabelami
✅ Ułatwia utrzymanie porządku i spójności w bazie
✅ Ogranicza błędy użytkowników – baza „odrzuca” niepoprawne dane
6. Przykład pełnej tabeli z więzami
CREATE TABLE Klienci (
id_klienta INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50) NOT NULL,
nazwisko VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
miasto VARCHAR(100) DEFAULT 'Działdowo'
);
CREATE TABLE Produkty (
id_produktu INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(100) NOT NULL,
cena DECIMAL(10,2) CHECK (cena > 0),
kategoria VARCHAR(50) NOT NULL
);
CREATE TABLE Zamowienia (
id_zamowienia INT AUTO_INCREMENT PRIMARY KEY,
id_klienta INT NOT NULL,
id_produktu INT NOT NULL,
ilosc INT CHECK (ilosc > 0),
data_zamowienia DATE DEFAULT (CURRENT_DATE),
FOREIGN KEY (id_klienta) REFERENCES Klienci(id_klienta),
FOREIGN KEY (id_produktu) REFERENCES Produkty(id_produktu)
);
7. Zadania praktyczne
Zadanie 1 – tworzenie tabeli z więzami
Utwórz tabelę Pracownicy z kolumnami:
id_pracownika– klucz główny,imie,nazwisko– wymagane (NOT NULL),email– unikalny,pensja– większa niż 0 (CHECK),stanowisko– z wartością domyślną „sprzedawca”.
Zadanie 2 – klucze obce
Utwórz tabele:
Dzialy(id_dzialu,nazwa)Pracownicy(id_pracownika,imie,id_dzialu)
Połącz je kluczem obcym tak, żeby każdy pracownik należał do istniejącego działu.
Zadanie 3 – testowanie więzów
- Spróbuj dodać pracownika bez imienia – co się stanie?
- Spróbuj dodać dwóch pracowników z tym samym e-mailem.
- Spróbuj dodać produkt z ceną 0.
- Spróbuj dodać zamówienie dla nieistniejącego klienta.
Zadanie 4 – modyfikacja tabel
- Do tabeli
Produktydodaj więzCHECK (ilosc > 0). - Do tabeli
Kliencidodaj kolumnęwiekz warunkiemCHECK (wiek >= 18).
8. Podsumowanie
| Więz | Działanie | Przykład |
|---|---|---|
| PRIMARY KEY | unikalny identyfikator | id_klienta |
| FOREIGN KEY | połączenie tabel | FOREIGN KEY (id_klienta) |
| UNIQUE | brak duplikatów | email UNIQUE |
| NOT NULL | brak pustych wartości | imie NOT NULL |
| CHECK | warunek logiczny | cena > 0 |
| DEFAULT | wartość domyślna | DEFAULT 'Działdowo' |
Więzy integralności to wewnętrzne zasady bezpieczeństwa bazy danych.
Dzięki nim baza „pilnuje się sama” – nie pozwala wprowadzić błędnych lub sprzecznych informacji.
To ważna część projektowania profesjonalnych baz danych i często pojawia się na egzaminach INF.03 / INF.04.

