Andmebaasi võtmed (Keys)
1. Primary Key (Primaarvõti)

Definitsioon: Veerg (või veergude kombinatsioon), mis identifitseerib iga tabeli rea unikaalselt. Ei saa olla NULL ega korduv.(!!!)
Milleks kasutatakse: Iga rea üheseks tuvastamiseks tabelis.
Erinevus teistest: Tabelis saab olla ainult ÜKS Primary Key. See on alati unikaalne ja mitte-NULL.
CREATE TABLE õpilased (
õpilane_id INT PRIMARY KEY,
eesnimi VARCHAR(50),
perenimi VARCHAR(50),
vanus INT
);
INSERT INTO õpilased VALUES (1, 'Mari', 'Tamm', 20);
INSERT INTO õpilased VALUES (2, 'Jaan', 'Kask', 22);
INSERT INTO õpilased VALUES (3, 'Anna', 'Mets', 21);
select * from õpilased;
2. Foreign Key (Võõrvõti)

Definitsioon: Veerg, mis viitab teise tabeli Primary Key-le. Loob kahe tabeli vahel seose.
Milleks kasutatakse: Tabelite omavaheliseks sidumiseks ja andmete terviklikkuse tagamiseks.
Erinevus teistest: Ainus võti, mis viitab teise tabeli andmetele. Võib olla NULL ja korduv.
CREATE TABLE kursused (
kursus_id INT PRIMARY KEY,
kursuse_nimi VARCHAR(100)
);
CREATE TABLE registreeringud (
registreering_id INT PRIMARY KEY,
õpilane_id INT,
kursus_id INT,
FOREIGN KEY (õpilane_id) REFERENCES õpilased(õpilane_id),
FOREIGN KEY (kursus_id) REFERENCES kursused(kursus_id)
);
INSERT INTO kursused VALUES (1, 'Andmebaasid');
INSERT INTO kursused VALUES (2, 'Programmeerimine');
INSERT INTO registreeringud VALUES (1, 1, 1);
INSERT INTO registreeringud VALUES (2, 2, 2);
INSERT INTO registreeringud VALUES (3, 1, 2);
select * from kursused;
select * from registreeringud;
3. Unique Key (Unikaalne võti)

Definitsioon: Tagab, et veerus ei esine korduvaid väärtusi. Lubab ühte NULL väärtust.
Milleks kasutatakse: Andmete unikaalsuse tagamiseks väljades nagu e-mail, isikukood jne.
Erinevus teistest: Erinevalt Primary Key-st võib tabelis olla mitu Unique Key-t ja see lubab NULL väärtust.
CREATE TABLE kasutajad (
kasutaja_id INT PRIMARY KEY,
kasutajanimi VARCHAR(50) UNIQUE,
email VARCHAR(100) UNIQUE,
eesnimi VARCHAR(50)
);
INSERT INTO kasutajad VALUES (1, 'mari123', 'mari@kool.ee', 'Mari');
INSERT INTO kasutajad VALUES (2, 'jaan99', 'jaan@kool.ee', 'Jaan');
-- See annab vea, sest 'mari123' on juba olemas:
-- INSERT INTO kasutajad VALUES (3, 'mari123', 'anna@kool.ee', 'Anna');
select * from kasutajad;
4. Simple Key (Lihtne võti)

Definitsioon: Võti, mis koosneb ainult ÜHEST veerust.
Milleks kasutatakse: Lihtsa unikaalse identifikaatori loomiseks, kui üks veerg piisab rea tuvastamiseks.
Erinevus teistest: Erinevalt Composite/Compound Key-st kasutab ainult ühte veergu.
CREATE TABLE tooted (
toode_id INT PRIMARY KEY, -- See on Simple Key (üks veerg)
toote_nimi VARCHAR(100),
hind DECIMAL(10,2)
);
INSERT INTO tooted VALUES (1, 'Sülearvuti', 799.99);
INSERT INTO tooted VALUES (2, 'Hiir', 25.50);
INSERT INTO tooted VALUES (3, 'Klaviatuur', 45.00);
-- toode_id on Simple Key - üks veerg identifitseerib rea
select * from tooted ;
5. Composite Key (Liitklahv)

Definitsioon: Primary Key, mis koosneb KAHEST või enamast veerust koos. Ükski veerg eraldi ei ole unikaalne.
Milleks kasutatakse: Kui üks veerg ei suuda rida unikaalselt identifitseerida, aga kahe/enama kombinatsioon suudab.
Erinevus teistest: Erinevalt Simple Key-st koosneb mitmest veerust. Erinevalt Compound Key-st ei sisalda Foreign Key-t.
CREATE TABLE tunniplaanid (
õpetaja_id INT,
aeg VARCHAR(20),
klassiruum VARCHAR(10),
aine VARCHAR(50),
PRIMARY KEY (õpetaja_id, aeg) -- Composite Key: kaks veergu koos
);
-- Sama õpetaja ei saa olla kahes kohas samal ajal
INSERT INTO tunniplaanid VALUES (1, 'Esmasp 08:00', 'A101', 'Matemaatika');
INSERT INTO tunniplaanid VALUES (1, 'Esmasp 10:00', 'B203', 'Matemaatika');
INSERT INTO tunniplaanid VALUES (2, 'Esmasp 08:00', 'C301', 'Inglise keel');
-- See annab vea (sama õpetaja_id ja aeg):
-- INSERT INTO tunniplaanid VALUES (1, 'Esmasp 08:00', 'D102', 'Füüsika');
select * from tunniplaanid;
6. Compound Key (Liitklahv võõrvõtmega)

Definitsioon: Liitklahv, mis koosneb mitmest veerust, millest vähemalt üks on Foreign Key.
Milleks kasutatakse: Seose- ehk vahepealse tabeli (junction table) loomiseks mitme-mitmele seose puhul.
Erinevus teistest: Nagu Composite Key, aga sisaldab tingimata Foreign Key veergu(sid).
CREATE TABLE õpilane_kursus (
õpilane_id INT,
kursus_id INT,
liitumise_kuupäev DATE,
PRIMARY KEY (õpilane_id, kursus_id), -- Compound Key
FOREIGN KEY (õpilane_id) REFERENCES õpilased(õpilane_id),
FOREIGN KEY (kursus_id) REFERENCES kursused(kursus_id)
);
INSERT INTO õpilane_kursus VALUES (1, 1, '2024-09-01');
INSERT INTO õpilane_kursus VALUES (1, 2, '2024-09-01');
INSERT INTO õpilane_kursus VALUES (2, 1, '2024-09-02');
select * from õpilane_kursus;
7. Superkey (Supervõti)

Definitsioon: Iga veergude kombinatsioon, mis suudab rea unikaalselt identifitseerida — sealhulgas ka liigsete veergudega kombinatsioonid.
Milleks kasutatakse: Teoreetiline mõiste — aitab mõista, millised võtmekandidaadid tabelis eksisteerivad.
Erinevus teistest: Superkey võib sisaldada lisa-veerge, mis pole vajalikud. Candidate Key on Superkey minimaalne vorm (ilma ülearuste veergudeta).
CREATE TABLE töötajad (
töötaja_id INT PRIMARY KEY,
isikukood CHAR(11) UNIQUE,
email VARCHAR(100) UNIQUE,
eesnimi VARCHAR(50),
perenimi VARCHAR(50)
);
INSERT INTO töötajad VALUES (1, '39001010123', 'kalle@firma.ee', 'Kalle', 'Sepp');
INSERT INTO töötajad VALUES (2, '48505152345', 'tiiu@firma.ee', 'Tiiu', 'Org');
-- Kõik järgnevad on Superkey-d (identifitseerivad rea unikaalselt):
-- (töötaja_id)
-- (isikukood)
-- (email)
-- (töötaja_id, isikukood) <-- liigne, aga siiski Superkey
-- (töötaja_id, email, eesnimi) <-- liigne, aga siiski Superkey
SELECT * FROM töötajad WHERE töötaja_id = 1;
SELECT * FROM töötajad WHERE isikukood = '39001010123';
SELECT * FROM töötajad WHERE töötaja_id = 1 AND email = 'kalle@firma.ee';
select * from töötajad ;
8. Candidate Key (Kandidaatvõti)

Definitsioon: Minimaalne Superkey — veerg või veergude kombinatsioon, mis suudab rea unikaalselt identifitseerida, ilma ühegi üleliigse veeruta.
Milleks kasutatakse: Näitab, milliseid veerge saab valida Primary Key-ks. Tabelis võib olla mitu Candidate Key-d.
Erinevus teistest: Candidate Key = minimaalne Superkey. Primary Key on see Candidate Key, mille arendaja on valinud peamiseks. Ülejäänud Candidate Key-d saavad Alternate Key-deks.
CREATE TABLE sõidukid (
sõiduk_id INT PRIMARY KEY, -- valitud Candidate Key → Primary Key
registreerimisnumber CHAR(6) UNIQUE, -- Candidate Key → saab Alternate Key-ks
vin_kood CHAR(17) UNIQUE, -- Candidate Key → saab Alternate Key-ks
mark VARCHAR(50),
mudel VARCHAR(50)
);
INSERT INTO sõidukid VALUES (1, 'ABC123', '1HGBH41JXMN109186', 'Toyota', 'Corolla');
INSERT INTO sõidukid VALUES (2, 'XYZ789', '2T1BURHE0JC043821', 'Honda', 'Civic');
-- Kõik kolm on Candidate Key-d (igaüks identifitseerib rea unikaalselt):
-- sõiduk_id, registreerimisnumber, vin_kood
SELECT * FROM sõidukid WHERE registreerimisnumber = 'ABC123';
SELECT * FROM sõidukid WHERE vin_kood = '1HGBH41JXMN109186';
9. Alternate Key (Alternatiivne võti)

Definitsioon: Candidate Key, mida EI valitud Primary Key-ks. See on “varuvariant” — suudab samuti rida unikaalselt identifitseerida.
Milleks kasutatakse: Alternatiivse otsimise ja viitamise võimaldamiseks. Realiseeritakse tihti UNIQUE piiranguga.
Erinevus teistest: Alternate Key on alati Candidate Key, aga mitte Primary Key. Primary Key on ainult üks, Alternate Key-sid võib olla mitu.
CREATE TABLE raamatud (
raamat_id INT PRIMARY KEY, -- Primary Key (valitud Candidate Key)
isbn CHAR(13) UNIQUE, -- Alternate Key (Candidate Key, mis ei valitud PK-ks)
pealkiri VARCHAR(200),
autor VARCHAR(100),
aasta INT
);
INSERT INTO raamatud VALUES (1, '9789985327548', 'Kevade', 'Oskar Luts', 1912);
INSERT INTO raamatud VALUES (2, '9789985013567', 'Tõde ja õigus', 'Anton Hansen Tammsaare', 1926);
INSERT INTO raamatud VALUES (3, '9789985052748', 'Rehepapp', 'Andrus Kivirähk', 2000);
-- isbn on Alternate Key - saab kasutada unikaalse otsimiseks:
SELECT * FROM raamatud WHERE isbn = '9789985327548';
-- raamat_id on Primary Key:
SELECT * FROM raamatud WHERE raamat_id = 2;
Kokkuvõte
| Võti | Unikaalne? | NULL lubatud? | Arv tabelis | Veergude arv |
|---|---|---|---|---|
| Primary Key | Jah | Ei | Täpselt 1 | 1 või rohkem |
| Foreign Key | Ei | Jah | Piiramatu | 1 või rohkem |
| Unique Key | Jah | (1 NULL) | Piiramatu | 1 või rohkem |
| Simple Key | Jah | Sõltub | — | Täpselt 1 |
| Composite Key | Jah (kombinatsioon) | Ei | — | 2 või rohkem |
| Compound Key | Jah | Ei | — | 2+ (sisaldab FK) |
| Superkey | Jah | Ei | Piiramatu | 1 või rohkem |
| Candidate Key | Jah | Ei | Piiramatu | 1 või rohkem |
| Alternate Key | Jah | (1 NULL) | Piiramatu | 1 või rohkem |
Kasutatud allikad
- Oracle Documentation — Constraints:
- PostgreSQL Documentation — Constraints:
- MySQL Reference Manual — CREATE TABLE:
- W3Schools SQL Tutorial:
- Ramez Elmasri, Shamkant Navathe — Fundamentals of Database Systems, 7th Edition, Pearson, 2015
