Primary Key:
Põhivõti on veerg või veergude kombinatsioon, mis määrab iga kirje tabelis ainulaadselt.
Ühes tabelis saab olla ainult üks põhivõti.
Põhivõti ei tohi sisaldada tühje (NULL) väärtusi ja selle väärtused ei tohi korduda.
create table opilane(
id int primary key, -- primary key
nimi varchar(50),
vanus int
);


Foreign Key
Võõrvõti on veerg, mis loob seose kahe tabeli vahel.
See viitab teise tabeli põhivõtmele, et andmed oleksid seotud.
Võõrvõti ei pea olema unikaalne ja võib sisaldada NULL-väärtusi, kui seos ei ole kohustuslik.
Kõik võõrvõtme väärtused peavad vastama mõnele olemasolevale väärtusele seotud tabeli põhivõtmes.
create table klass(
id int,
oppilane_id int,
foreign key (oppilane_id) references oppilane(id) -- foreign key
);


Unique Key
Unikaalne võti tagab, et selle veeru väärtused ei kordu.
Erinevalt põhivõtmest võib unikaalne võti lubada ühte või mitut NULL-väärtust.
Tabelis võib olla mitu unikaalset võtit.
create table oppeaine(
nimi varchar(50) unique -- unique key
);


Simple Key
Lihtvõti on üksainus veerg, mille väärtused on unikaalsed ja mis suudab kirjed eristada.
Näiteks kui tabelis on veerg isikukood, võib see olla lihtvõti, sest üks veerg piisab kirje tuvastamiseks.
create table oppilane (
isikukood int primary key, -- lihtvõti
nimi varchar(50)
);
insert into oppilane (isikukood, nimi) values
(101, 'mari'),
(102, 'peeter');
insert into oppilane (isikukood, nimi) values (101, 'Roman');


Composite Key
Komposiitvõti koosneb mitmest veerust, mida kasutatakse koos kirje unikaalseks määramiseks.
Üksinda need veerud ei pruugi olla unikaalsed, aga koos tagavad nad kordumatuse.
Näiteks: (õpilase_id, kursuse_id) ühes tabelis.
create table hinnang (
opilane_id int,
kursuse_id int,
hinne varchar(5),
primary key (opilane_id, kursuse_id) -- komposiitvõti
);
insert into hinnang (opilane_id, kursuse_id, hinne) values
(1, 1, '5'),
(1, 2, '4'),
(2, 1, '3');


Compound Key
Kompleksvõti on väga sarnane komposiitvõtmele — see koosneb samuti mitmest veerust.
Seda kasutatakse sageli seostabelites, kus iga kirje ühendab kahe teise tabeli väärtused (näiteks tellimused ja tooted).
create table tellimuse_toode (
tellimus_id int,
toode_id int,
kogus int,
primary key (tellimus_id, toode_id) -- kompleksvõti
);
insert into tellimuse_toode (tellimus_id, toode_id, kogus) values
(1, 1, 5),
(1, 2, 3),
(2, 1, 2);

Super Key
Üldvõti on iga veerg või veergude kombinatsioon, mis suudab kirje ainulaadselt tuvastada.
See võib sisaldada rohkem veerge, kui tegelikult vaja on.
Kõik põhivõtmed on üldvõtmed, kuid mitte kõik üldvõtmed ei ole põhivõtmed.
create table raamatud (
raamat_id int,
pealkiri varchar(50),
autor varchar(50),
primary key (raamat_id)
);
insert into raamatud (raamat_id, pealkiri, autor) values
(1, 'raamat1', 'autor1'),
(2, 'raamat2', 'autor2');
insert into raamatud (raamat_id, pealkiri, autor) values (1, 'uus pealkiri', 'uus autor');


Candidate Key
Kandidaatvõti on veerg või veergude kombinatsioon, mis võiks olla põhivõti, sest selle väärtused on unikaalsed ja mitte tühjad.
Tabelis võib olla mitu kandidaatvõtit, kuid ainult üks neist valitakse tegelikuks põhivõtmeks.
create table tooted (
toode_id int not null primary key, -- lihtvõti / põhivõti
kood varchar(20) not null unique, -- kandidaatvõti
nimetus varchar(50)
);
insert into tooted (toode_id, kood, nimetus) values
(1, 'A001', 'piim'),
(2, 'B002', 'leib');
insert into tooted (toode_id, kood, nimetus) values (1, 'C003', 'juust');


Alternate Key
Alternatiivvõti on kandidaatvõti, mida ei valitud põhivõtmeks.
Sellel on samad omadused nagu kandidaatvõtmel — väärtused on unikaalsed ja mitte tühjad — kuid seda kasutatakse lihtsalt lisatuvastuseks.
create table tooted (
toode_id int not null primary key, -- põhivõti / lihtvõti
kood varchar(20) not null unique, -- alternatiivvõti
nimetus varchar(50)
);
insert into tooted (toode_id, kood, nimetus) values
(1, 'A001', 'piim'),
(2, 'B002', 'leib');
insert into tooted (toode_id, kood, nimetus) values (3, 'A001', 'või');



