Úvod do databázových vztahů

Databázový termín "relační" nebo "vztah" popisuje způsob připojení dat v tabulkách.

Nově příchozí do světa databází mají často těžké vidět rozdíl mezi databází a tabulkou. Zobrazují tabulky dat a rozpoznávají, že databáze umožňují uspořádat a dotazovat data novými způsoby, ale nedokážou pochopit význam vztahů mezi daty, které udávají název relační databáze.

Vztahy umožňují efektivní popis spojení mezi různými databázovými tabulkami. Tyto vztahy pak mohou být využívány k provádění výkonných dotazů přes tabulky, známých jako spojení.

Typy databázových vztahů

Existují tři různé typy databázových vztahů, z nichž každý je pojmenován podle počtu řádků tabulky, které mohou být ve vztahu zahrnuty. Každý z těchto tří typů vztahů existuje mezi dvěma tabulkami.

Samoreferenční vztahy: Zvláštní případ

Samoreferenční vztahy se vyskytují, když se jedná pouze o jednu tabulku. Jedním z obvyklých příkladů je tabulka Zaměstnanci, která obsahuje informace o nadřízeném zaměstnance. Každý nadřízený je také zaměstnanec a má svého nadřízeného. V tomto případě existuje vztah one-to-many self-referencing, protože každý zaměstnanec má jednoho supervizora, ale každý nadřízený může mít více než jednoho zaměstnance.

Vytváření vztahů se zahraničními klíči

Vytváříte vztahy mezi tabulkami zadáním cizího klíče . Toto tlačítko informuje relační databázi, jak jsou tabulky příbuzné. V mnoha případech sloupec v tabulce A obsahuje primární klíče, které jsou uvedeny v tabulce B.

Znovu zvážíme příklad tabulí učitelů a studentů. Tabulka Učitelé obsahuje pouze ID, název a sloupec kurzu:

Učitelé
InstructorID Jméno učitele Chod
001 John Doe Angličtina
002 Jane Schmoe Matematika

Tabulka studentů obsahuje sloupec ID, název a cizí klíč:

Studenti
StudentID Jméno studenta Teacher_FK
0200 Lowell Smith 001
0201 Brian Short 001
0202 Corky Mendez 002
0203 Monica Jonesová 001

Ve sloupci Teacher_FK v tabulce Students se odkazuje na hodnotu primárního klíče instruktora v tabulce Teachers.

Často návrháři databází použijí v názvu sloupce "PK" nebo "FK" pro snadnou identifikaci sloupce primárního nebo cizího klíče.

Všimněte si, že tyto dvě tabulky ilustrují vztah mezi učiteli a studenty.

Vztahy a referenční bezúhonnost

Jakmile přidáte do tabulky cizí klíč, můžete vytvořit vazbu databáze, která vynucuje referenční integritu mezi oběma tabulkami. To zajistí, že vztahy mezi tabulkami zůstanou konzistentní. Pokud má jedna tabulka cizí klíč v jiné tabulce, pojem referenční integrity uvádí, že jakákoli hodnota cizího klíče v tabulce B musí odkazovat na existující záznam v tabulce A.

Provádění vztahů

V závislosti na vaší databázi implementujete vztahy mezi tabulkami různými způsoby. Aplikace Microsoft Access poskytuje průvodce, který snadno umožňuje propojení tabulek a také vynucení referenční integrity.

Pokud píšete SQL přímo, nejprve vytvořte tabulku Učitelé a deklarujete sloupec ID jako primární klíč:

CREATE TABLE Učitelé (

Instruktor ID INT AUTO_INCREMENT PRIMARY KEY,
Teacher_Name VARCHAR (100),
Kurz VARCHAR (100)
);

Když vytvoříte tabulku studentů, deklarujete sloupec Teacher_FK jako cizí klíč odkazující na sloupec InstructorID v tabulce učitelů:

CREATE TABLE Studenti (
StudentID INT AUTO_INCREMENT PRIMARY KEY,
Student_Name VARCHAR (100), Teacher_FK INT,
ZAHRANIČNÍ KEY (Teacher_FK) REFERENCE Učitelé (InstructorID))
);

Použití vztahů k připojení tabulky

Jakmile vytvoříte jeden nebo více vztahů ve své databázi, můžete využít jejich sílu pomocí dotazů SQL JOIN pro kombinování informací z více tabulek. Nejběžnějším typem spojení je SQL INNER JOIN nebo jednoduchý spoj. Tento typ spojení vrací všechny záznamy, které splňují podmínky spojení z více tabulek. Například tato podmínka JOIN vrátí Student_Name, Teacher_Name a Course, kde cizí klíč v tabulce Students odpovídá primárnímu klíči v tabulce Teachers:

SELECT Students.Student_Name, Teachers.Teacher_Name, Teachers.Course
FROM Students
INNER JOIN Učitelé
ON Students.Teacher_FK = Teachers.InstructorID;

Toto prohlášení vytváří tabulku takto:

Vrácený tabulka z příkazu SQL Join Statement

Student_NameTeacher_NameCourseLowell SmithJohn DoeEnglishBrian ShortJohn DoeEnglishCorky MendezJane SchmoeMathMonica JonesJohn DoeEnglish