Postgres cizí klíč omezení Tutorial

Úvod

pokud pracujete s daty v PostgreSQL, je důležité vědět, jak používat cizí klíče. Cizí klíč je specifický typ omezení SQL, který je navržen tak, aby udržoval referenční integritu mezi dvěma tabulkami. Jednoduše řečeno, cizí klíč je sloupec nebo sada sloupců, která vytváří spojení mezi daty ve dvou tabulkách. Cizí klíč pro jednu tabulku odkazuje na primární klíč pro druhou tabulku, čímž se vytvoří vztah mezi tabulkami. V tomto článku si vysvětlíme, jak vytvořit Postgres cizí klíč a podívat se na některé příklady jeho použití.

předpoklady

jak budeme pokračovat v tomto tutoriálu, budeme pracovat s tabulkami, které budou mít vztah cizího klíče, takže se budete muset ujistit, že jsou nainstalovány jak Postgres, tak jeho psql rozhraní příkazového řádku. Budete také muset mít dvě tabulky, které sdílejí toto omezení pro jeden z jejich příslušných sloupců.

ujistěte se, že máte přístup k psql

pomocí příkazu psql -V ověřte, zda jsou psql a Postgres nainstalovány a fungují správně. Použijte příkaz psql sám pro připojení k Postgres a vstup do rozhraní příkazového řádku.

Poznámka: Pokud se zobrazí chyba se zprávou psql: FATAL: role "linux" does not exist, Postgres se pravděpodobně pokouší použít uživatelské jméno vašeho systému pro připojení k psql. Chcete-li to napravit, použijte příkaz sudo -u postgres -i pro přepnutí uživatelského jména na postgres a zkuste znovu přistupovat k psql.

 Screenshot verze psql a role "linux" neexistuje chyba pro Postgres

Vytvořte tabulky pro cizí klíč

první věc, kterou uděláme, je vytvořit databázi pomocí rozhraní příkazového řádku psql:

můžeme vytvořit naši databázi PostgreSQL pomocí základní syntaxe příkazu zobrazené níže:

1
vytvořit databázi db_name;

zde je příklad:

1
vytvořit databázi testdb;

můžeme také vytvořit tabulku, která slouží jako“ mateřská “ tabulka nebo tabulka, která má vztah k jiným tabulkám. Použili bychom základní syntaxi uvedenou níže:

1
vytvořit tabulku NÁZEV_STRÁNKY (NÁZEV_STRÁNKY + DATA_TYPE + omezení )

pro účely tohoto tutoriálu vytvoříme tabulku s názvem price s primárním klíčem id:

1
vytvoření tabulky cena (id int primární klíč, cena reálná);

v další části vytvoříme další tabulku, která bude mít vztah cizího klíče ke sloupci id tabulky cen.

použití omezení cizího klíče

jak jsme již zmínili, omezení FOREIGN KEY odkazuje na primární klíč v jiné tabulce. V tabulce můžeme mít více cizích klíčů; každý klíč bude záviset na jeho vztahu k jiné tabulce.

Chcete-li vytvořit tabulku s omezením FOREIGN KEY, musíte odkazovat na druhou tabulku. Podívejme se na následující příklad:

1
2
3
4
5
vytvořit tabulku cars (
car_id int NOT NULL,
cena int Reference Cena (id), odpovídající tomu
název textu,
text značky);

Všimněte si, že tabulka cars obsahuje cizí klíč, který odkazuje na tabulku price. To znamená, že hodnoty sloupců cizího klíče v tabulce“ dítě „pocházejí z tabulky“ matka “ jako reference.

Chcete-li zobrazit podrobnosti tabulky, použijte příkaz \d následovaný názvem tabulky:

1
2
3
4
5
6
7
8
9
tabulka “ veřejnost.cars „
sloupec / Typ | řazení / NULLABLE / DEFAULT
——–+———+———–+———-+———
car_id / INTEGER / / NOT NULL /
cena / INTEGER | / /
název / text | / /
značka / text / / /
omezení cizího klíče:
„cars_price_fkey“ cizí klíč (cena) Reference Cena (id)

omezení cizího klíče bychom mohli také deklarovat explicitním použitím klíčových slov FOREIGN KEY a při deklaraci názvu sloupce v našem příkazu CREATE TABLE :

1
2
3
4
5
6
7
8
vytvořit tabulku cars (
car_id NOT NULL,
cena INT,
název TEXT,
značka TEXT
primární klíč (car_id),
cizí klíč (cena) Reference Cena (id);
);

v tuto chvíli se možná divíte, co by se stalo, kdybyste omylem smazali záznam v tabulce cars – došlo by k chybě— Postgres vám ve skutečnosti nedovolí smazat záznam, pokud nebude odstraněn také záznam jiné odpovídající tabulky.

můžete použít jednu z následujících možností– NO ACTION,DELETE CASCADE a DELETE RESTRICT— k rozhodnutí, co se stane, když bude odstraněn záznam, který je propojen s jinou tabulkou.

následující příklad ukazuje, že omezení DELETE RESTRICT je aplikováno na tabulku:

1
2
3
4
5
vytvořit tabulku cars (
car_id int NOT NULL,
cena int Reference Cena (id) při odstranění omezení,
název textu,
text značky);

poznámka: toto omezení vám nedovolí odstranit řádek, pokud nebudou odstraněny všechny propojené hodnoty nebo pokud nebude odstraněno samotné omezení.

následující příklad ukazuje omezení DELETE CASCADE v akci:

1
2
3
4
5
vytvořit tabulku cars (
car_id int NOT NULL,
cena int Reference Cena (id) na DELETE CASCADE,
název TEXT,
značka TEXT);

poznámka: omezení DELETE CASCADE vám umožní odstranit Nadřazený záznam, ale je důležité si uvědomit, že jeho odpovídající podřízený záznam bude také smazán. Kaskádové mazání se nedoporučuje pro použití ve výrobě, protože je příliš snadné neúmyslně odstranit řádky v jiné tabulce.

volba NO ACTION je výchozí akce v PostgreSQL, která zobrazuje chybu, pokud není zadáno jedno ze dvou výše uvedených omezení.

závěr

v relační databázi je běžné, že data v různých tabulkách mají určité vazby nebo vztahy. Omezení cizího klíče poskytuje účinný způsob, jak zajistit referenční integritu těchto dat a zajistit, aby data nebyla odstraněna z jedné tabulky, pokud existuje vztah s daty v jiné tabulce. Tento tutoriál poskytl přehled o tom, jak funguje cizí klíč Postgres, a nabídl příklady, jak toto omezení používat různými způsoby. S těmito příklady použít jako vodítko, budete moci implementovat cizí klíčové vztahy ve své vlastní databázi PostgreSQL.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.