Vaše údaje sú dobré len vtedy, ak im môžete dôverovať. Použite obmedzenia databázy, aby ste sa uistili, že je to presné, spoľahlivé a nenarúša váš dátový model.

Kľúčové informácie

  • Použite obmedzenia SQL na udržanie integrity údajov a zabezpečenie jednotnosti vo vašej databáze. Obmedzenie NOT NULL núti stĺpce odmietnuť hodnoty NULL.
  • Implementujte obmedzenia primárneho kľúča, aby ste zabezpečili jedinečnosť hodnôt v stĺpci alebo skupine stĺpcov. Tým sa zabráni duplicitným záznamom v databázovej tabuľke.
  • Obmedzenia cudzích kľúčov vytvárajú vzťahy medzi tabuľkami a zabraňujú činnostiam, ktoré by zničili prepojenia medzi nimi. Zabezpečujú, že záznam v podradenej tabuľke odkazuje na nadradenú tabuľku.

Databáza je nevyhnutná pre mnohé aplikácie, ale môže sa zamotať, ak nemáte pokyny na ukladanie a spracovanie údajov.

Obmedzenia SQL špecifikujú pravidlá pre ukladanie údajov do tabuľky. Keď nastavíte obmedzenia, databáza vyhodí chybu, ak sa pokúsite uložiť údaje, ktoré porušujú tieto pravidlá. Obmedzenia pomáhajú udržiavať integritu údajov a zabezpečujú jednotnosť vo vašej databáze.

instagram viewer

Existuje niekoľko typov obmedzení SQL, ktoré môžete použiť; tu sú niektoré z najužitočnejších.

1. NOT NULL Obmedzenie

Stĺpce databázy štandardne akceptujú údaje s hodnotami NULL. NULL v podstate znamená, že neexistuje žiadna hodnota. Obmedzenie NOT NULL núti stĺpec zamietnuť hodnoty NULL.

Toto obmedzenie zaisťuje, že každý stĺpec musí obsahovať hodnotu. Do databázy nemôžete pridať záznam bez zadania údajov pre žiadne stĺpce s obmedzením NOT NULL.

Vezmite si príklad z a zákazníkov tabuľky. Existuje niekoľko potrebných podrobností o každom zákazníkovi, ktoré chcete zaznamenať, napríklad jeho meno. Pridajte obmedzenie NOT NULL do povinných polí, aby ste zabezpečili, že zákazníci poskytnú tieto informácie.

Tu je príklad, ktorý ukazuje, ako môžete použiť obmedzenie NOT NULL v a PostgreSQL databázu:

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

Ak sa pokúsite vložiť záznam zákazníka bez Vek pole, databáza to prijme bez chýb:

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

Ak sa však pokúsite vložiť záznam bez Krstné meno pole, databáza ho odmietne s chybovým hlásením:

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

2. Obmedzenie PRIMÁRNY KĽÚČ

KEY je jedinečný atribút nastavený pre stĺpec alebo pole, ktorý identifikuje n-ticu tabuľky (alebo záznam) v databázových systémoch. Obmedzenie PRIMARY KEY zaisťuje jedinečnosť hodnôt v stĺpci alebo skupine stĺpcov. Funguje ako jedinečný identifikátor v riadku, ktorý zabraňuje duplicitným záznamom v databázovej tabuľke.

Primárne kľúče obsahujú jedinečné hodnoty a nemôžu obsahovať hodnoty NULL. Každý SQL databázová tabuľka musí mať iba jeden primárny kľúč. PRIMÁRNY KĽÚČ môže mať jeden alebo viacero stĺpcov.

Napríklad vytvárate databázu záznamov zákazníkov. Každý zákazník musí zadať svoje identifikačné čísla inak ako ostatní. Môžete použiť obmedzenie primárneho kľúča, aby ste sa uistili, že žiadny z vašich zákazníkov nebude mať rovnaké identifikačné číslo.

Nasledujúci kód ukazuje, ako môžete zaviesť obmedzenie primárneho kľúča v databáze MySQL:

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

Databáza nebude akceptovať túto hodnotu, ak používateľ zadá iný záznam s podobným ID. Namiesto toho vyvolá chybu označujúcu duplicitu. Používateľ sa pokúsi vložiť dva záznamy s rovnakým ID v nasledujúcom príklade:

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

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

V databáze sa zobrazí chybové hlásenie:

Duplicate entry '1' for key 'PRIMARY'

Ak však zmeníte ID druhého zákazníka, databáza záznam akceptuje. Primárny kľúč preto zaisťuje, že vo vašich zákazníckych záznamoch nebudú žiadne duplicitné ID.

3. ZAHRANIČNÝ KĽÚČ Obmedzenie

Cudzie kľúče vytvoriť vzťahy medzi dvoma tabuľkami. Cudzí kľúč môžete pridať do poľa/stĺpca v jednej tabuľke, ktorý odkazuje na primárny kľúč v inej tabuľke.

Tabuľka s primárnym kľúčom je nadradená tabuľka, zatiaľ čo tabuľka s cudzím kľúčom je podradená tabuľka. Záznam potom nemôže existovať v podradenej tabuľke bez odkazu na nadradenú tabuľku.

Obmedzenie cudzieho kľúča zabraňuje akciám, ktoré by zničili prepojenia medzi tabuľkami. Napríklad nemôžete POKLES jednu tabuľku, ak je prepojená s inou pomocou cudzieho kľúča. Budete musieť zahodiť oba stoly naraz.

Na rozdiel od primárneho kľúča môžete duplikovať cudzí kľúč a mať viac ako jeden v jednej tabuľke. Hodnoty cudzieho kľúča môžu byť tiež NULOVÝ. V nasledujúcom príklade musíte použiť customer_id na vytvorenie objednávky.

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');

Ak sa pokúsite vytvoriť objednávku bez existujúcej customer_id, databáza zobrazuje chybové hlásenie:

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ÁTNE obmedzenie

Toto obmedzenie zaisťuje, že žiadne dva riadky nemôžu mať rovnaké hodnoty pre konkrétny stĺpec. Rovnako ako primárne kľúče, jedinečné obmedzenie zachováva integritu údajov a zabraňuje duplicitným záznamom. Ak pracujete so zle navrhnutou databázou bez obmedzenia UNIQUE, môže sa stať, že budete musieť nájsť a odstrániť duplikáty.

Na rozdiel od primárnych kľúčov môžete mať na jednej tabuľke veľa UNIKÁTNYCH obmedzení. Napríklad pri vytváraní a zákazníkov tabuľky, možno budete chcieť mať jedinečné ID a telefónne čísla. Ak chcete pridať takéto obmedzenie pomocou servera MySQL, použite túto syntax:

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

Ak do databázy vložíte záznamy s rovnakým mobilným číslom, zobrazí sa chybové hlásenie.

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é hlásenie bude vyzerať takto:

Duplicate entry '254000000' for key 'Mobile_No'

Toto UNIKÁTNE obmedzenie zaisťuje, že databáza nebude mať zákazníkov s rovnakými ID alebo mobilnými číslami.

5. CHECK Obmedzenie

Obmedzenie CHECK obmedzuje rozsah hodnôt vložený do stĺpca. Pridaním obmedzenia CHECK do stĺpca povolíte pre tento stĺpec iba špecifikované hodnoty. Vynucuje integritu údajov tým, že zabezpečuje, aby používateľ vložil do tabuľky iba platné údaje.

Obmedzenie CHECK musí vyhodnotiť hodnotu ako TRUE alebo UNKNOWN pre každý zadaný riadok alebo položku tabuľky. Ak je hodnota FALSE, databáza zobrazí chybové hlásenie.

Napríklad v tabuľke Zákazníci môžete chcieť obsluhovať iba zákazníkov starších ako 18 rokov. Môžete pridať obmedzenie CHECK, aby ste sa uistili, že nebudete slúžiť neplnoletým zákazníkom. Obmedzenie môžete pridať do databázy PostgreSQL, ako je znázornené v nasledujúcom kóde:

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

Ak sa teraz pokúsite vložiť vek zákazníka pod 18 rokov:

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

Databáza zobrazí chybové hlásenie, ako je toto:

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

Ako pridať a odstrániť obmedzenia SQL z databáz

Obmedzenia SQL nie sú vytesané do kameňa. Pomocou príkazu ALTER TABLE môžete pridať alebo odstrániť obmedzenia na existujúce tabuľky. Príkaz ALTER vám umožňuje pracovať s obmedzeniami tak, aby vyhovovali vašim dátovým potrebám.

Existuje mnoho ďalších obmedzení SQL, ktoré sa môžete naučiť navrhnúť databázu podľa svojich predstáv. Môžete začať s tými, ktoré sú uvedené v tomto článku.