Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

SQL: Klucz obcy

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: KlienciZamowienia. 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 przypadku KlientID w tabeli Zamowienia odnosi się do KlientID w tabeli Klienci.

REFERENCES Klienci(KlientID)

  • REFERENCES – wskazuje, do której tabeli i kolumny klucz obcy się odnosi.
  • Klienci(KlientID) – oznacza, że klucz obcy KlientID w tabeli Zamowienia odnosi się do kolumny KlientID w tabeli Klienci. 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 (tutaj Klienci) jest usuwany.
  • SET NULL – oznacza, że jeśli rekord klienta jest usuwany z tabeli Klienci, to wartość KlientID w powiązanych rekordach w tabeli Zamowienia zostanie ustawiona na NULL. To zapobiega pozostawieniu "zawieszonych" odniesień, gdy źródłowy rekord jest usunięty.

ON UPDATE CASCADE

  • ON UPDATE – podobnie jak ON DELETE, ale odnosi się do aktualizacji klucza głównego w tabeli nadrzędnej.
  • CASCADE – oznacza, że jeśli KlientID w tabeli Klienci zostanie zmieniony (np. w wyniku aktualizacji), to wszystkie odpowiadające mu KlientID w tabeli Zamowienia zostaną automatycznie zaktualizowane, aby odzwierciedlać tę zmianę. To utrzymuje spójność danych między tabelami.

Artykuł: Harmonogram egzaminów maturalnych

Harmonogram egzaminów maturalnych

Artykuł: Staże w Hiszpanii

Staże w Hiszpanii

Artykuł: Conformité Européenne

Conformité Européenne

Artykuł: Display Stream Compression

Display Stream Compression

Artykuł: High Dynamic Range

High Dynamic Range

Nasze technikum

Technik informatyk

Szkoły dla dorosłych

Nasza szkoła

Pełna oferta edukacyjna

Oferta szkoły