Andmebaasi võtmed (Keys)

1. Primaarvõti (Primary Key)

  • Definitsioon: See on tulbas olev unikaalne tunnus, mis tuvastab kindlalt iga rea andmebaasi tabelis.
  • Milleks kasutatakse: Selle abil saab andmebaasihaldur (DBMS) ridade vahel vahet teha ja tagada, et andmed ei korduks.
  • Erinevus: Tabelis saab olla ainult üks primaarvõti ning see ei tohi kunagi olla tühi (NULL).
  • SQL näide:
CREATETABLE kasutajad (    kasutaja_id SERIAL PRIMARYKEY,-- Primaarvõti    eesnimi VARCHAR(100));

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

  • Definitsioon: Tulp või tulbad, mis viitavad teise tabeli primaarvõtmele.
  • Milleks kasutatakse: Kasutatakse tabelite vaheliste seoste loomiseks ja viitetervikluse (referential integrity) tagamiseks.
  • Erinevus: Erinevalt primaarvõtmest võib võõrvõtme väärtus tabelis korduda (nt ühel autoril on mitu raamatut).
  • SQL näide:
createtable products(product_id intprimarykeyidentity(1,1),product_name varchar(50)notnull,brand_id int,category_id int,foreignkey(category_id)references categories(category_id),model_year int,list_price decimal(7,2));

phpMy Admidinis MUL = FK

3. Unikaalne võti (Unique Key)

  • Definitsioon: Piirang, mis tagab, et kõik väärtused tulbas on üksteisest erinevad.
  • Milleks kasutatakse: Et vältida topeltandmeid (nt e-posti aadressid või isikukoodid), mis ei ole tabeli peamiseks võtmeks.
  • Erinevus: Erinevalt primaarvõtmest võib unikaalne võti sisaldada tühja väärtust (NULL).
  • SQL näide:
createtable customers(customer_id intprimarykey AUTO_INCREMENT,first_name varchar(30)notnull,last_name varchar(30)notnull,email varchar(30)unique-- Unikaalne võti);

4. Lihtne võti (Simple Key)

  • Definitsioon: Võti (tavaliselt primaarvõti), mis koosneb ainult ühest tulbast.
  • Milleks kasutatakse: Kõige tavalisem viis andmete märgistamiseks, näiteks unikaalne ID-number.
  • Erinevus: Koosneb ühest väljast, samas kui liitvõtmed vajavad mitut välja.
  • SQL näide:

CREATE TABLE tooted (
toote_kood INT PRIMARY KEY AUTO_INCREMENT-- Lihtne võti

);

5. Liitvõti (Composite Key)

  • Definitsioon: Võti, mis koosneb kahest või enamast tulbast, mis koos moodustavad unikaalse tunnuse.
  • Milleks kasutatakse: Kasutatakse siis, kui üks tulp üksi ei suuda rida unikaalselt tuvastada (nt eesnimi ja perekonnanimi koos).
  • Erinevus: See on alati kombinatsioon mitmest väljast.
  • SQL näide:
CREATETABLE piletid (    saali_nr INT,    istekoha_nr INT,PRIMARYKEY(saali_nr, istekoha_nr)-- Liitvõti);

6. Sõltuv liitvõti (Compound Key)

  • Definitsioon: Liitvõti, kus iga selle osa on eraldiseisev võõrvõti, mis viitab mõnele muule tabelile.
  • Milleks kasutatakse: Kasutatakse seosetabelites (nt õpilaste ja kursuste vahel), et näidata, millised objektid on omavahel seotud.
  • SQL näide:
CREATETABLE stocks (    store_id INT,    product_id INT,    quantity INT,PRIMARYKEY(store_id, product_id)--Compound Key);

7. Supervõti (Superkey)

  • Definitsioon: Mis tahes tulbade komplekt tabelis, mis võimaldab rida unikaalselt tuvastada.
  • Milleks kasutatakse: See on teoreetiline mõiste, et leida kõik võimalikud kombinatsioonid, mis rida eristavad.
  • Erinevus: Võib sisaldada ka “liigseid” tulpasid, mis ei ole unikaalsuse jaoks tegelikult vajalikud.
  • Naide: (customer_id, first_name) on supervõti, sest customer_id on juba unikaalne ning first_name on sellele lihtsalt lisatud lisaatribuut.
createtable customers(customer_id intprimarykey AUTO_INCREMENT,first_name varchar(30)notnull,last_name varchar(30)notnull,email varchar(30)unique-- Unikaalne võti ja supervõti);

8. Potentsiaalne võti (Candidate Key)

  • Definitsioon: Minimaalne supervõti ehk võti, millest ei saa enam ühtegi tulpa eemaldada, ilma et unikaalsus kaoks.
  • Milleks kasutatakse: Nende hulgast valitakse tavaliselt välja üks, millest saab tabeli primaarvõti.
  • Erinevus: Ei sisalda kunagi üleliigseid andmeid, erinevalt supervõtmest.
createtable customers(customer_id intprimarykey AUTO_INCREMENT,-- Candidate Key first_name varchar(30)notnull,last_name varchar(30)notnull,email varchar(30)unique-- Candidate Key street varchar(30),city  varchar(30),_statevarchar(30),zip_code varchar(10));
Võtme tüüp (Võtme liik)Tulvade komplekt (Veerud)Selgitus (Miks see nii on?)
Candidate Key (Potentsiaalne võti)customer_idMinimaalne ja unikaalne komplekt. Selles puuduvad liigsed andmed.
Candidate Key (Potentsiaalne võti)emailMinimaalne ja unikaalne tänu unique piirangule. Sobib rearea unikaalseks tuvastamiseks.
Superkey (Supervõti)customer_id + last_nameSee on unikaalne komplekt, kuid sisaldab liigset infot (perekonnanimi).
Superkey (Supervõti)email + streetUnikaalne tänu e-mailile, kuid tänavanimi on tuvastamiseks mittevajalik lisa.
Mitte mingi võtifirst_name + last_nameEi taga unikaalsust, kuna andmebaasis võib olla mitu sama ees- ja perekonnanimega inimest.

9. Alternatiivne võti (Alternate Key)

  • Definitsioon: Potentsiaalne võti, mida ei valitud tabeli primaarvõtmeks.
  • Milleks kasutatakse: See jääb tabelisse toimima unikaalse võtmena (Unique Key).
  • Erinevus: See on “varuvõti” – kui meil on ID ja Email, ning ID on primaarvõti, siis Email on alternatiivne võti.
createtable customers(customer_id intprimarykey AUTO_INCREMENT,-- primary keyfirst_name varchar(30)notnull,last_name varchar(30)notnull,email varchar(30)unique-- Alternate Keystreet varchar(30),city  varchar(30),_statevarchar(30),zip_code varchar(10));