Teie andmed on head ainult siis, kui saate neid usaldada. Kasutage andmebaasi piiranguid tagamaks, et see on täpne, usaldusväärne ega rikuks teie andmemudelit.

Võtmed kaasavõtmiseks

  • Andmete terviklikkuse säilitamiseks ja andmebaasi ühtsuse tagamiseks kasutage SQL-i piiranguid. Piirang NOT NULL sunnib veerge NULL väärtusi tagasi lükkama.
  • Rakendage primaarvõtme piiranguid, et tagada väärtuste kordumatus veerus või veergude komplektis. See hoiab ära kirjete dubleerimise andmebaasitabelis.
  • Võõrvõtme piirangud loovad seosed tabelite vahel ja takistavad toiminguid, mis hävitaksid nendevahelised seosed. Need tagavad, et alamtabelis olev kirje viitab ülemtabelile.

Andmebaas on paljude rakenduste jaoks hädavajalik, kuid see võib muutuda segaseks, kui teil pole andmete salvestamise ja töötlemise juhiseid.

SQL-i piirangud määravad reeglid andmete tabelis salvestamiseks. Kui määrate piirangud, annab andmebaas veateate, kui proovite salvestada neid reegleid rikkuvaid andmeid. Piirangud aitavad säilitada andmete terviklikkust ja tagada teie andmebaasi ühtsuse.

instagram viewer

Saate kasutada mitut tüüpi SQL-i piiranguid; siin on mõned kõige kasulikumad.

1. NOT NULL Piirang

Andmebaasi veerud aktsepteerivad vaikimisi NULL-väärtustega andmeid. NULL tähendab sisuliselt, et väärtust ei eksisteeri. Piirang NOT NULL sunnib veergu NULL-väärtusi tagasi lükkama.

See piirang tagab, et iga veerg peab sisaldama väärtust. Te ei saa andmebaasi kirjet lisada ilma piiranguga NOT NULL veergude andmeid esitamata.

Võtke näiteks a Kliendid laud. Iga kliendi kohta on mõned vajalikud andmed, mida soovite salvestada, näiteks tema nimi. Lisage kohustuslikele väljadele piirang NOT NULL tagamaks, et kliendid esitavad selle teabe.

Siin on näide, mis näitab, kuidas saate kasutada piirangut NOT NULL a-s PostgreSQL andmebaas:

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

Kui proovite sisestada kliendikirjet ilma Vanus väljal, võtab andmebaas selle vastu ilma vigadeta:

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

Kui aga proovite sisestada kirjet ilma Eesnimi väljal lükkab andmebaas selle tagasi veateatega:

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

2. PRIMARY KEY Piirang

KEY on unikaalne atribuut, mis on seatud veerule või väljale, mis identifitseerib andmebaasisüsteemides tabeli korteeži (või kirje). PRIMARY KEY piirang tagab väärtuste kordumatuse veerus või veergude komplektis. See toimib reas kordumatu identifikaatorina, vältides andmebaasi tabelis kirjete dubleerimist.

Peamised võtmed sisaldavad kordumatuid väärtusi ja ei tohi sisaldada NULL väärtusi. Iga SQL andmebaasi tabel peab olema ainult üks primaarvõti. PRIMARY KEY võib sisaldada ühte või mitut veergu.

Näiteks loote kliendikirjete andmebaasi. Peate igal kliendil sisestama oma ID-numbrid teistest erinevalt. Saate rakendada primaarvõtme piirangut tagamaks, et ühelgi teie kliendil pole sama ID-numbrit.

Järgmine kood näitab, kuidas saate MySQL-i andmebaasis sisestada primaarvõtme piirangu:

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

Andmebaas ei aktsepteeri seda väärtust, kui kasutaja sisestab teise sarnase ID-ga kirje. Selle asemel annab see veateate, mis näitab dubleerimist. Kasutaja proovib järgmises näites sisestada kahte sama ID-ga kirjet:

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

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

Andmebaas kuvab veateate:

Duplicate entry '1' for key 'PRIMARY'

Aga kui muudad teise kliendi ID-d, aktsepteerib andmebaas selle kande. Seetõttu tagab primaarvõti, et teie kliendikirjetes pole ID-sid dubleeritud.

3. VÄLISVÕTI Piirang

Võõrvõtmed luua seosed kahe tabeli vahel. Saate lisada võõrvõtme ühe tabeli väljale/veerule, mis viitab teise tabeli primaarvõtmele.

Primaarvõtmega tabel on ematabel, välisvõtmega tabel aga alamtabel. Kirjet ei saa siis alamtabelis eksisteerida ilma viiteta ülemtabelile.

Võõrvõtme piirang takistab toiminguid, mis hävitaksid tabelite vahelisi linke. Näiteks te ei saa TULLA üks tabel, kui see lingib teise võõrvõtmega. Peate mõlemad lauad korraga maha jätma.

Erinevalt primaarvõtmest saate võõrvõtit dubleerida ja ühes tabelis on rohkem kui üks. Võõrvõtme väärtused võivad samuti olla NULL. Järgmises näites peate kasutama Kliendi ID tellimuse loomiseks.

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

Kui proovite luua tellimust ilma olemasolevata Kliendi ID, kuvab andmebaas veateate:

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. Ainulaadne piirang

See piirang tagab, et kahel real ei saa olla konkreetse veeru jaoks samu väärtusi. Sarnaselt primaarvõtmetele säilitab unikaalne piirang andmete terviklikkuse ja hoiab ära topeltkirjed. Kui töötate halvasti kavandatud andmebaasiga ilma UNIKALSE piiranguta, võib juhtuda, et peate seda tegema otsige ja kustutage duplikaadid.

Erinevalt primaarvõtmetest võib ühes tabelis olla palju UNIKALSEID piiranguid. Näiteks luues a Kliendid tabelis, võiksite kasutada kordumatuid ID-sid ja telefoninumbreid. Sellise piirangu lisamiseks MySQL-serveri abil kasutage järgmist süntaksit:

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

Kui sisestate andmebaasi sama mobiilinumbriga kirjed, kuvatakse veateade.

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

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

Veateade on umbes selline:

Duplicate entry '254000000' for key 'Mobile_No'

See UNIKAALNE piirang tagab, et andmebaasis ei oleks samade ID-de või mobiilinumbritega kliente.

5. KONTROLLI piirangut

Piirang CHECK piirab veergu pandud väärtusvahemikku. Veerule piirangu CHECK lisamine lubab selle veeru jaoks ainult määratud väärtused. See tagab andmete terviklikkuse, tagades, et kasutaja lisab tabelisse ainult kehtivad andmed.

Piirang KONTROLLI peab hindama iga määratud rea või tabelikirje väärtuse väärtuseks TÕENE või UNKNOWN. Kui väärtus on FALSE, kuvatakse andmebaasis veateade.

Näiteks tabelis Kliendid võite soovida teenindada ainult kliente, kes on vanemad kui 18 aastat. Saate lisada piirangu CHECK tagamaks, et te ei teeninda alaealisi kliente. Piirangu saate lisada PostgreSQL-i andmebaasi, nagu on näidatud järgmises koodis:

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

Kui proovite nüüd sisestada alla 18-aastase kliendi:

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

Andmebaas kuvab sellise veateate:

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

Kuidas andmebaasidest SQL-i piiranguid lisada ja eemaldada

SQL-i piirangud ei ole kivisse raiutud. Olemasolevate tabelite piiranguid saate lisada või eemaldada lause ALTER TABLE abil. ALTER-lause võimaldab teil töötada piirangutega, mis vastavad teie andmevajadustele.

SQL-i piiranguid on palju rohkem, mida saate oma maitse järgi andmebaasi kujundamiseks õppida. Võite alustada selles artiklis loetletud toodetega.