Klucze główne i obce (PRIMARY KEY, FOREIGN KEY) oraz relacje między tabelami
Klucze główne i obce to podstawowe pojęcia w relacyjnych bazach danych. Pomagają one uporządkować informacje oraz łączyć różne tabele, tworząc relacje między danymi i dbając o ich spójność. W tej sekcji omówimy, czym są klucze główne i obce oraz jak działają relacje między tabelami.
Klucz Główny (PRIMARY KEY)
Klucz główny to kolumna (lub zestaw kolumn) w tabeli, która jednoznacznie identyfikuje każdy wiersz. Każda tabela powinna mieć klucz główny, aby zapewnić unikalność danych i ułatwić ich odnajdywanie.
- Unikalność: Każda wartość w kolumnie będącej kluczem głównym musi być unikalna. Nie mogą występować dwa wiersze z tą samą wartością klucza głównego.
- Brak wartości NULL: Klucz główny nie może mieć wartości
NULL
. Każdy wiersz musi mieć wartość w tej kolumnie.
Przykład użycia:
W tym przykładzie kolumna id
jest kluczem głównym tabeli uczniowie
. Dzięki temu każdemu uczniowi przypisany jest unikalny identyfikator, który pozwala na jego jednoznaczną identyfikację.
CREATE TABLE ucznen (
id INT PRIMARY KEY AUTO_INCREMENT,
imie VARCHAR(50) NOT NULL,
nazwisko VARCHAR(50) NOT NULL
);
Klucz Obcy (FOREIGN KEY)
Klucz obcy to kolumna (lub zestaw kolumn) w jednej tabeli, która odnosi się do klucza głównego w innej tabeli. Klucze obce służą do tworzenia powiązań między tabelami, co pozwala połączyć dane z różnych tabel i zapewnić ich spójność.
- Zależność: Klucz obcy odnosi się do klucza głównego w innej tabeli, co umożliwia połączenie danych z dwóch różnych tabel.
- Spójność danych: Klucze obce pomagają utrzymać spójność danych, ponieważ nie można dodać wartości do kolumny będącej kluczem obcym, jeśli taka wartość nie istnieje w tabeli, do której się odnosi.
Przykład użycia:
W tym przykładzie tabela oceny
zawiera kolumny uczen_id
i przedmiot_id
, które są kluczami obcymi odnoszącymi się do kolumn id
w tabelach uczniowie
i przedmioty
. Dzięki temu każdej ocenie można przypisać ucznia oraz przedmiot, którego dotyczy.
CREATE TABLE ocena (
id INT PRIMARY KEY AUTO_INCREMENT,
ocena DECIMAL(3, 2),
uczen_id INT,
przedmiot_id INT,
FOREIGN KEY (uczen_id) REFERENCES uczen(id),
FOREIGN KEY (przedmiot_id) REFERENCES przedmiot(id)
);
Relacje Między Tabelami
Relacje między tabelami pozwalają na organizowanie danych w bazach danych. Istnieją trzy główne typy relacji:
Relacja Jeden do Jednego (1:1)
W relacji jeden do jednego każdemu rekordowi w jednej tabeli odpowiada dokładnie jeden rekord w innej tabeli. Takie relacje są mniej popularne, ale mogą być użyteczne, gdy chcemy podzielić dane na dwie tabele, na przykład z powodu bezpieczeństwa lub organizacji danych.
Przykład: Tabela dane_osobowe
może mieć relację jeden do jednego z tabelą adresy
, gdzie każdy uczeń ma tylko jeden adres.
CREATE TABLE dane_osobowe (
id INT PRIMARY KEY,
pesel CHAR(11) NOT NULL
);
CREATE TABLE adresy (
id INT PRIMARY KEY,
ulica VARCHAR(100),
miasto VARCHAR(100),
dane_osobowe_id INT UNIQUE,
FOREIGN KEY (dane_osobowe_id) REFERENCES dane_osobowe(id)
);
Relacja Jeden do Wielu (1:N)
Relacja jeden do wielu jest jedną z najczęściej spotykanych relacji. Każdemu rekordowi w jednej tabeli odpowiada wiele rekordów w innej tabeli. Na przykład jeden nauczyciel może prowadzić wiele przedmiotów.
Przykład:
W tym przykładzie jeden nauczyciel (nauczyciele
) może prowadzić wiele przedmiotów (przedmioty
). Kolumna nauczyciel_id
w tabeli przedmioty
odnosi się do id
w tabeli nauczyciele
.
CREATE TABLE nauczyciele (
id INT PRIMARY KEY,
imie VARCHAR(50),
nazwisko VARCHAR(50)
);
CREATE TABLE przedmioty (
id INT PRIMARY KEY,
nazwa VARCHAR(100),
nauczyciel_id INT,
FOREIGN KEY (nauczyciel_id) REFERENCES nauczyciele(id)
);
Relacja Wiele do Wielu (N:N)
Relacja wiele do wielu występuje, gdy wiele rekordów w jednej tabeli może być powiązanych z wieloma rekordami w innej tabeli. Aby odwzorować taką relację, zazwyczaj używa się tabeli pośredniczącej.
Przykład:
W tym przykładzie tabela uczniowie_przedmioty
jest tabelą pośredniczącą, która łączy tabele uczniowie
i przedmioty
. Dzięki temu jeden uczeń może być zapisany na wiele przedmiotów, a jeden przedmiot może być uczony przez wielu uczniów.
CREATE TABLE uczniowie_przedmioty (
uczen_id INT,
przedmiot_id INT,
PRIMARY KEY (uczen_id, przedmiot_id),
FOREIGN KEY (uczen_id) REFERENCES uczniowie(id),
FOREIGN KEY (przedmiot_id) REFERENCES przedmioty(id)
);
Testy przypięte do lekcji | |
---|---|
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się |