Database keys

1. Primary Key (esmane võti)

Lihtsalt öeldes:
Primary key on veerg, mis identifitseerib iga kirje tabelis. See ei tohi korduda ja ei saa olla tühi.

Primary key on andmebaasi struktuuri põhielement, kuna see tagab, et iga kirje on unikaalne. See on ka alus seoste loomisel teiste tabelitega.

Näide tabelist Student:

  • StudentID on primary key (PK).
  • Iga rida on unikaalne.

2. Foreign Key (võõrvõti)

Lihtsalt öeldes:
Foreign key näitab seost teise tabeliga. Näitab, milline kirje kuulub teise tabeli kirjele.

Foreign key võimaldab andmebaasil säilitada andmete terviklikkust, näiteks et mitte lisada kursuse registreeringut olemasoleva õpilase ilma.

Näide tabelist Enrollment (õpingud):

  • Klient_id viitab Kliendid(Klient_id)-le.
  • See on võõrvõti (FK).

3. Unique Key (unikaalne võti)

Lihtsalt öeldes:
Unique key tagab, et veeru väärtused ei kordu, aga võib olla rohkem kui üks tabelis. Mõnikord võib olla tühi.

Unique key aitab vältida andmete dubleerimist ja toetab andmete terviklikkust. Erinevalt primary key’st võib tabelis olla mitu unique key’d.

Näide tabelist Employee (töötaja):

  • Id on unique key (UK).
  • Ei tohi olla sama kaks korda.

4. Simple Key (lihtvõti)

Lihtsalt öeldes:
Lihtvõti koosneb ainult ühest veerust.

Lihtvõti on kõige lihtsam võtmetüüp ja seda kasutatakse kõige sagedamini väikestes tabelites, kus ühe veeruga saab kindlaks teha unikaalsuse.

Näide:
raamatud_id on lihtvõti, sest see on ainult üks veerg.


5. Composite Key (koosseisev võti)

Lihtsalt öeldes:
Koosseisev võti on mitu veergu koos, mis unikaalselt identifitseerivad kirje.

Seda kasutatakse olukordades, kus üks veerg ei suuda tagada unikaalsust. Kõik veerud võtmes peavad koos moodustama unikaalse identifikaatori.

Näide tabelist hinded:


6. Compound Key (kompoundvõti)

Lihtsalt öeldes:
Sarnane composite key-ga – koosneb mitmest veerust. Mõnikord kasutatakse mõlemat terminit samas tähenduses.

Kompoundvõti aitab hallata keerukamaid seoseid, näiteks registreeringuid, kus kirjet määravad mitu veergu korraga.


7. Superkey (ülevõti)

Lihtsalt öeldes:
Superkey on mis tahes veergude kombinatsioon, mis identifitseerib iga kirje unikaalselt.

Näide tabelist tootajad:

  • (tootaja_id, isikukood) on superkey.
  • Primary key on alati superkey, aga superkey ei pea olema primary key.

8. Candidate Key (kandidaatvõti)

Lihtsalt öeldes:
Candidate key on superkey, mis võiks olla primary key.

Tabelis võib olla mitu kandidaadivõtit. Primary key valitakse neist, ülejäänud jäävad alternatiivvõtmeteks.

Näide tabelist klindid2:

  • Üks neist saab primary key-ks.

9. Alternate Key (alternatiivvõti)

Lihtsalt öeldes:
Alternate key on candidate key, mis ei valitud primary key-ks, aga on ikka unikaalne.

Alternatiivvõtmed on kasulikud, kui soovite säilitada täiendavaid unikaalseid identifikaatoreid, mida saab kasutada otsinguks või seoste loomiseks.

Näide:
Kui klient_ID on primary key, siis isikukod on alternate key.


Lõpus: Kasutatud allikad

Kõik kood :

-- 1. peamine võti
create table opilased (
    opilase_id int primary key,   -- peamine võti
    eesnimi varchar(50),
    klass varchar(10)
);


-- 2. välisvõti  
-- välisvõti ühendab ühe tabeli teise tabeli peamise võtmega  

create table kliendid (
    klient_id int primary key,
    nimi varchar(50)
);

create table tellimused (
    tellimus_id int primary key,
    klient_id int,                -- viide tabelile kliendid
    kuupaev date,
    foreign key (klient_id) references kliendid(klient_id)
);


-- 3. unikaalne võti  
-- väärtus selles veerus ei saa korduda  
-- tabelis võib olla mitu sellist võtit  

create table kasutajad (
    id int primary key,
    kasutajanimi varchar(50),
    e_post varchar(100) unique    -- unikaalne e-post
);


-- 4. lihtne võti  
-- lihtne võti on ühe veeru peamine võti  

create table raamatud (
    raamat_id int primary key,
    pealkiri varchar(100)
);


-- 5. koostatud võti  
-- koostatud võti luuakse mitmest veerust  
-- koos moodustavad nad ainulaadse rea  

create table hinded (
    opilase_id int,
    aine varchar(50),
    hinne int,
    primary key (opilase_id, aine)  -- koostatud võti
);


-- 6. ühendatud võti  
-- võti, mis ühendab veerud erinevatest tabelitest  
-- et saada ainulaadne kombinatsioon  

create table kasutajad2 (
    kasutaja_id int primary key,
    nimi varchar(50)
);

create table raamatud2 (
    raamat_id int primary key,
    pealkiri varchar(100)
);

create table laenud (
    laen_id int primary key,
    raamat_id int,
    kasutaja_id int,
    foreign key (raamat_id) references raamatud2(raamat_id),
    foreign key (kasutaja_id) references kasutajad2(kasutaja_id),
    unique (raamat_id, kasutaja_id)  -- ainulaadne paar raamat-kasutaja
);


-- 7. supervõti  
-- iga veergude kombinatsioon, mis teeb rea ainulaadseks  
-- võib sisaldada liigseid veerge  

create table tootajad (
    tootaja_id int,
    nimi varchar(50),
    isikukood varchar(20),
    primary key (tootaja_id),
    unique (tootaja_id, isikukood)  -- supervõti näide
);


-- 8. kandidaadi võti  
-- võimalikud peamise võtme variandid  
-- üks valitakse peamiseks  

create table kliendid2 (
    klient_id int primary key,     -- valitud peamiseks võtmeks
    isikukood varchar(20) unique,  -- teine võimalik võti
    e_post varchar(100) unique     -- veel üks variant
);


-- 9. alternatiivne võti  
-- see on kandidaat, mida ei valitud peamiseks võtmeks  

create table kliendid3 (
    klient_id int primary key,     -- peamine võti
    isikukood varchar(20) unique,  -- alternatiivne võti
    e_post varchar(100)
);




-- Tabel: opilased
insert into opilased (opilase_id, eesnimi, klass) values
(1, 'Jaan', '10A'),
(2, 'Mari', '10B'),
(3, 'Liis', '11A'),
(4, 'Tõnis', '11B');

-- Tabel: kliendid
insert into kliendid (klient_id, nimi) values
(1, 'Mati Mees'),
(2, 'Kati Kask'),
(3, 'Jaan Jõgi');

-- Tabel: tellimused
insert into tellimused (tellimus_id, klient_id, kuupaev) values
(1, 1, '2025-10-01'),
(2, 2, '2025-10-15'),
(3, 3, '2025-10-20');

-- Tabel: kasutajad
insert into kasutajad (id, kasutajanimi, e_post) values
(1, 'jaan123', 'jaan123@mail.com'),
(2, 'kati_kask', 'kati.kask@mail.com'),
(3, 'mari_m', 'mari_m@mail.com');

-- Tabel: raamatud
insert into raamatud (raamat_id, pealkiri) values
(1, 'Tarkuse puu'),
(2, 'Ränduri tee'),
(3, 'Eesti ajalugu');

-- Tabel: hinded
insert into hinded (opilase_id, aine, hinne) values
(1, 'Matemaatika', 5),
(2, 'Füüsika', 4),
(3, 'Ajalugu', 5),
(4, 'Keemia', 3);

-- Tabel: kasutajad2
insert into kasutajad2 (kasutaja_id, nimi) values
(1, 'Aleksei'),
(2, 'Eve');

-- Tabel: raamatud2
insert into raamatud2 (raamat_id, pealkiri) values
(1, 'Tundmatu saar'),
(2, 'Jõuluvana saladus');

-- Tabel: laenud
insert into laenud (laen_id, raamat_id, kasutaja_id) values
(1, 1, 1),
(2, 2, 2);

-- Tabel: tootajad
insert into tootajad (tootaja_id, nimi, isikukood) values
(1, 'Anna Aadamson', '12345678901'),
(2, 'Pekka Pärtel', '23456789012');

-- Tabel: kliendid2
insert into kliendid2 (klient_id, isikukood, e_post) values
(1, '34567890123', 'mattimees@mail.com'),
(2, '45678901234', 'katikask@mail.com');

-- Tabel: kliendid3
insert into kliendid3 (klient_id, isikukood, e_post) values
(1, '56789012345', 'jaanjoogi@mail.com'),
(2, '67890123456', 'katiekask@mail.com');


-- 1. Tabel: opilased
select * from opilased;

-- 2. Tabel: kliendid
select * from kliendid;

-- 3. Tabel: tellimused
select * from tellimused;

-- 4. Tabel: kasutajad
select * from kasutajad;

-- 5. Tabel: raamatud
select * from raamatud;

-- 6. Tabel: hinded
select * from hinded;

-- 7. Tabel: kasutajad2
select * from kasutajad2;

-- 8. Tabel: raamatud2
select * from raamatud2;

-- 9. Tabel: laenud
select * from laenud;

-- 10. Tabel: tootajad
select * from tootajad;

-- 11. Tabel: kliendid2
select * from kliendid2;

-- 12. Tabel: kliendid3
select * from kliendid3;
Code language: JavaScript (javascript)