piątek,
SQL: Klucz obcy
Klucz obcy w bazie danych to klucz używany do łączenia dwóch tabel. Jest to kolumna (lub zestaw kolumn) w jednej tabeli, która odpowiada kluczowi głównemu lub unikalnej kolumnie w innej tabeli. Klucz obcy tworzy relację między dwiema tabelami i jest ważnym elementem w projektowaniu relacyjnych baz danych.
Zaprojektowanie tabel z kluczami obcymi wymaga zrozumienia relacji między danymi. W przykładzie użyto uniwersalnego podejścia, które będzie kompatybilne z większością systemów zarządzania bazami danych, takich jak MySQL, PostgreSQL, SQL Server, MariaDB itd. Dla demonstracji zaprojektowano dwie tabele: Klienci i Zamowienia. Tabela Klienci zawiera informacje o klientach, a tabela Zamowienia zawiera informacje o zamówieniach złożonych przez klientów. Klucz obcy w tabeli Zamowienia odnosi się do klucza głównego w tabeli Klienci, co pozwala na śledzenie, który klient złożył które zamówienie.
Tabela „Klienci”
CREATE TABLE Klienci (
KlientID INT AUTO_INCREMENT PRIMARY KEY,
Imie VARCHAR(50),
Nazwisko VARCHAR(50),
Email VARCHAR(100),
Adres VARCHAR(200)
-- Możesz dodać więcej kolumn zgodnie z potrzebami
);
W tej tabeli KlientID jest kluczem głównym, który jednoznacznie identyfikuje każdego klienta.
Tabela „Zamowienia”
CREATE TABLE Zamowienia (
ZamowienieID INT AUTO_INCREMENT PRIMARY KEY,
KlientID INT,
DataZamowienia DATE,
Kwota DECIMAL(10, 2),
Status VARCHAR(50),
CONSTRAINT fk_klient
FOREIGN KEY (KlientID)
REFERENCES Klienci(KlientID)
ON DELETE SET NULL
ON UPDATE CASCADE
);
W tej tabeli ZamowienieID jest kluczem głównym. KlientID jest kluczem obcym, który odnosi się do KlientID w tabeli Klienci. ON DELETE SET NULL oznacza, że jeśli rekord klienta zostanie usunięty, wartość KlientID w tabeli Zamowienia zostanie ustawiona na NULL. ON UPDATE CASCADE oznacza, że jeśli KlientID w tabeli Klienci zostanie zmieniony, odpowiadające mu wartości w tabeli Zamowienia zostaną automatycznie zaktualizowane. Ta struktura jest dość uniwersalna i powinna działać w różnych systemach zarządzania bazami danych bez konieczności dokonywania znaczących zmian.
Omówienie przykładu
CONSTRAINT fk_klient
CONSTRAINT– słowo kluczowe służące do określenia ograniczenia (constraint) w bazie danych. Ograniczenia są używane do określenia zasad dotyczących danych w tabeli. W tym przypadku tworzymy ograniczenie typu klucz obcy.- fk_klient` – nazwa, którą nadajemy naszemu ograniczeniu. „fk” zwykle oznacza „foreign key” (klucz obcy), a "klient" wskazuje na tabelę lub kontekst, do którego się odnosi. Nadanie nazwy ograniczeniu jest dobrym zwyczajem, ponieważ ułatwia identyfikację i zarządzanie ograniczeniami w przyszłości.
FOREIGN KEY (KlientID)
FOREIGN KEY– deklaracja, że określona kolumna (lub kolumny) w tabeli jest kluczem obcym. Klucz obcy to klucz używany do łączenia dwóch tabel.(KlientID)– określa kolumnę w bieżącej tabeli (Zamowienia), która będzie kluczem obcym. W tym przypadkuKlientIDw tabeliZamowieniaodnosi się doKlientIDw tabeliKlienci.
REFERENCES Klienci(KlientID)
REFERENCES– wskazuje, do której tabeli i kolumny klucz obcy się odnosi.Klienci(KlientID)– oznacza, że klucz obcyKlientIDw tabeliZamowieniaodnosi się do kolumnyKlientIDw tabeliKlienci. Jest to sposób na utworzenie relacji między tymi dwoma tabelami, gdzie każde zamówienie jest powiązane z konkretnym klientem.
ON DELETE SET NULL
ON DELETE– określa zachowanie klucza obcego, gdy odpowiadający mu rekord w tabeli nadrzędnej (tutajKlienci) jest usuwany.SET NULL– oznacza, że jeśli rekord klienta jest usuwany z tabeliKlienci, to wartośćKlientIDw powiązanych rekordach w tabeliZamowieniazostanie ustawiona na NULL. To zapobiega pozostawieniu "zawieszonych" odniesień, gdy źródłowy rekord jest usunięty.
ON UPDATE CASCADE
ON UPDATE– podobnie jakON DELETE, ale odnosi się do aktualizacji klucza głównego w tabeli nadrzędnej.CASCADE– oznacza, że jeśliKlientIDw tabeliKliencizostanie zmieniony (np. w wyniku aktualizacji), to wszystkie odpowiadające muKlientIDw tabeliZamowieniazostaną automatycznie zaktualizowane, aby odzwierciedlać tę zmianę. To utrzymuje spójność danych między tabelami.