Vastus: See on võimalik, aga ma ei soovita. Soovitan nende asemel luua ja kasutada klassifikaatorite tabeleid.
CREATE TYPE t_tellimuse_seisundi_liik AS ENUM('loodud','kinnitatud','tühistatud','täidetud');
CREATE TABLE Tellimus (tellimus_id SERIAL NOT NULL,
tellimuse_seisundi_liik t_tellimuse_seisundi_liik DEFAULT 'loodud' NOT NULL,
CONSTRAINT pk_tellimus PRIMARY KEY (tellimus_id));
Selles artiklis nimetatakse ja hinnatakse erinevaid võimalusi, kuidas piirata väärtuste hulka, mida PostgreSQL tabeli veerus saab salvestada. Üheks võimaluseks on kasutada veeru tüübina loendustüüpi. Artikkel toob kenasti välja selle lähenemise eelised ja puudused ning ütleb, et seda sobiks kasutada (mis ei tähenda, et seda peab kasutama) seisundite registreerimiseks. Lisaks artiklis nimetatud probleemidele toon välja veel kaks.
1.
Kuna lahenduses puuduvad klassifikaatoritel koodid, siis on andmete süsteemisisene esitus ja andmete kasutajatele esitus liigselt läbipõimunud. Klassifikaatoritel on üldiselt koodid ja nimetused (
http://metaweb.stat.ee/?siteLanguage=ee). Koode kasutatakse süsteemi sees, nimetusi kuvatakse kasutajatele.
Selles süsteemis on nimetused ühtlasi koodide eest, mis tähendab, et kui arusaadavuse parandamiseks tuleb kasutajale esitatavat nimetust muuta, siis tuleb muuta kõiki andmebaasikeele lauseid, milles vana nimetust kasutati.
SELECT *
FROM Tellimus
WHERE tellimuse_seisundi_liik='loodud';
2.
Üheks loendustüüpi veergude kasutamise õigustuseks on, et ei ole tõenäoline, et nende abil esitatavate olemitüüpide kohta oleks vaja hakata registreerima täiendavaid andmeid. Milliseid andmeid võiks siiski olla üsna tõenäoliselt vaja tellimuse seisundi liikide kohta veel koguda?
- Klassifikaatori väärtuse vabatekstiline kirjeldus.
- Seisund. Mõned klassifikaatori väärtused võivad muutuda mitteaktiivseks, st neid võidi kasutada minevikus, kuid neid ei saa enam kasutada uute olemite iseloomustamiseks.
- Mitmekeelne sisu - erinevad klassifikaatori nimetused erinevates keeltes süsteemi kasutajatele (ingliskeelses kasutajaliideses peaks seisundi nimi olema "created", mitte "loodud"). Neid lahendusi siin Te kasutada ei saaks: https://digikogu.taltech.ee/et/Item/3c203fdf-0162-4545-a3d8-fcfa150f5301