目次
1. ENUM tüübi ülevaade
Mis on ENUM tüüp
MySQLi ENUM (loend) tüüp on andmetüüp, mis salvestab ainult ühe väärtuse eelnevalt määratletud loendist. Kuna veergus saab salvestada ainult loendis määratud kindlaid stringe, aitab see säilitada andmete järjepidevust ja takistada kehtetuid andmete sisestusi. Näiteks, kui kasutaja peab valima soo või tootekategooria jms piiratud valikute hulgast, saab ENUM tüüpi kasutades vältida tarbetuid veakontrolle. Allpool on näide tabeli loomisest, mis sisaldab ENUM tüüpi veergu:CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
category ENUM('toiduained', 'riided', 'kodumasinad', 'mööbel') NOT NULL
);
Selles näites võib “category” veerg sisaldada ainult ü neljast väärtusest: “toiduained”, “riided”, “kodumasinad”, “mööbel”. See muudab andmete haldamise lihtsamaks ja vähendab ekslikke sisestusi.ENUM tüübi peamised kasutusalad
ENUM tüüpi kasutatakse peamiselt järgmistel eesmärkidel:- Oleku haldamine:ti edenemise jälgimiseks loetletakse olekud nagu “Alustamata”, “Pooleli”, “Lõpetatud”.
- Kategooriate jaotamine: kasutatakse toodete, kasutajatüüpide, ametikohtade jms eelnevalt määratletud kategooriate valikute haldamiseks.
- Hinnangute määramine: näiteks mängude raskusastmed (“Algaja”, “Kesktase”, “Kogenud”) või toodete hindamised (“Hea”, “Keskmine”, “Halb”).

2. ENUM-tüübi eelised ja puudused
Eelised
- Andmete terviklikkuse parandamine ENUM-tüübis saab salvestada ainult loendis määratud väärtusi, seega on andmed järjekindlad ja haldamine lihtsam. Näiteks sugu haldamisel on lubatud ainult kindlad väärtused nagu „mees“ või „naine“, mis takistab vale sisestamist.
- Salvestusruumi tõhusus ENUM-tüübis on loendis iga väärtusele määratud täisarvu indeks, seega salvestatakse tegelikult täisarvuna, mis säästab salvestusruumi võrreldes VARCHAR-tüübiga. Näiteks suuruse info nagu ’small’ või ’large’ salvestamine VARCHAR-ina võtab rohkem ruumi, kuid ENUM-iga defineerides on võimalik see tõhusalt salvestada.
Puudused
- Paindlikkuse puudumine ENUM-tüüp võimaldab kasutada ainult kindlaks määratud valikuid, seega uue väärtuse lisamiseks on vaja muuta tabeli struktuuri. Seetõttu ei sobi see juhtudel, kus valikuid tuleb dünaamiliselt suurendada.
- Vea käitlemise keerukus Kui sisestatakse kehtetu väärtus, tekib viga või salvestatakse tühi string. See võib muuta arendajate jaoks silumise keerulisemaks.
3. ENUM tüübi seadistamine ja kasutusnäited
Põhiseadistus ja veahaldus
ENUM tüübi seadistamine tähendab lihtsalt loendis salvestatavate stringide määramist. Allpool on näide, kuidas määrata ENUM tüüpi veerg tabelis:CREATE TABLE shirts (
id INT AUTO_INCREMENT PRIMARY KEY,
size ENUM('XS', 'S', 'M', 'L', 'XL') NOT NULL
);
Selles olukorras saab “size” veerg salvestada ainult ühe väärtuse viiest: “XS”,”S”,”M”,”L”,”XL”. Kui proovida sisestada loendis mitteolevat väärtust (näiteks ’XXL’), tekib Data truncated
viga. See takistab loendis mittesalvestatud väärtuste sisestamist ja aitab säilitada andmete järjepidevust.Tegelik kasutusnäide
Järgnevalt näidatakse, kuidas kasutada ENUM tüüpi kasutajate rolide (“administraator”,”tavakasutaja”,”külaline”) haldamiseks.CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
role ENUM('administraator', 'tavakasutaja', 'külaline') NOT NULL
);
Kui soovite rollide põhjal anda erinevaid kasutusõigusi, aitab ENUM tüüpi veeru kasutamine andmete kooskõla säilitada.
4. ENUM-tüübi indeksid ja NULL-i käsitlemine
Indeksi kasutamine
ENUM-tüübi väärtustele määratakse loendi järjekorra alusel alates 1 indeksid. Näiteks, kui on ENUM-veerg, mis salvestab suuruse teavet, nagu allpool:CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
size ENUM('S', 'M', 'L', 'XL')
);
“S” on indeks 1, “M” on indeks 2… ning nii edasi. Seda indeksit saab kasutada WHERE-lause tingimusena, võimaldades tõhusat andmete töötlemist.SELECT * FROM products WHERE size = 2;
See päring toob välja kirjed, mille suurus on “M”.NULL-i ja tühja stringi käsitlemine
Kui ENUM-veerg-i, saab salvestada NULL-väärtuse isegi siis, kui väärtus ei sisaldu loendis. Lisaks, kui viga sisestatakse tühja stringina, salvestatakse see indeksiga 0, mis võimaldab tuvastada valesti sisestatud andmeid.5. ENUM tüübi tähemärgistik ja sortimisjärjekord
Tähemärgistiku ja sortimisjärjekorra seadistamise meetod
ENUM tüüpi saab, nagu CHAR ja VARCHAR, määrata tähemärgistik ja sortimisjärjekord. See on eriti oluline mitmekeelse toe ja sortimisjärjekorda arvestava otsingu puhul. Allpool on näide:CREATE TABLE documents (
id INT AUTO_INCREMENT PRIMARY KEY,
language ENUM('jaapani', 'inglise', 'hiina') CHARACTER SET utf8 COLLATE utf8_general_ci
);
Selles näites on määratud UTF-8 tähemärgistik ja üldine sortimisjärjekord.6. ENUM-tüübi laiendatavus ja asendusmeetodid
Laiendamise võtted
ENUM-tüüp puudub paindlikkus vabause salvestamiseks veergu, seega ei sob dünaamiliselt muutuvate andmete jaoks. Sel juhul on võimalik lisada valik “Muu” ja luua eraldi vaba sisestuse veerg:ALTER TABLE products
MODIFY COLUMN category ENUM('toiduained', 'riided', 'kodumasinad', 'mööbel', 'muud') NOT NULL,
ADD COLUMN category_other VARCHAR(255) DEFAULT NULL;
Nii saab salvestada ENUM-tüüpi puuduvad elemendid eraldi VARCHAR-veergu, võimaldades dünaamilist käsitlemist.