SQL - Ograničenja


Šta su ograničenja u SQL-u?

Ograničenje je jednostavno ograničenje postavljeno na jednu ili više kolona tabele za ograničavanje vrste vrijednosti koje se mogu pohraniti u toj koloni. Ograničenja pružaju standardni mehanizam za održavanje tačnosti i integriteta podataka unutar tabele baze podataka. Postoji nekoliko različitih vrsta ograničenja u SQL-u, uključujući:

  • NOT NULL
  • PRIMARY KEY
  • UNIQUE
  • DEFAULT
  • FOREIGN KEY
  • CHECK

Sada, ćemo detaljno da razmotrimo svako od ovih ograničenja.



NOT NULL Ograničenje

Ograničenje NOT NULL određuje da kolona ne prihvata NULL vrijednosti. To znači ako se na kolonu primjenjuje NOT NULL ograničenje, tada ne možete umetnuti novi red u tabelu bez dodavanja vrijednosti NULL za tu kolonu. Sljedeća SQL izjava stvara tabelu s imenima persons s četiri kolone, od kojih tri kolone id, name i phone ne prihvataju NULL vrijednosti.

CREATE TABLE persons (
    id INT NOT NULL,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL
);


PRIMARY KEY Ograničenje

Ograničenje PRIMARY KEY identifikuje kolonu ili skup kolona koje imaju vrijednosti koje jedinstveno identifikuju red u tabeli. Nijedna od dva reda u tabeli ne mogu imati istu vrijednost primarnog ključa. Takođe ne možete unijeti NULL vrijednost u kolonu primarnog ključa. Sljedeća SQL izjava stvara tabelu s imenom persons i specificira kolonu id kao primarni ključ. To znači da ovo polje ne dopušta NULL ili dupliranje vrijednosti.

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL
);


UNIQUE Ograničenja

UNIQUE ograničenje ograničava jednu ili više kolona da sadrže jedinstvene vrijednosti unutar tabele. Iako i ograničenje UNIQUE i ograničenje PRIMARY KEY nameću jedinstvenost, koristite UNIQUE ograničenje umjesto ograničenja PRIMARY KEY namećete jedinstvenost kolone ili kombinacije kolona, što je razlika u odnosu na primarni ključ. Sljedeća SQL izjava stvara tabelu s nazivom persons i određuje kolonu phone kao jedinstvenu. To znači da ovo polje ne dopušta dupliranje vrijednosti.

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);


DEFAULT Ograničenja

Ograničenje DEFAULT određuje zadanu vrijednost kolone. Zadana kolona je neka vrijednost koju će motor baze podataka (database engine) ubaciti u kolonu kad INSERT izjava izričito ne dodijeli određenu vrijednost. Sljedeća SQL izjava stvara zadanu kolonu country.

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE,
    country VARCHAR(30) NOT NULL DEFAULT 'Bosnia and Herzegovina'
);


FOREIGN KEY Ograničenje

Strani ključ (FK) je kolona ili kombinacija kolona koje se koriste za uspostavljanje i provođenje odnosa između podataka u dvije tabele. Evo primjera dijagrama koji prikazuje odnos između tabele employees i departments. Ako pažljivo pogledate, primijetićete da kolona dept_id tabele employees odgovara koloni primarnog ključa tabele departments. Zbog toga je kolona dept_id tabela employees strani ključ za tabelu departments.




U MySQL-u možete stvoriti strani ključ definisanjem ograničenja FOREIGN KEY kada kreirate tabelu na sljedeći način. Sljedeća izjava uspostavlja strani ključ u koloni dept_id tabele employees koji upućuje na kolonu dept_id tabele departments.

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT,
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);


CHECK Ograničenja

Ograničenje CHECK koristi se za ograničavanje vrijednosti koje se mogu smjestiti u kolonu. Na primjer, raspon vrijednosti za kolone plata (salaries) može se ograničiti stvaranjem ograničenja CHECK koje dopušta vrijednosti samo od 3.000 do 10.000. To sprečava ulazak plata (salaries) preko redovnog raspona plata. Evo primjera:

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT NOT NULL CHECK (salary >= 3000 AND salary <= 10000),
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);