Datele tale sunt bune numai dacă poți avea încredere în ele. Utilizați constrângerile bazei de date pentru a vă asigura că este exactă, fiabilă și nu vă distruge modelul de date.
Recomandări cheie
- Utilizați constrângeri SQL pentru a menține integritatea datelor și pentru a asigura uniformitatea în baza de date. Constrângerea NOT NULL obligă coloanele să respingă valorile NULL.
- Implementați constrângeri de cheie primară pentru a asigura unicitatea valorilor dintr-o coloană sau un set de coloane. Acest lucru previne înregistrările duplicate într-un tabel de bază de date.
- Constrângerile cheie străine stabilesc relații între tabele și previn acțiuni care ar distruge legăturile dintre ele. Se asigură că o înregistrare din tabelul copil face referire la tabelul părinte.
O bază de date este esențială pentru multe aplicații, dar poate deveni dezordonată dacă nu aveți instrucțiuni pentru stocarea și procesarea datelor.
Constrângerile SQL specifică regulile pentru stocarea datelor într-un tabel. Când setați constrângeri, baza de date va genera o eroare dacă încercați să stocați date care încalcă aceste reguli. Constrângerile ajută la menținerea integrității datelor și la asigurarea uniformității în baza de date.
Există mai multe tipuri de constrângeri SQL pe care le puteți utiliza; aici sunt unele dintre cele mai utile.
1. NOT NULL Constrângere
Coloanele bazei de date, în mod implicit, acceptă date cu valori NULL. NULL înseamnă în esență că nu există nicio valoare. Constrângerea NOT NULL forțează o coloană să respingă valorile NULL.
Această constrângere asigură că fiecare coloană trebuie să conțină o valoare. Nu puteți adăuga o înregistrare în baza de date fără a furniza date pentru orice coloană cu constrângerea NOT NULL.
Luați exemplul lui a Clienți masa. Există câteva detalii necesare despre fiecare client pe care le doriți să fie înregistrate, cum ar fi numele lor. Adăugați constrângerea NOT NULL în câmpurile obligatorii pentru a vă asigura că clienții furnizează aceste informații.
Iată un exemplu care arată cum puteți utiliza constrângerea NOT NULL în a Baza de date PostgreSQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);
Dacă încercați să introduceți o înregistrare client fără Vârstă câmp, baza de date îl va accepta fără erori:
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
Cu toate acestea, dacă încercați să introduceți o înregistrare fără Nume câmp, baza de date o va respinge cu un mesaj de eroare:
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. Constrângere CHEIE PRIMARĂ
O CHEIE este un atribut unic setat la o coloană sau un câmp care identifică tuplu (sau o înregistrare) a unui tabel în sistemele de baze de date. O constrângere PRIMARY KEY asigură unicitatea valorilor dintr-o coloană sau un set de coloane. Acesta acționează ca un identificator unic într-un rând, prevenind înregistrările duplicate într-un tabel de bază de date.
Cheile primare conțin valori unice și nu pot conține valori NULL. Fiecare Tabelul bazei de date SQL trebuie să aibă o singură cheie primară. CHEIA PRIMARĂ poate avea coloane simple sau multiple.
De exemplu, creați o bază de date cu înregistrările clienților. Aveți nevoie de fiecare client să-și introducă numerele de identificare diferit de toți ceilalți. Puteți aplica constrângerea cheii primare pentru a vă asigura că niciunul dintre clienții dvs. nu are același număr de identificare.
Următorul cod arată cum puteți introduce o constrângere de cheie primară într-o bază de date MySQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
Baza de date nu va accepta acea valoare dacă un utilizator introduce o altă înregistrare cu un ID similar. În schimb, va genera o eroare care indică duplicarea. Utilizatorul încearcă să insereze două înregistrări cu același ID în exemplul următor:
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );
Baza de date va afișa un mesaj de eroare:
Duplicate entry '1' for key 'PRIMARY'
Dar dacă schimbi ID-ul celui de-al doilea client, baza de date acceptă intrarea. Prin urmare, cheia principală asigură că nu există ID-uri duplicate în evidențele clienților.
3. Constrângere CHEIE străină
Chei străine stabiliți relații între două tabele. Puteți adăuga o cheie externă la un câmp/coloană dintr-un tabel care face referire la cheia primară dintr-un alt tabel.
Tabelul cu cheia primară este tabelul părinte, în timp ce tabelul cu cheia străină este tabelul copil. O înregistrare nu poate exista atunci în tabelul copil fără o referință la tabelul părinte.
Constrângerea cheii externe împiedică acțiunile care ar distruge legăturile dintre tabele. De exemplu, nu poți CĂDERE BRUSCA un tabel dacă se leagă de altul cu o cheie străină. Va trebui să aruncați ambele mese simultan.
Spre deosebire de o cheie primară, puteți duplica o cheie străină și puteți avea mai multe într-un singur tabel. Valorile cheilor străine pot fi, de asemenea NUL. În exemplul următor, trebuie să utilizați Număr de înregistrare client pentru a crea o comandă.
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');
Dacă încercați să creați o comandă fără o comandă existentă Număr de înregistrare client, baza de date afișează un mesaj de eroare:
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. Constrângere unică
Această constrângere asigură că două rânduri nu pot avea aceleași valori pentru o anumită coloană. La fel ca cheile primare, o constrângere unică menține integritatea datelor și previne intrările duplicate. Dacă lucrați cu o bază de date prost proiectată fără constrângerea UNIQUE, este posibil să fiți nevoit să o faceți găsiți și ștergeți duplicatele.
Spre deosebire de cheile primare, puteți avea multe constrângeri UNICE pe un singur tabel. De exemplu, la crearea unui Clienți tabel, poate doriți să aveți ID-uri și numere de telefon unice. Pentru a adăuga o astfel de constrângere folosind serverul MySQL, utilizați această sintaxă:
CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Dacă introduceți înregistrări cu același număr de telefon mobil în baza de date, va afișa un mesaj de eroare.
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
Mesajul de eroare va fi cam așa:
Duplicate entry '254000000' for key 'Mobile_No'
Această constrângere UNICĂ asigură că baza de date nu va avea clienți cu aceleași ID-uri sau numere de telefon mobil.
5. VERIFICAREA Constrângerii
Constrângerea CHECK limitează intervalul de valori introdus într-o coloană. Adăugarea unei constrângeri CHECK pe o coloană va permite numai valorile specificate pentru acea coloană. Implementează integritatea datelor, asigurându-se că un utilizator introduce doar date valide într-un tabel.
Constrângerea CHECK trebuie să evalueze o valoare ca TRUE sau NECUNOSCUT pentru fiecare rând specificat sau intrare de tabel. Dacă valoarea este FALSE, baza de date afișează un mesaj de eroare.
De exemplu, în tabelul Clienți, este posibil să doriți să serviți doar clienții peste 18 ani. Puteți adăuga o constrângere CHECK pentru a vă asigura că nu serviți clienți minori. Puteți adăuga constrângerea într-o bază de date PostgreSQL, așa cum se arată în următorul cod:
CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Acum, dacă încercați să introduceți vârsta unui client sub vârsta de 18 ani:
INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
Baza de date va afișa un mesaj de eroare ca acesta:
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
Cum să adăugați și să eliminați constrângeri SQL din baze de date
Constrângerile SQL nu sunt aruncate în piatră. Puteți adăuga sau elimina constrângeri pe tabelele existente folosind instrucțiunea ALTER TABLE. Declarația ALTER vă permite să lucrați cu constrângeri pentru a se potrivi nevoilor dvs. de date.
Există multe mai multe constrângeri SQL pe care le puteți învăța să proiectați o bază de date după bunul plac. Puteți începe cu cele enumerate în acest articol.