Vaši podaci su dobri samo ako im možete vjerovati. Upotrijebite ograničenja baze podataka kako biste bili sigurni da je točna, pouzdana i da ne kvari vaš model podataka.
Ključni zahvati
- Koristite SQL ograničenja kako biste održali integritet podataka i osigurali uniformnost u svojoj bazi podataka. Ograničenje NOT NULL prisiljava stupce da odbiju NULL vrijednosti.
- Implementirajte ograničenja primarnog ključa kako biste osigurali jedinstvenost vrijednosti u stupcu ili skupu stupaca. Ovo sprječava dvostruke zapise u tablici baze podataka.
- Ograničenja stranog ključa uspostavljaju odnose između tablica i sprječavaju akcije koje bi uništile veze između njih. Oni osiguravaju da zapis u podređenoj tablici upućuje na roditeljsku tablicu.
Baza podataka neophodna je za mnoge aplikacije, ali može postati neuredna ako nemate smjernice za pohranu i obradu podataka.
SQL ograničenja specificiraju pravila za pohranu podataka u tablicu. Kada postavite ograničenja, baza podataka će izbaciti pogrešku ako pokušate pohraniti podatke koji krše ova pravila. Ograničenja pomažu u održavanju integriteta podataka i osiguravaju uniformnost u vašoj bazi podataka.
Postoji nekoliko vrsta SQL ograničenja koja možete koristiti; evo nekih od najkorisnijih.
1. Ograničenje NIJE NULL
Stupci baze podataka prema zadanim postavkama prihvaćaju podatke s NULL vrijednostima. NULL u biti znači da vrijednost ne postoji. Ograničenje NOT NULL prisiljava stupac da odbije NULL vrijednosti.
Ovo ograničenje osigurava da svaki stupac mora sadržavati vrijednost. Ne možete dodati zapis u bazu podataka bez davanja podataka za bilo koji stupac s NOT NULL ograničenjem.
Uzmimo primjer a Kupci stol. Postoje neki potrebni detalji o svakom kupcu koje želite zabilježiti, poput imena. Dodajte ograničenje NOT NULL obaveznim poljima kako biste osigurali da klijenti daju ove informacije.
Evo primjera koji pokazuje kako možete koristiti NOT NULL ograničenje u a PostgreSQL baza podataka:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);
Ako pokušate umetnuti zapis kupca bez Dob polje, baza podataka će ga prihvatiti bez grešaka:
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
Međutim, ako pokušate umetnuti zapis bez Ime polje, baza podataka će ga odbiti porukom o pogrešci:
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. Ograničenje PRIMARNOG KLJUČA
KLJUČ je jedinstveni atribut postavljen na stupac ili polje koji identificira torku tablice (ili zapis) u sustavima baza podataka. Ograničenje PRIMARY KEY osigurava jedinstvenost vrijednosti u stupcu ili skupu stupaca. Djeluje kao jedinstveni identifikator u nizu, sprječavajući dvostruke zapise u tablici baze podataka.
Primarni ključevi sadrže jedinstvene vrijednosti i ne mogu sadržavati NULL vrijednosti. Svaki Tablica SQL baze podataka mora imati samo jedan primarni ključ. PRIMARNI KLJUČ može imati jedan ili više stupaca.
Na primjer, stvarate bazu podataka o klijentima. Morate svaki kupac unijeti svoj ID broj drugačije od svih ostalih. Možete primijeniti ograničenje primarnog ključa kako biste osigurali da nitko od vaših kupaca nema isti ID broj.
Sljedeći kod pokazuje kako možete uvesti ograničenje primarnog ključa u MySQL bazu podataka:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
Baza podataka neće prihvatiti tu vrijednost ako korisnik unese drugi zapis sa sličnim ID-om. Umjesto toga, izbacit će pogrešku koja ukazuje na dupliciranje. Korisnik pokušava umetnuti dva zapisa s istim ID-om u sljedećem primjeru:
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );
Baza podataka će pokazati poruku o pogrešci:
Duplicate entry '1' for key 'PRIMARY'
Ali ako promijenite ID drugog kupca, baza podataka prihvaća unos. Stoga primarni ključ osigurava da nema duplikata ID-ova u evidenciji vaših kupaca.
3. Ograničenje FOREIGN KEY
Strani ključevi uspostaviti odnose između dvije tablice. Možete dodati strani ključ u polje/stupac u jednoj tablici koji upućuje na primarni ključ u drugoj tablici.
Tablica s primarnim ključem je roditeljska tablica, dok je tablica sa stranim ključem podređena tablica. Zapis tada ne može postojati u podređenoj tablici bez reference na roditeljsku tablicu.
Ograničenje stranog ključa sprječava radnje koje bi uništile veze između tablica. Na primjer, ne možete PAD jedna tablica ako se povezuje s drugom stranim ključem. Morat ćete ispustiti oba stola odjednom.
Za razliku od primarnog ključa, možete duplicirati strani ključ i imati više od jednog u jednoj tablici. Vrijednosti stranog ključa također mogu biti NULL. U sljedećem primjeru morate koristiti customer_id za stvaranje naloga.
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');
Ako pokušate stvoriti narudžbu bez postojeće customer_id, baza podataka prikazuje poruku o pogrešci:
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. JEDINSTVENO ograničenje
Ovo ograničenje osigurava da dva retka ne mogu imati iste vrijednosti za određeni stupac. Poput primarnih ključeva, jedinstveno ograničenje održava integritet podataka i sprječava dvostruke unose. Ako radite s loše dizajniranom bazom podataka bez UNIQUE ograničenja, možda ćete morati pronaći i izbrisati duplikate.
Za razliku od primarnih ključeva, možete imati mnogo JEDINSTVENIH ograničenja na jednoj tablici. Na primjer, prilikom stvaranja a Kupci tablicu, možda ćete htjeti imati jedinstvene ID-ove i telefonske brojeve. Da biste dodali takvo ograničenje pomoću MySQL poslužitelja, koristite ovu sintaksu:
CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Ako u bazu podataka unesete zapise s istim brojem mobitela, prikazat će se poruka o pogrešci.
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
Poruka o pogrešci bit će otprilike ovakva:
Duplicate entry '254000000' for key 'Mobile_No'
Ovo JEDINSTVENO ograničenje osigurava da baza podataka neće imati klijente s istim ID-ovima ili brojevima mobitela.
5. PROVJERITE Ograničenje
Ograničenje CHECK ograničava raspon vrijednosti stavljen u stupac. Dodavanje ograničenja CHECK na stupac dopustit će samo određene vrijednosti za taj stupac. Provodi integritet podataka osiguravajući da korisnik unese samo važeće podatke u tablicu.
Ograničenje CHECK mora procijeniti vrijednost kao TRUE ili UNKNOWN za svaki navedeni redak ili unos tablice. Ako je vrijednost FALSE, baza podataka prikazuje poruku o pogrešci.
Na primjer, u tablici Kupci možda želite posluživati samo klijente starije od 18 godina. Možete dodati ograničenje CHECK kako biste bili sigurni da ne uslužujete maloljetne klijente. Možete dodati ograničenje u PostgreSQL bazi podataka, kao što je prikazano u sljedećem kodu:
CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Sada ako pokušate umetnuti dob kupca ispod 18 godina:
INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
Baza podataka će pokazati poruku o pogrešci poput ove:
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
Kako dodati i ukloniti SQL ograničenja iz baza podataka
SQL ograničenja nisu uklesana u kamenu. Možete dodati ili ukloniti ograničenja na postojeće tablice pomoću izjave ALTER TABLE. Izjava ALTER omogućuje vam rad s ograničenjima koja odgovaraju vašim potrebama podataka.
Postoji mnogo više SQL ograničenja koja možete naučiti da dizajnirate bazu podataka po svom ukusu. Možete početi s onima navedenima u ovom članku.