Vaše data jsou dobrá pouze tehdy, když jim můžete věřit. Použijte databázová omezení, abyste zajistili, že je to přesné, spolehlivé a nenaruší váš datový model.

Klíčové věci

  • Použijte omezení SQL k zachování integrity dat a zajištění jednotnosti ve vaší databázi. Omezení NOT NULL nutí sloupce k odmítnutí hodnot NULL.
  • Implementujte omezení primárního klíče, abyste zajistili jedinečnost hodnot ve sloupci nebo sadě sloupců. Tím se zabrání duplicitním záznamům v databázové tabulce.
  • Omezení cizího klíče navazují vztahy mezi tabulkami a zabraňují akcím, které by zničily vazby mezi nimi. Zajišťují, že záznam v podřízené tabulce odkazuje na nadřazenou tabulku.

Databáze je nezbytná pro mnoho aplikací, ale pokud nemáte pokyny pro ukládání a zpracování dat, může to být zamotané.

Omezení SQL určují pravidla pro ukládání dat v tabulce. Když nastavíte omezení, databáze vyhodí chybu, pokud se pokusíte uložit data, která porušují tato pravidla. Omezení pomáhají udržovat integritu dat a zajišťují jednotnost ve vaší databázi.

instagram viewer

Existuje několik typů omezení SQL, které můžete použít; zde jsou některé z nejužitečnějších.

1. NOT NULL Omezení

Sloupce databáze ve výchozím nastavení přijímají data s hodnotami NULL. NULL v podstatě znamená, že žádná hodnota neexistuje. Omezení NOT NULL nutí sloupec k odmítnutí hodnot NULL.

Toto omezení zajišťuje, že každý sloupec musí obsahovat hodnotu. Nemůžete přidat záznam do databáze, aniž byste zadali data pro všechny sloupce s omezením NOT NULL.

Vezměte si příklad z a Zákazníci stůl. Existuje několik nezbytných podrobností o každém zákazníkovi, které chcete zaznamenat, například jeho jméno. Přidejte do povinných polí omezení NOT NULL, abyste zajistili, že zákazníci budou tyto informace poskytovat.

Zde je příklad ukazující, jak můžete použít omezení NOT NULL v a PostgreSQL databáze:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);

Pokud se pokusíte vložit záznam zákazníka bez Stáří pole, databáze jej přijme bez chyb:

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);

Pokud se však pokusíte vložit záznam bez Jméno pole, databáze jej odmítne s chybovou zprávou:

ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).

2. Omezení PRIMÁRNÍHO KLÍČE

KEY je jedinečný atribut nastavený pro sloupec nebo pole, který identifikuje n-tici tabulky (nebo záznam) v databázových systémech. Omezení PRIMARY KEY zajišťuje jedinečnost hodnot ve sloupci nebo sadě sloupců. Působí jako jedinečný identifikátor v řádku a zabraňuje duplicitním záznamům v databázové tabulce.

Primární klíče obsahují jedinečné hodnoty a nemohou obsahovat hodnoty NULL. Každý SQL databázová tabulka musí mít pouze jeden primární klíč. PRIMÁRNÍ KLÍČ může mít jeden nebo více sloupců.

Například vytváříte databázi záznamů zákazníků. Potřebujete, aby každý zákazník zadal svá identifikační čísla jinak než ostatní. Můžete použít omezení primárního klíče, abyste zajistili, že žádný z vašich zákazníků nebude mít stejné ID číslo.

Následující kód ukazuje, jak můžete zavést omezení primárního klíče v databázi MySQL:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);

Databáze tuto hodnotu nepřijme, pokud uživatel zadá jiný záznam s podobným ID. Místo toho vyvolá chybu označující duplicitu. Uživatel se pokusí vložit dva záznamy se stejným ID v následujícím příkladu:

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );

Databáze zobrazí chybovou zprávu:

Duplicate entry '1' for key 'PRIMARY'

Pokud ale změníte ID druhého zákazníka, databáze záznam přijme. Primární klíč tedy zajišťuje, že ve vašich zákaznických záznamech nebudou žádná duplicitní ID.

3. Omezení ZAHRANIČNÍHO KLÍČE

Cizí klíče vytvořit vztahy mezi dvěma tabulkami. Cizí klíč můžete přidat do pole/sloupce v jedné tabulce, která odkazuje na primární klíč v jiné tabulce.

Tabulka s primárním klíčem je nadřazená tabulka, zatímco tabulka s cizím klíčem je podřízená tabulka. Záznam pak nemůže existovat v podřízené tabulce bez odkazu na nadřazenou tabulku.

Omezení cizího klíče zabraňuje akcím, které by zničily propojení mezi tabulkami. Například nemůžete POKLES jednu tabulku, pokud je propojena s jinou pomocí cizího klíče. Budete muset zahodit oba stoly najednou.

Na rozdíl od primárního klíče můžete duplikovat cizí klíč a mít více než jeden v jedné tabulce. Hodnoty cizího klíče mohou být také NULA. V následujícím příkladu musíte použít zákaznické identifikační číslo vytvořit objednávku.

CREATETABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);

CREATETABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

INSERTINTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');

INSERTINTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');

Pokud se pokusíte vytvořit objednávku bez existující zákaznické identifikační číslo, databáze zobrazuje chybovou zprávu:

Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))

4. UNIKÁTNÍ omezení

Toto omezení zajišťuje, že žádné dva řádky nemohou mít stejné hodnoty pro určitý sloupec. Stejně jako primární klíče zachovává jedinečné omezení integritu dat a zabraňuje duplicitním záznamům. Pokud pracujete se špatně navrženou databází bez omezení UNIQUE, může se stát, že budete muset najít a odstranit duplikáty.

Na rozdíl od primárních klíčů můžete mít na jedné tabulce mnoho UNIKÁTNÍCH omezení. Například při vytváření a Zákazníci tabulky, možná budete chtít mít jedinečná ID a telefonní čísla. Chcete-li přidat takové omezení pomocí serveru MySQL, použijte tuto syntaxi:

CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

Pokud do databáze vložíte záznamy se stejným mobilním číslem, zobrazí se chybová zpráva.

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );

Chybová zpráva bude vypadat nějak takto:

Duplicate entry '254000000' for key 'Mobile_No'

Toto UNIKÁTNÍ omezení zajišťuje, že databáze nebude mít zákazníky se stejnými ID nebo mobilními čísly.

5. CHECK Omezení

Omezení CHECK omezuje rozsah hodnot vložený do sloupce. Přidání omezení CHECK na sloupec umožní pouze zadané hodnoty pro tento sloupec. Vynucuje integritu dat tím, že zajišťuje, aby uživatel do tabulky vkládal pouze platná data.

Omezení CHECK musí vyhodnotit hodnotu jako TRUE nebo UNKNOWN pro každý zadaný řádek nebo položku tabulky. Pokud je hodnota FALSE, databáze zobrazí chybovou zprávu.

Například v tabulce Zákazníci můžete chtít obsluhovat pouze zákazníky starší 18 let. Můžete přidat omezení CHECK, abyste zajistili, že nebudete sloužit nezletilým zákazníkům. Omezení můžete přidat do databáze PostgreSQL, jak je znázorněno v následujícím kódu:

CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

Pokud se nyní pokusíte vložit věk zákazníka nižší než 18 let:

INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );

Databáze zobrazí chybovou zprávu, jako je tato:

ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)

Jak přidat a odebrat omezení SQL z databází

Omezení SQL nejsou vytesána do kamene. Pomocí příkazu ALTER TABLE můžete přidat nebo odebrat omezení na existující tabulky. Příkaz ALTER vám umožňuje pracovat s omezeními, která vyhovují vašim datovým potřebám.

Existuje mnoho dalších omezení SQL, která se můžete naučit navrhnout databázi podle svých představ. Můžete začít s těmi, které jsou uvedeny v tomto článku.