Wymuszanie integralności danych
Ograniczenia (Constraints) to reguły dodawane do definicji kolumn lub tabel (podczas CREATE TABLE lub później przez ALTER TABLE), które wymuszają integralność, poprawność i jakość danych. System zarządzania bazą danych (RDBMS) aktywnie blokuje operacje DML (INSERT, UPDATE), które próbują złamać te reguły. Są one znacznie potężniejsze niż walidacja na poziomie aplikacji, ponieważ działają na poziomie silnika bazy danych. Materiał opracowany na podstawie lekcji 22 .
PRIMARY KEY
PRIMARY KEY — definiowanie klucza głównego (na poziomie tabeli/kolumny). Jak omówiono w Lekcji 13, klucz główny jednoznacznie identyfikuje wiersz. Definiując go, automatycznie wymuszamy zasady UNIQUE i NOT NULL na danej kolumnie.
Składnia (na poziomie kolumny): ID_Ucznia INT PRIMARY KEY
FOREIGN KEY
FOREIGN KEY — definiowanie relacji (na poziomie tabeli/kolumny). Wymusza integralność referencyjną (Lekcja 13) – gwarantuje, że wartość w tej kolumnie musi istnieć jako PK w tabeli, do której się odwołujemy.
Składnia (na poziomie kolumny): ID_Klasy INT FOREIGN KEY REFERENCES Klasy(ID_Klasy)
UNIQUE
UNIQUE — zapewnienie unikalności wartości (np. adres e-mail).
- Podobne do PRIMARY KEY, ale z dwiema różnicami:
- Można mieć wiele kolumn UNIQUE w jednej tabeli (tylko jeden PRIMARY KEY).
- Zazwyczaj pozwala na przechowanie jednej wartości
NULL(ponieważNULLnie jest równeNULL).
Składnia: Email VARCHAR(100) UNIQUE (Gwarantuje, że ten sam e-mail nie zostanie wpisany dwa razy).
NOT NULL
NOT NULL — kolumna nie może być pusta. Najprostsze ograniczenie. Wymusza, aby kolumna zawsze miała wartość (nie może przyjąć NULL). Kluczowe dla pól obowiązkowych, jak Nazwisko.
Składnia: Nazwisko VARCHAR(100) NOT NULL
CHECK
CHECK — prosty warunek walidacji (np. Wiek >= 18). Umożliwia zdefiniowanie niestandardowej, prostej reguły walidacyjnej dla kolumny. Baza odrzuci INSERT lub UPDATE, jeśli warunek nie będzie spełniony.
Składnia: Wiek INT CHECK (Wiek >= 18) (Baza odrzuci próbę wstawienia osoby młodszej niż 18 lat).
Przykład CREATE TABLE łączący wszystkie ograniczenia
CREATE TABLE Uczniowie (
ID_Ucznia INT PRIMARY KEY,
Imie VARCHAR(100) NOT NULL,
Nazwisko VARCHAR(100) NOT NULL,
Email VARCHAR(150) UNIQUE,
Srednia DECIMAL(4, 2) CHECK (Srednia >= 1.0 AND Srednia <= 6.0),
ID_Klasy INT FOREIGN KEY REFERENCES Klasy(ID_Klasy)
);
Ta tabela ma teraz solidne fundamenty i będzie aktywnie bronić się przed "śmieciowymi" danymi.