Relacja jest ustanawiana między dwiema tabelami bazy danych, gdy jedna tabela używa klucza obcego, który odwołuje się do klucza podstawowego innej tabeli. Jest to podstawowa koncepcja terminu relacyjna baza danych.
Jak działa klucz obcy w celu nawiązania relacji
Klucz podstawowy jednoznacznie identyfikuje każdy rekord w tabeli. Jest to typ klucza kandydującego, który zwykle jest pierwszą kolumną w tabeli i może być automatycznie generowany przez bazę danych, aby zapewnić jego unikalność. Klucz obcy to kolejny klucz kandydujący (nie klucz podstawowy) używany do łączenia rekordu z danymi w innej tabeli.
Rozważmy na przykład te dwie tabele, które określają, który nauczyciel prowadzi dany kurs. Tutaj kluczem podstawowym tabeli Courses jest Course_ID. Jego klucz obcy to Teacher_ID:
ID_kursu | Nazwa_kursu | ID_nauczyciela |
---|---|---|
Kurs_001 | Biologia | Nauczyciel_001 |
Kurs_002 | Matematyka | Nauczyciel_002 |
Kurs_003 | Angielski | Nauczyciel_003 |
Widać, że klucz obcy w Kursach pasuje do klucza podstawowego w Nauczyciele:
ID_nauczyciela | Nazwa_nauczyciela |
---|---|
Nauczyciel_001 | Carmen |
Nauczyciel_002 | Weronika |
Nauczyciel_003 | Jorge |
Możemy powiedzieć, że klucz obcy Teacher_ID pomógł ustanowić relację między tabelami Kursy i Nauczyciele.
Rodzaje relacji z bazami danych
Używając kluczy obcych lub innych kluczy kandydujących, możesz zaimplementować trzy typy relacji między tabelami:
Jeden na jeden
Ten typ relacji umożliwia tylko jeden rekord po każdej stronie relacji. Klucz podstawowy odnosi się tylko do jednego rekordu (lub żadnego) w innej tabeli. Na przykład w małżeństwie każdy małżonek ma tylko jednego małżonka. Ten rodzaj relacji można zaimplementować w pojedynczej tabeli i dlatego nie używa się klucza obcego.
Jeden do wielu
Relacja jeden-do-wielu umożliwia powiązanie pojedynczego rekordu w jednej tabeli z wieloma rekordami w innej tabeli. Rozważ firmę z bazą danych zawierającą tabele Customers i Orders.
Pojedynczy klient może kupić wiele zamówień, ale jedno zamówienie nie może być połączone z wieloma klientami. Dlatego tabela Orders zawierałaby klucz obcy, który pasowałby do klucza podstawowego tabeli Customers, podczas gdy tabela Customers nie zawierałaby klucza obcego wskazującego na tabelę Orders.
Wiele-do-wielu
Jest to złożona relacja, w której wiele rekordów w tabeli może być połączonych z wieloma rekordami w innej tabeli. Na przykład nasza firma prawdopodobnie potrzebuje tabel Klienci i Zamówienia, a także prawdopodobnie potrzebuje tabeli Produkty.
Ponownie relacja między tabelami Klienci i Zamówienia jest typu jeden-do-wielu, ale należy wziąć pod uwagę relację między tabelą Zamówienia i Produkty. Zamówienie może zawierać wiele produktów, a produkt może być połączony z wieloma zamówieniami, ponieważ kilku klientów może złożyć zamówienie zawierające niektóre z tych samych produktów. Ten rodzaj relacji wymaga co najmniej trzech tabel.
Dlaczego relacje z bazami danych są ważne?
Ustanowienie spójnych relacji między tabelami bazy danych pomaga zapewnić integralność danych, przyczyniając się do normalizacji bazy danych. Na przykład, co by było, gdybyśmy nie połączyli żadnych tabel za pomocą klucza obcego, a zamiast tego połączyli dane w tabelach Kursy i Nauczyciele, w następujący sposób:
ID_nauczyciela | Nazwa_nauczyciela | Kurs |
---|---|---|
Nauczyciel_001 | Carmen | Biologia, matematyka |
Nauczyciel_002 | Weronika | Matematyka |
Nauczyciel_003 | Jorge | Angielski |
Ten projekt jest nieelastyczny i narusza pierwszą zasadę normalizacji bazy danych, First Normal Form, która stanowi, że każda komórka tabeli powinna zawierać pojedynczy, dyskretny fragment danych.
A może zdecydowaliśmy się dodać drugi rekord dla Carmen, aby wymusić 1NF:
ID_nauczyciela | Nazwa_nauczyciela | Kurs |
---|---|---|
Nauczyciel_001 | Carmen | Biologia |
Nauczyciel_001 | Carmen | Matematyka |
Nauczyciel_002 | Weronika | Matematyka |
Nauczyciel_003 | Jorge | Angielski |
To wciąż słaby projekt, wprowadzający niepotrzebne powielanie i tak zwane anomalie wstawiania danych, co oznacza, że może przyczynić się do niespójnych danych. Na przykład, jeśli nauczyciel ma wiele rekordów, co jeśli niektóre dane wymagają edycji, ale osoba wykonująca edycję danych nie zdaje sobie sprawy, że istnieje wiele rekordów? Tabela zawierałaby wówczas różne dane dla tej samej osoby, bez żadnego jasnego sposobu ich identyfikacji lub uniknięcia.
Podzielenie tej tabeli na dwie tabele, Nauczyciele i Kursy, tworzy właściwą relację między danymi, a tym samym pomaga zapewnić spójność i dokładność danych.