**********
Gemini 2.5 Pro
**********
Reeglite rikkumised:

Reegel 1: FALSE

Asukoht: Tabel Client, kitsendus FK_Isik. Välisvõtmel puudub viitav veerg: FOREIGN KEY () REFERENCES Isik (isik_id).

Asukoht: Tabel Voodi_tyyp, kitsendus PK_Voodi_tyyp. Primaarvõtme kitsendus viitab veerule voodi_tyyp_kood, kuid tabelis on defineeritud veerg voodi_tyyp_id.

Asukoht: Tabel Toa_kategooria, kitsendus PK_Toa_kategooria. Primaarvõtme kitsendus viitab veerule toa_kategooria_kood, mida tabelis ei eksisteeri (on olemas veerg kood).

Reegel 2: FALSE

Asukoht: Tabel Klassifikaator. Ühise klassifikaatorite tabeli Klassifikaator loomine on keelatud. Lisaks viitavad sellele tabelid Tootaja_seisundi_liik, Toa_seisundi_liik ja Kliendi_seisundi_liik.

Reegel 3: FALSE

Asukoht: Tabel Isik. Tabelis on kaks veergu nimega kood.

Reegel 4: FALSE

Asukoht: Tabel Klassifikaator. Veeru nimi on kood.

Asukoht: Tabel Toa_kategooria. Veeru nimi on kood.

Asukoht: Tabel Isik. Tabelis on kaks veergu nimega kood.

Reegel 5: FALSE

Asukoht: Tabel Voodi_tyyp. Klassifikaatori tabeli primaarvõtme veeru nimi (voodi_tyyp_id) sisaldab sõna id, mitte kood või code. (Lisaks on vastuolu PK kitsenduse definitsiooniga, vt Reegel 1).

Asukoht: Tabel Toa_kategooria. Klassifikaatori tabeli primaarvõtme veeru nimi (kood) ei sisalda tabeli nime ja on liiga üldine (rikub ka Reegel 4). Kui see peaks olema toa_kategooria_kood, siis on see vastuolus PK kitsenduse definitsiooniga (vt Reegel 1).

Reegel 6: FALSE

Asukoht: Tabel Klassifikaator. Primaarvõtme kitsendusel puudub nimi (kasutatud inline deklaratsiooni).

Asukoht: Tabel Tootaja. Primaarvõtme kitsendusel puudub nimi (kasutatud inline deklaratsiooni).

Reegel 7: FALSE

Asukoht: Tabel Kliendi_seisundi_liik, kitsendus FK_Toa_seisundi_liik_toa_seisundi_liik_kood. Kitsenduse nimi ei sisalda tabeli Kliendi_seisundi_liik nime.

Asukoht: Tabel Client, kitsendus PK_isik_id. Kitsenduse nimi ei sisalda tabeli Client nime.

Asukoht: Tabel Client, kitsendus FK_Isik. Kitsenduse nimi ei sisalda tabeli Client nime.

Asukoht: Tabel Tuba, kitsendus AK_nimetus. Kitsenduse nimi ei sisalda tabeli Tuba nime.

Reegel 8: FALSE

Asukoht: Tabel Hoone. Tabeli nimi on eesti keeles (Hoone), aga primaarvõtme veeru nimi on inglise keeles (building_code).

Asukoht: Tabel Client. Tabeli nimi on inglise keeles (Client), aga veerud (isik_id, kliendi_seisundi_liik_kood) ja osa kitsenduste nimedest (Klient, Isik) kasutavad eesti keelt.

Asukoht: Tabel Tuba. Tabeli nimi on eesti keeles (Tuba), aga üks veergudest on inglise keeles (name).

Asukoht: Tabel Tootaja_rolli_omamine. Tabeli ja enamus veergude nimed on eesti keeles, aga veerg end_time on inglise keeles.

Reegel 9: FALSE

Asukoht: Tabel Client, veerg onNousTylitamisega. Tõeväärtustüüpi veeru nimi ei alga eesliitega on_ (ja kasutab camelCase'i, mis rikub Reegel 11).

Asukoht: Tabel Kasutajakonto, veerg aktiivne. Tõeväärtustüüpi veeru nimi ei alga eesliitega on_.

Reegel 10: FALSE

Asukoht: Mitmed tabelid. Primaarvõtmete (PK) nimed ei ole järjekindlad. Mõnel tabelil puudub nimi (Reegel 6 rikkumine), tabelis Client on nimi PK_isik_id ja tabelis Kasutajakonto on PK_Kasutajakonto_isik_id, mis ei järgi standardset pk_<tabeli_nimi> mustrit.

Asukoht: Tabel Tuba. Alternatiivvõtme (AK) nimi AK_nimetus ei ole järjekindel teiste AK_<tabeli_nimi>_<veerud> nimedega.

Asukoht: Mitmed tabelid. Välisvõtmete (FK) nimed ei ole järjekindlad. Kasutatakse erinevaid mustreid nagu FK_<viitav>_<viidatav>, FK_<viitav>_<veerud>, <viitav>_<viidatav>, <viitav>_<roll>. Näiteks FK_Isik (tabelis Client), Tootaja_Mentor (tabelis Tootaja), Tuba_Toa_tyyp (tabelis Tuba).

Reegel 11: FALSE

Asukoht: Tabel Client. Tabeli nimi Client kasutab PascalCase'i. Veerg onNousTylitamisega kasutab camelCase'i.

Asukoht: Tabel Tootaja_rolli_omamine. Veerg end_time kasutab camelCase'i (peaks olema end_time).

Reegel 12: FALSE

Asukoht: Tabel Toa_kategooria_omamine. Tabelil puudub primaarvõtme kitsendus.

Reegel 13: FALSE

Asukoht: Tabel Tootaja_seisundi_liik, veerg tootaja_seisundi_liik_kood. Veerus, mille nimi sisaldab kood, genereeritakse väärtuseid süsteemi poolt (Counter).

Reegel 14: FALSE

Asukoht: Tabel Tootaja_seisundi_liik. Klassifikaatori tabelis genereeritakse primaarvõtme (tootaja_seisundi_liik_kood) väärtuseid süsteemi poolt (Counter).

Reegel 15: FALSE

Asukoht: Tabel Tootaja_seisundi_liik, veerg tootaja_seisundi_liik_kood. Välisvõtme veerus (mis on siin ka PK) genereeritakse väärtuseid süsteemi poolt (Counter).

Asukoht: Tabel Kasutajakonto, veerg isik_id. Välisvõtme veerus (mis on siin ka PK) genereeritakse väärtuseid süsteemi poolt (Counter).

Reegel 16: FALSE

Asukoht: Tabel Isik. Tabelis on süsteemi genereeritud surrogaatvõti isik_id (Counter), kuid puudub sisuline võti (UNIQUE kitsendus NOT NULL veergudel, nt isikukood või e_meil).

Asukoht: Tabel Kasutajakonto. Tabelis on süsteemi genereeritud surrogaatvõti isik_id (Counter), kuid ainus UNIQUE kitsendus (AK_Kasutajakonto_isik_id) on surrogaatvõtme enda peal, mis ei loe sisulise võtmena.

Reegel 17: FALSE

Asukoht: Tabel Kasutajakonto. UNIQUE kitsendus AK_Kasutajakonto_isik_id on defineeritud täpselt samale veerule (isik_id), millele on defineeritud PRIMARY KEY kitsendus PK_Kasutajakonto_isik_id.

Reegel 18: FALSE

Asukoht: Tabel Tootaja_seisundi_liik, kitsendus FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood. Välisvõti viitab veerule kood tabelis Klassifikaator, kuid sellel puudub ON UPDATE CASCADE.

Asukoht: Tabel Toa_seisundi_liik, kitsendus FK_Toa_seisundi_liik_toa_seisundi_liik_kood. Välisvõti viitab veerule kood tabelis Klassifikaator, kuid sellel puudub ON UPDATE CASCADE.

Asukoht: Tabel Kliendi_seisundi_liik, kitsendus FK_Toa_seisundi_liik_toa_seisundi_liik_kood. Välisvõti viitab veerule kood tabelis Klassifikaator, kuid sellel puudub ON UPDATE CASCADE.

Asukoht: Tabel Isik, kitsendus FK_Isik_Riik. Välisvõti viitab veerule riik_kood tabelis Riik, kuid sellel puudub ON UPDATE CASCADE.

Reegel 19: FALSE

Asukoht: Tabel Tootaja, kitsendus Tootaja_Mentor. Välisvõti viitab veerule isik_id (tabelis Tootaja), mis lõpeb id-ga, kuid sellel on ON UPDATE CASCADE.

Asukoht: Tabel Tuba, kitsendus FK_Tuba_Voodi_tyyp. Välisvõti viitab veerule voodi_tyyp_id (tabelis Voodi_tyyp), mis lõpeb id-ga, kuid sellel on ON UPDATE CASCADE. (Eeldusel, et Voodi_tyyp tabeli veerg on voodi_tyyp_id nagu deklareeritud, mitte voodi_tyyp_kood nagu PK viitab).

Reegel 20: FALSE

Asukoht: Tabel Kasutajakonto, kitsendus FK_Kasutajakonto_Isik. Välisvõti realiseerib 1:1 seose (FK veerg isik_id on ka PK), kuid sellel puudub ON DELETE CASCADE.

Asukoht: Tabel Tootaja, kitsendus FK_Tootaja_Isik. Välisvõti realiseerib 1:1 seose (FK veerg isik_id on ka PK), kuid sellel puudub ON DELETE CASCADE.

Reegel 21: FALSE

Asukoht: Tabel Tootaja_seisundi_liik, kitsendus FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood. Välisvõti viitab klassifikaatori tabelile Klassifikaator, kuid sellel on ON DELETE CASCADE.

Asukoht: Tabel Toa_seisundi_liik, kitsendus FK_Toa_seisundi_liik_toa_seisundi_liik_kood. Välisvõti viitab klassifikaatori tabelile Klassifikaator, kuid sellel on ON DELETE CASCADE.

Asukoht: Tabel Kliendi_seisundi_liik, kitsendus FK_Toa_seisundi_liik_toa_seisundi_liik_kood. Välisvõti viitab klassifikaatori tabelile Klassifikaator, kuid sellel on ON DELETE CASCADE.

Asukoht: Tabel Tuba, kitsendus Tuba_Toa_tyyp. Välisvõti viitab klassifikaatori tabelile Toa_tyyp, kuid sellel on ON DELETE CASCADE.

Reegel 22: FALSE

Asukoht: Tabel Tuba, kitsendus FK_Tuba_Toa_seisundi_liik. Välisvõtmel on ON DELETE SET NULL, kuid selle veerg toa_seisundi_liik_kood on deklareeritud kui NOT NULL.

Reegel 23: FALSE

Asukoht: Tabel Tuba, kitsendus FK_Tuba_Voodi_tyyp. Välisvõtmel on ON DELETE SET DEFAULT, kuid selle veerul voodi_tyyp_kood puudub veeru definitsioonis DEFAULT väärtus.

Reegel 24: FALSE

Asukoht: Tabel Tuba. Kasutatakse segamini ON UPDATE NO ACTION (kitsendusel FK_Tuba_Tootaja_registreerija) ja ON UPDATE RESTRICT (kitsendusel Tuba_Tootaja_viimane_muutja).

Reegel 25: FALSE

Asukoht: Tabel Client defineeritakse enne tabelit Isik, millele see viitab (FK_Isik).

Asukoht: Tabel Tootaja_rolli_omamine defineeritakse enne tabelit Tootaja_roll, millele see loogiliselt (ja peaks ka FK kaudu) viitama peaks. Kuigi FKd Tootaja_roll tabelile pole defineeritud, siis loogiline sõltuvus eeldab Tootaja_roll tabeli varasemat loomist.

Märkus: Mitmed teised sõltuvused on korrektses järjekorras, kuid eelnevad kaks muudavad esitatud järjekorra valeks.

Reegel 26: FALSE

Asukoht: Tabel Tootaja_roll. Antud DDL-is ei viita ükski teine tabel sellele tabelile välisvõtmega (eeldaks FK-d tabelist Tootaja_rolli_omamine, mis puudub). Tabel Tootaja_roll ise samuti ei viita ühelegi teisele tabelile. Seega on see tabel isoleeritud.

Reegel 27: FALSE

Asukoht: Tabel Isik. Veerud eesnimi ja perenimi on deklareeritud kui NOT NULL.

Reegel 28: FALSE

Asukoht: Tabel Isik, veerg viimase_muutm_aeg. Viimase muutmise aja veerg ei ole deklareeritud kui NOT NULL. (Rikub ka Reegel 30).

Asukoht: Tabel Tootaja_rolli_omamine, veerg end_time. Kui end_time loetakse muutmise/lõpetamise ajaks, siis peaks see olema NOT NULL. Kui see on lubatud olla NULL (märkimaks lõpetamata rolli), siis see reegel ei rakendu sellele veerule. Kuid alguse_aeg on NOT NULL, mis on korrektne.

Reegel 29: FALSE

Asukoht: Tabel Tuba, veerg viimase_muutja_id. Viimase muutja identifikaatori veerg ei ole deklareeritud kui NOT NULL.

Reegel 30: FALSE

Asukoht: Tabel Klassifikaator, veerg on_aktiivne. Veerul on DEFAULT TRUE, kuid puudub NOT NULL.

Asukoht: Tabel Client, veerg onNousTylitamisega. Veerul on DEFAULT False, kuid puudub NOT NULL.

Asukoht: Tabel Isik, veerg viimase_muutm_aeg. Veerul on DEFAULT Now(), kuid puudub NOT NULL.

Reegel 31: FALSE

Asukoht: Tabel Client, veerg kliendi_seisundi_liik_kood. Välisvõtme veerul, mille nimes on seisundi_liik_kood, puudub vaikimisi väärtus (DEFAULT).

Reegel 32: FALSE

Asukoht: Tabel Tuba, veerg viimase_muutm_aeg. Viimase muutmise aja veerul puudub vaikimisi väärtus (DEFAULT).

Asukoht: Tabel Tootaja_rolli_omamine, veerg alguse_aeg. Registreerimise (alguse) aja veerul puudub vaikimisi väärtus (DEFAULT).

Reegel 33: FALSE

Asukoht: Tabel Tuba, veerg kommentaar. Veerg kommentaari jaoks (Text(50)) ei luba vähemalt 255 tähemärki.

Reegel 34: FALSE

Asukoht: Tabel Isik, veerg eesnimi. Veeru pikkus (Text(150)) ületab 50 tähemärki.

Asukoht: Tabel Isik, veerg perenimi. Veeru pikkus (Text(200)) ületab 50 tähemärki.

Reegel 35: FALSE

Asukoht: Tabel Isik, veerg e_meil. Veeru pikkus (Text(255)) ei ole täpselt 254 tähemärki.

Reegel 36: FALSE

Asukoht: Tabel Tuba, veerg hinna_vahemiku_algus. Kasutatud on ujukomatüüpi (float).

Reegel 37: FALSE

Asukoht: Tabel Tuba, veerg hinna_vahemiku_lopp. Kasutatud on decimal tüüpi, kuid pole määratud täpsust (precision) ega skaalat (scale).

**********
Gemini 2.5 Flash
**********

Reegel 1 pole täidetud: Üheski lauses ei ole katkist PRIMARY KEY, UNIQUE, FOREIGN KEY ja CHECK kitsendust (nt FOREIGN KEY() REFERENCES ...).
Klassifikaator: PRIMARY KEY kitsendus on deklareeritud veerutasemel ilma CONSTRAINT nimega, kuid see pole kitsenduse deklaratsioon ise katkine. Pigem on tegemist reegli 6 rikkumisega. Siiski, reegel 1 võib viidata ka kitsendustele, mis viitavad mittesolevatele veergudele.
Voodi_tyyp: PRIMARY KEY kitsendus CONSTRAINT PK_Voodi_tyyp PRIMARY KEY (voodi_tyyp_kood) viitab veerule nimega voodi_tyyp_kood, mida tabelis ei eksisteeri (eksisteerib veerg voodi_tyyp_id).
Toa_kategooria: PRIMARY KEY kitsendus CONSTRAINT PK_Toa_kategooria PRIMARY KEY (toa_kategooria_kood) viitab veerule nimega toa_kategooria_kood, mida tabelis ei eksisteeri (eksisteerib veerg kood).
Client: FOREIGN KEY kitsendus CONSTRAINT FK_Isik FOREIGN KEY () REFERENCES Isik (isik_id) deklareerib tühja veergude loetelu.
Tootaja: PRIMARY KEY kitsendus on deklareeritud veerutasemel isik_id Long NOT NULL PRIMARY KEY.
Reegel 2 pole täidetud: Andmebaasis ei ole ühist klassifikaatorite tabelit (nt Klassifikaator), st iga klassifikaatori tüübi kohta luuakse eraldi tabel.
Tabel Klassifikaator eksisteerib.
Tabelid Tootaja_seisundi_liik, Toa_seisundi_liik ja Kliendi_seisundi_liik omavad välisvõtmeid, mis viitavad tabelile Klassifikaator.
Reegel 3 pole täidetud: Üheski tabelis ei ole mitut sama nimega veergu.
Tabelis Isik on kaks veergu nimega kood.
Reegel 4 pole täidetud: Üheski tabelis ei ole veerge, mille nimi on ainult kood, code, id (st näiteks isik_id ja riik_kood ei lähe arvesse).
Tabelis Klassifikaator on veerg nimega kood.
Tabelis Toa_kategooria on veerg nimega kood.
Tabelis Isik on kaks veergu nimega kood.
Reegel 5 pole täidetud: Klassifikaatorite tabelites sisaldub primaarvõtme veergude nimedes sõna kood või code, mitte id.
Tabelis Voodi_tyyp on primaarvõtmeks (vastavalt CONSTRAINT PK_Voodi_tyyp deklaratsioonile, kuigi see on katki - R1 rikkumine) mõeldud veerg, mille nimi (tabelis eksisteeriv veerg voodi_tyyp_id) sisaldab sõna id, mitte kood või code.
Reegel 6 pole täidetud: Kõigile PRIMARY KEY, UNIQUE, FOREIGNE KEY ja CHECK kitsendustele antakse lausetes ise nimi. Teiste sõnadega on kitsenduse deklaratsiooni osa CONSTRAINT <kitsenduse nimi>
Tabelis Klassifikaator on PRIMARY KEY kitsendus deklareeritud veerutasemel (kood Short PRIMARY KEY).
Tabelis Tootaja on PRIMARY KEY kitsendus deklareeritud veerutasemel (isik_id Long NOT NULL PRIMARY KEY).
Reegel 7 pole täidetud: Kõigis kasutaja antud kitsenduste nimedes sisaldub tabeli nimi.
Tabelis Kliendi_seisundi_liik on välisvõtme kitsendus nimega FK_Toa_seisundi_liik_toa_seisundi_liik_kood. See nimi ei sisalda tabeli nime Kliendi_seisundi_liik.
Tabelis Client on primaarvõtme kitsendus nimega PK_isik_id. See nimi ei sisalda tabeli nime Client.
Tabelis Client on välisvõtme kitsendus nimega FK_Isik. See nimi ei sisalda tabeli nime Client.
Tabelis Tuba on unikaalsuskitsendus nimega AK_nimetus. See nimi ei sisalda tabeli nime Tuba.
Reegel 8 pole täidetud: Tabeli, veergude ja kitsenduste nimedes ei kasutata segamini eesti- ja inglise keelt. Tüüpide nimed võivad olla inglise keeles. Samuti võivad kitsenduste nimedes olla lühendid pk, ak, chk, fk.
Tabelite nimed on segamini eesti (nt Hoone, Isik, Tuba) ja inglise (nt Client) keeles.
Veergude nimedes on segamini eesti (nt nimetus, eesnimi, reg_aeg) ja inglise (nt building_code tabelis Hoone, mentor tabelis Tootaja, name tabelis Tuba, end_time tabelis Tootaja_rolli_omamine) keelt.
Veeru nimi onNousTylitamisega tabelis Client kasutab PascalCase'i, mitte snake_case'i, mis viitab ka keelte segamisele nime sees.
Reegel 9 pole täidetud: Tõeväärtustüüpi veergude nimed algavad eesliitega on_ kui nimi on eesti keeles (nt on_aktiivne) või is_/has_ kui nimi on inglise keeles (nt is_active, has_completed).
Tabelis Kasutajakonto on tõeväärtustüüpi veerg aktiivne, mis ei alga eesliitega on_.
Reegel 10 pole täidetud: Sama tüüpi kitsendustele on antud nimed järjekindlalt (nt kõikidel primaarvõtme kitsendustel on nimi kujul pk_<tabeli_nimi>).
Primaarvõtmete nimed ei ole järjekindlad. Näiteks PK_Isik, PK_Tuba on kujul PK_<TabeliNimi>, aga Client.PK_isik_id ja Kasutajakonto.PK_Kasutajakonto_isik_id on teistsugusel kujul. Lisaks rikuvad need ka reeglit 7 (ei sisalda tabeli nime).
Unikaalsuskitsenduste nimed ei ole järjekindlad. Näiteks AK_Riik_nimetus ja AK_Hoone_nimetus on kujul AK_<TabeliNimi>_<VeeruNimi>, aga Tuba.AK_nimetus ei sisalda tabeli nime (rike R7) ja Isiku_seisundi_liik.AK_isiku_seisundi_liik_nimetus kasutab väiketähte tabeli nimes.
Välisvõtmete nimed ei ole järjekindlad. Mõned kasutavad FK_<TabeliNimi>_<ViidatavaTabeliNimi> (nt FK_Tuba_Hoone), mõned FK_<TabeliNimi>_<VeeruNimi> (nt FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood, kuigi see rikub R7), mõnedel puudub FK_ eesliide (nt Tootaja_Mentor, Tuba_Tootaja_viimane_muutja), mõned rikuvad R7 (nt Client.FK_Isik).
Reegel 11 pole täidetud: Nimedes ei kasutata camalCase ja PascalCase, vaid snake_case nimetamise stiili.
Tabeli nimi Client on PascalCase/CamelCase.
Veeru nimi onNousTylitamisega tabelis Client on PascalCase/CamelCase.
Reegel 12 pole täidetud: Igas tabelis on defineeritud primaarvõtme kitsendus.
Tabelis Toa_kategooria_omamine puudub PRIMARY KEY kitsendus.
Reegel 13 pole täidetud: Ühtegi veergu, mille nimes on sõna kood või code, ei genereeri väärtuseid süsteem (MS Accessis tüüp Counter või Autoincrement, PostgreSQLis notatsioon SERIAL/SMALLSERIAL/BIGSERIAL või GENERATED ALWAYS AS IDENTITY).
Tabelis Tootaja_seisundi_liik on veerg tootaja_seisundi_liik_kood (PK), mille tüüp on Counter (süsteemi poolt genereeritav).
Reegel 14 pole täidetud: Ühtegi klassifikaatori tabelisse ei genereeri võtmeväärtuseid süsteem (MS Accessis tüüp Counter või Autoincrement, PostgreSQLis notatsioon SERIAL/SMALLSERIAL/BIGSERIAL või GENERATED ALWAYS AS IDENTITY).
Tabelis Tootaja_seisundi_liik (mis on klassifikaatori tabel) on primaarvõtme veerg tootaja_seisundi_liik_kood tüübiga Counter (süsteemi poolt genereeritav).
Reegel 15 pole täidetud: Ühtegi välisvõtme veergu ei genereeri väärtuseid süsteem (MS Accessis tüüp Counter või Autoincrement, PostgreSQLis notatsioon SERIAL/SMALLSERIAL/BIGSERIAL või GENERATED ALWAYS AS IDENTITY).
Tabelis Kasutajakonto on veerg isik_id, mis on välisvõtmeks tabelisse Isik ja mille tüüp on Counter (süsteemi poolt genereeritav).
Reegel 16 pole täidetud: Kui tabelis on surrogaatvõtme veerg, millesse genereerib unikaalseid täisarvulisi väärtuseid süsteem, siis on selles tabelis ka vähemalt üks sisuline võti (UNIQUE kitsendus NOT NULL veergudel).
Tabelis Isik on surrogaat-PK isik_id (Counter). Tabelis puudub UNIQUE kitsendus NOT NULL veergudel, mis moodustaks sisulise võtme. Veerg isikukood on NOT NULL, aga sellel puudub UNIQUE kitsendus.
Tabelis Kasutajakonto on surrogaat-PK isik_id (Counter). Seal on küll UNIQUE (isik_id), aga see on sama veerg mis PK, mitte sisuline võti.
Reegel 17 pole täidetud: Tabelites ei deklareerita UNIQUE kitsendust täpselt samale veergude hulgale, millele on defineeritud PRIMARY KEY kitsendus.
Tabelis Kasutajakonto on PRIMARY KEY defineeritud veerule isik_id ja lisaks on deklareeritud UNIQUE kitsendus AK_Kasutajakonto_isik_id samale veerule isik_id.
Reegel 18 pole täidetud: Kui välisvõti viitab veerule, mille nimes on sõna kood või code, siis on sellel välisvõtmel kompenseeriv tegevus ON UPDATE CASCADE.
Tabelis Tootaja_seisundi_liik välisvõtme kitsendus FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood viitab veerule Klassifikaator.kood, kuid ON UPDATE CASCADE tegevus puudub (vaikimisi on NO ACTION või RESTRICT).
Tabelis Toa_seisundi_liik välisvõtme kitsendus FK_Toa_seisundi_liik_toa_seisundi_liik_kood viitab veerule Klassifikaator.kood, kuid ON UPDATE CASCADE tegevus puudub.
Tabelis Kliendi_seisundi_liik välisvõtme kitsendus FK_Toa_seisundi_liik_toa_seisundi_liik_kood viitab veerule Klassifikaator.kood, kuid ON UPDATE CASCADE tegevus puudub.
Tabelis Isik välisvõtme kitsendus FK_Isik_Riik viitab veerule Riik.riik_kood, kuid ON UPDATE CASCADE tegevus puudub.
Reegel 19 pole täidetud: Kui välisvõti viitab veerule, mille nimi lõpeb id, siis ei ole sellel välisvõtmel kompenseerivat tegevust ON UPDATE CASCADE.
Tabelis Tootaja välisvõtme kitsendus Tootaja_Mentor viitab veerule Tootaja.isik_id, mille nimi lõpeb id, kuid sellel on deklareeritud ON UPDATE Cascade.
Reegel 20 pole täidetud: Kui välisvõti realiseerib 1:1 seose, siis on sellel välisvõtmel kompenseeriv tegevus ON DELETE CASCADE.
Tabelites Kasutajakonto ja Tootaja on välisvõtmed, mis viitavad tabeli Isik primaarvõtmele isik_id (mis realiseerib 1:1 seost). Kummalgi välisvõtmel ei ole deklareeritud ON DELETE CASCADE tegevust (vaikimisi NO ACTION või RESTRICT).
Reegel 21 pole täidetud: Kui välisvõti viitab klassifikaatori tabelile, siis ei ole sellel välisvõtmel kompenseerivat tegevust ON DELETE CASCADE.
Tabelis Tootaja_seisundi_liik välisvõtme kitsendus FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood viitab tabelile Klassifikaator ja sellel on ON DELETE CASCADE.
Tabelis Toa_seisundi_liik välisvõtme kitsendus FK_Toa_seisundi_liik_toa_seisundi_liik_kood viitab tabelile Klassifikaator ja sellel on ON DELETE CASCADE.
Tabelis Kliendi_seisundi_liik välisvõtme kitsendus FK_Toa_seisundi_liik_toa_seisundi_liik_kood viitab tabelile Klassifikaator ja sellel on ON DELETE CASCADE.
Tabelis Tuba välisvõtme kitsendus Tuba_Toa_tyyp viitab tabelile Toa_tyyp (klassifikaatori tabel) ja sellel on ON DELETE CASCADE.
Reegel 22 pole täidetud: Kui välisvõtme veerg on kohustuslik (NOT NULL), siis on sellel välisvõtmel ei ole kompenseerivat tegevust SET NULL.
Tabelis Tuba on veerg toa_seisundi_liik_kood deklareeritud kui NOT NULL. Sellel välisvõtmel FK_Tuba_Toa_seisundi_liik on ON DELETE SET NULL tegevus.
Reegel 23 pole täidetud: Kui välisvõtme veerul puudub vaikimisi väärtus, siis on sellel välisvõtmel ei ole kompenseerivat tegevust SET DEFAULT.
Tabelis Tuba välisvõtme kitsendus FK_Tuba_Voodi_tyyp viitab veerule Voodi_tyyp.voodi_tyyp_id (eeldades, et FK viitab veerule voodi_tyyp_id, kuna voodi_tyyp_kood veergu tabelis Tuba ei ole - rike R1). FK veerg voodi_tyyp_id tabelis Tuba on NOT NULL, kuid sellel puudub vaikimisi väärtus (DEFAULT). Samal ajal on FK-l ON DELETE SET DEFAULT tegevus.
Reegel 24 pole täidetud: Välisvõtmete deklaratsioonides ei kasutata segamini NO ACTION ja RESTRICT.
Tabelis Tuba kasutatakse erinevatel välisvõtmetel nii ON UPDATE NO ACTION (kitsendus FK_Tuba_Tootaja_registreerija) kui ka ON UPDATE RESTRICT (kitsendus Tuba_Tootaja_viimane_muutja).
Reegel 25 pole täidetud: Tabelid luuakse järjekorras, et välisvõtmete deklareerimine ei tekita vigu.
Tabel Client luuakse enne tabelit Isik, kuid Client omab välisvõtit, mis viitab tabelile Isik.
Reegel 26 pole täidetud: Ei looda ühtegi sellist tabelit, mis pole välisvõtme mõttes viitava (referencing) või viidatava (referenced) tabeli rollis seotud mitte ühegi teise tabeliga.
Tabel Tootaja_roll ei ole viidatava tabeli rollis (st ükski teine tabel ei viita sellele välisvõtmega). Tabelis Tootaja_rolli_omamine on küll veerg tootaja_roll_kood, aga sellele ei ole deklareeritud välisvõtit tabelisse Tootaja_roll.
Reegel 27 pole täidetud: Veerud eesnime ja perenime hoidmiseks on mittekohustuslikud (lubavad NULLe).
Tabelis Isik on veerud eesnimi ja perenimi deklareeritud kui NOT NULL.
Reegel 28 pole täidetud: Kõik veerud, kus on registreerimise aeg või viimase muutmise aeg, on kohustuslikud (NOT NULL) veerud.
Tabelis Isik on veerg viimase_muutm_aeg deklareeritud ilma NOT NULL kitsenduseta (lubab NULLe).
Tabelis Tootaja_rolli_omamine on veerg end_time deklareeritud ilma NOT NULL kitsenduseta (lubab NULLe).
Reegel 29 pole täidetud: Kõik veerud, kus on registreerija identifikaator või viimase muutja identifikaator, on kohustuslikud (NOT NULL) veerud.
Tabelis Tuba on veerg viimase_muutja_id deklareeritud ilma NOT NULL kitsenduseta (lubab NULLe).
Reegel 30 pole täidetud: Kõigil veergudel, millel on vaikimisi väärtus, on NOT NULL kitsendus.
Tabelis Klassifikaator on veerg on_aktiivne DEFAULT väärtusega, kuid ilma NOT NULL kitsenduseta.
Tabelis Client on veerg onNousTylitamisega DEFAULT väärtusega, kuid ilma NOT NULL kitsenduseta.
Tabelis Isik on veerg viimase_muutm_aeg DEFAULT väärtusega, kuid ilma NOT NULL kitsenduseta.
Reegel 31 pole täidetud: Kõigil välisvõtmete veergudel, mille nimes osa on seisundi_liik_kood või state_type_code, on vaikimisi väärtus.
Tabelis Client on veerg kliendi_seisundi_liik_kood, mis on välisvõtmeks ja mille nimes on seisundi_liik_kood, kuid sellel puudub vaikimisi väärtus.
Reegel 32 pole täidetud: Kõigil veergudel, kus on registreerimise aeg või viimase muutmise aeg, on vaikimisi väärtus.
Tabelis Tuba on veerg viimase_muutm_aeg ilma vaikimisi väärtuseta (kuigi reg_aeg on vaikimisi väärtusega).
Tabelis Tootaja_rolli_omamine on veerg alguse_aeg ilma vaikimisi väärtuseta.
Tabelis Tootaja_rolli_omamine on veerg end_time ilma vaikimisi väärtuseta.
Reegel 33 pole täidetud: Veerud, kus on kirjeldused, kommentaarid, selgitused jms lubavad vähemalt 255 tähemärki.
Tabelis Tuba on veerg kommentaar piiratud pikkusega 50 tähemärki (Text(50)).
Reegel 34 pole täidetud: Veerud, kus on eesnimed ja perenimed, ei luba väljapikkust üle 50 tähemärgi.
Tabelis Isik on veerg eesnimi pikkusega 150 tähemärki (Text(150)).
Tabelis Isik on veerg perenimi pikkusega 200 tähemärki (Text(200)).
Reegel 35 pole täidetud: Veerud, kus on meiliaadress on väljapikkusega 254 tähemärki.
Tabelis Isik on veerg e_meil pikkusega 255 tähemärki (Text(255)).
Reegel 36 pole täidetud: Ühegi veeru puhul ei kasutata ujukomatüüpi (float, read, double precision).
Tabelis Tuba on veerg hinna_vahemiku_algus tüübiga float.
Reegel 37 pole täidetud: Numeric või Decimal tüüpi veeru korral on veeru tüübi definitsioonis määratud nii täpsus (precision) kui skaala (scale).
Tabelis Tuba on veerg hinna_vahemiku_lopp tüübiga decimal, kuid sellel puudub täpsuse ja skaala määrang.


**********
DeepSeek V3 (0324)
**********

Reegel 1: PRIMARY KEY, UNIQUE, FOREIGN KEY and CHECK constraints are broken in multiple statements (e.g., in Klassifikaator table the PRIMARY KEY is not named).

Reegel 2: The Klassifikaator table is created as a common classifier table, which violates this rule.

Reegel 4: There are columns named just "kood" (e.g., in Toa_kategooria table) and "code" (e.g., building_code in Hoone table).

Reegel 5: Classifier tables like Toa_tyyp use "_kood" suffix but Voodi_tyyp uses "_id" which violates this rule.

Reegel 6: Constraints are not always named (e.g., PRIMARY KEY in Klassifikaator table).

Reegel 7: Some constraint names don't include table name (e.g., AK_nimetus in Tuba table).

Reegel 8: Mixed language is used (e.g., building_code vs toa_tyyp_kood).

Reegel 10: Inconsistent naming for primary keys (e.g., PK_Toa_tyyp vs PK_isik_id).

Reegel 12: Some tables don't have primary key defined (e.g., Toa_kategooria_omamine).

Reegel 13: Columns with "kood" or "code" are using auto-generation (e.g., tootaja_seisundi_liik_kood Counter in Tootaja_seisundi_liik).

Reegel 14: Classifier tables are using auto-generation (e.g., tootaja_seisundi_liik_kood Counter in Tootaja_seisundi_liik).

Reegel 15: Foreign key columns are using auto-generation (e.g., isik_id Counter in Kasutajakonto).

Reegel 16: Tables with surrogate keys don't always have business keys (e.g., Isik table has only PK but no UNIQUE constraint on business fields).

Reegel 17: Kasutajakonto has both PK and UNIQUE on same column (isik_id).

Reegel 18: Some foreign keys referencing code columns don't have ON UPDATE CASCADE (e.g., FK_Isik_Riik).

Reegel 19: Some foreign keys referencing id columns have ON UPDATE CASCADE (e.g., FK_Tootaja_Isik).

Reegel 20: 1:1 relationships don't always have ON DELETE CASCADE (e.g., FK_Kasutajakonto_Isik).

Reegel 21: Foreign keys referencing classifier tables have ON DELETE CASCADE (e.g., FK_Toa_seisundi_liik_toa_seisundi_liik_kood).

Reegel 22: NOT NULL foreign keys have SET NULL action (e.g., FK_Tuba_Toa_seisundi_liik).

Reegel 23: Foreign keys without default values have SET DEFAULT action (e.g., FK_Tuba_Voodi_tyyp).

Reegel 24: Mixed use of NO ACTION and RESTRICT (e.g., FK_Tuba_Tootaja_registreerija vs Tuba_Tootaja_viimane_muutja).

Reegel 25: Tables are not created in proper order (e.g., Client references Isik before Isik is created).

Reegel 26: Klassifikaator table is not referenced by any other table properly.

Reegel 27: First/last name columns are marked as NOT NULL in Isik table.

Reegel 28: viimase_muutm_aeg in Isik allows NULLs.

Reegel 29: viimase_muutja_id in Tuba allows NULLs.

Reegel 30: Columns with default values don't always have NOT NULL (e.g., viimase_muutm_aeg in Isik).

Reegel 31: State type foreign keys don't always have defaults (e.g., kliendi_seisundi_liik_kood in Client).

Reegel 32: Timestamp columns don't always have defaults (e.g., viimase_muutm_aeg in Tuba).

Reegel 34: First/last name columns exceed 50 characters in Isik table.

Reegel 35: Email column is defined as Text(255) instead of exactly 254.

Reegel 36: Floating point types are used (e.g., hinna_vahemiku_algus float in Tuba).

Reegel 37: Decimal types don't specify precision/scale (e.g., hinna_vahemiku_lopp decimal in Tuba).

Additional issues:

Voodi_tyyp table defines PK on voodi_tyyp_kood but the column is named voodi_tyyp_id

Client table has an empty FOREIGN KEY reference

Isik table has duplicate column name "kood"

Tuba table references column "nimetus" in UNIQUE constraint but the column is named "name"

Mixed case in constraint names (e.g., Tootaja_Mentor vs PK_Tootaja_roll)

**********
DeepSeek R1
**********
Reegel 1:

Viga: PRIMARY KEY on deklareeritud inline ilma CONSTRAINT nimetuseta.

Asukoht: Tabelid Klassifikaator, Tootaja (PK inline).

Reegel 2:

Viga: Ühine klassifikaatoritabel Klassifikaator on kasutusel (nt tabelites Tootaja_seisundi_liik, Toa_seisundi_liik).

Asukoht: FK-d viitavad Klassifikaator.

Reegel 3:

Viga: Tabelis Isik on kaks veergu nimega kood (Text(3) ja Short).

Asukoht: Isik tabeli veerud.

Reegel 4:

Viga: Veerud nimega kood ilma eesliiteta (nt Toa_kategooria.kood).

Asukoht: Toa_kategooria, Klassifikaator.

Reegel 5:

Viga: Klassifikaatori tabeli Voodi_tyyp PK on voodi_tyyp_id (peaks olema _kood).

Asukoht: Voodi_tyyp PK deklaratsioon.

Reegel 6:

Viga: Primaarvõti deklareeritud ilma CONSTRAINT nimetuseta (nt Tootaja).

Asukoht: Tootaja tabeli PK.

Reegel 7:

Viga: Välisvõtme nimi FK_Isik ei sisalda viidatava tabeli nime (Client).

Asukoht: Client tabeli FK deklaratsioon.

Reegel 8:

Viga: Segatud eesti ja inglise keelt (nt tabel Client, veerg building_code).

Asukoht: Tabelid Client, Hoone.

Reegel 9:

Viga: Veerg aktiivne (Kasutajakonto) ei alga on_/is_ eesliitega.

Asukoht: Kasutajakonto.aktiivne.

Reegel 12:

Viga: Tabelil Toa_kategooria_omamine puudub PK.

Asukoht: Toa_kategooria_omamine tabel.

Reegel 14:

Viga: Klassifikaatori tabel Tootaja_seisundi_liik kasutab autogenereeritud PK-d (Counter).

Asukoht: Tootaja_seisundi_liik.tootaja_seisundi_liik_kood.

Reegel 15:

Viga: Välisvõtme veerg Kasutajakonto.isik_id on autogenereeritud (Counter).

Asukoht: Kasutajakonto tabel.

Reegel 16:

Viga: Tabelil Isik (surrogaatvõti isik_id) puudub UNIQUE kitsendus sisulisele võtmele (nt isikukood).

Asukoht: Isik tabel.

Reegel 17:

Viga: Tabelis Kasutajakonto on AK sama veeru peal kui PK (isik_id).

Asukoht: Kasutajakonto AK deklaratsioon.

Reegel 20:

Viga: 1:1 seose (Kasutajakonto → Isik) välisvõtmel puudub ON DELETE CASCADE.

Asukoht: Kasutajakonto FK deklaratsioon.

Reegel 21:

Viga: Välisvõti klassifikaatorisse (Tootaja_seisundi_liik) kasutab ON DELETE CASCADE.

Asukoht: Tootaja_seisundi_liik FK deklaratsioon.

Reegel 22:

Viga: Välisvõtme veerg toa_seisundi_liik_kood (Tuba) on NOT NULL, kuid FK deklaratsioonis on ON DELETE SET NULL.

Asukoht: Tuba FK FK_Tuba_Toa_seisundi_liik.

Reegel 23:

Viga: Välisvõtmel FK_Tuba_Voodi_tyyp on ON DELETE SET DEFAULT, kuid veergul puudub vaikimisi väärtus.

Asukoht: Tuba FK deklaratsioon.

Reegel 24:

Viga: Segatud NO ACTION ja RESTRICT (nt Tuba FK-de ON UPDATE).

Asukoht: Tuba FK-d registreerija_id ja viimase_muutja_id.

Reegel 25:

Viga: Tabel Client viitab tabelile Isik, mis luuakse hiljem.

Asukoht: Client FK FK_Isik.

Reegel 27:

Viga: Veerud eesnimi ja perenimi (Isik) on NOT NULL.

Asukoht: Isik tabeli veerud.

Reegel 29:

Viga: Veerg viimase_muutja_id (Tuba) on NULLable.

Asukoht: Tuba.viimase_muutja_id.

Reegel 30:

Viga: Veerg onNousTylitamisega (Client) on NULLable, kuigi sellel on vaikimisi väärtus.

Asukoht: Client.onNousTylitamisega.

Reegel 32:

Viga: Veerg viimase_muutm_aeg (Tuba) on NOT NULL ilma vaikimisi väärtuseta.

Asukoht: Tuba.viimase_muutm_aeg.

Reegel 33:

Viga: Veerg kommentaar (Tuba) lubab ainult 50 tähemärki.

Asukoht: Tuba.kommentaar.

Reegel 34:

Viga: Veerud eesnimi (150) ja perenimi (200) ületavad 50 tähemärki.

Asukoht: Isik tabel.

Reegel 35:

Viga: Veerg e_meil (Isik) on 255 tähemärki (max 254).

Asukoht: Isik.e_meil.

Reegel 36:

Viga: Veerg hinna_vahemiku_algus (Tuba) kasutab tüüpi float.

Asukoht: Tuba.hinna_vahemiku_algus.

Reegel 37:

Viga: Veerg hinna_vahemiku_lopp (Tuba) on decimal ilma täpsuse ja skaalata.

Asukoht: Tuba.hinna_vahemiku_lopp.

Reegel 10:

Viga: PK nimi PK_isik_id (Client) ei järgi nimekirja (PK_Client peaks olema).

Asukoht: Client PK deklaratsioon.

Reegel 11:

Viga: Tabeli nimi Client kasutab PascalCase asemel snake_case.

Asukoht: Tabel Client.

Reegel 19:

Viga: Välisvõti mentor (Tootaja) viitab id-ga lõppevale veerule ja kasutab ON UPDATE CASCADE.

Asukoht: Tootaja FK Tootaja_Mentor.

**********
Gemini 2.5 Flash (Thinking pole valitud)
**********

Reeglite rikkumised:
Reegel 1:
CREATE TABLE Client (..., CONSTRAINT FK_Isik FOREIGN KEY () REFERENCES Isik (isik_id) ON DELETE Cascade): Kitsendus on katki.
Reegel 2:
Tabel Klassifikaator on olemas ja seda kasutatakse teiste klassifikaatorite tabelite välisvõtmete viitamiseks.
Reegel 4:
Tabelis Toa_kategooria on veerg kood.
Tabelis Isik on veerg kood.
Tabelis Isik on veerg kood.
Reegel 5:
Tabelis Voodi_tyyp on primaarvõtme veerg voodi_tyyp_id.
Reegel 6:
Tabelis Tootaja ei ole PRIMARY KEY kitsendusele antud nime.
Reegel 8:
Tabelis Hoone on veeru nimi building_code.
Tabelis Client on veeru nimi onNousTylitamisega.
Tabelis Tuba on veeru nimi name.
Tabelis Tuba on veeru nimi timestamp.
Tabelis Tootaja_rolli_omamine on veeru nimi timestamp.
Tabelis Tootaja_rolli_omamine on veeru nimi end_time.
Reegel 9:
Tabelis Client on veeru nimi onNousTylitamisega.
Tabelis Kasutajakonto on veeru nimi aktiivne.
Tabelis Tootaja_roll on veeru nimi on_aktiivne, kuid kitsenduse nimi on eesti keeles (AK_Tootaja_roll_nimetus). Kitsenduse nimedes tuleks olla järjekindel.
Reegel 10:
PRIMARY KEY kitsenduste nimed ei ole järjekindlad (PK_Toa_tyyp, PK_Voodi_tyyp, PK_Tootaja_seisundi_liik, PK_Toa_seisundi_liik, PK_Toa_kategooria_tyyp, PK_Kliendi_seisundi_liik, PK_Isiku_seisundi_liik, PK_Hoone, PK_isik_id, PK_Isik, PK_Kasutajakonto_isik_id, PK_Tootaja_rolli_omamine, PK_Tootaja_roll).
UNIQUE kitsenduste nimed ei ole järjekindlad (AK_Toa_tyyp_nimetus, AK_Voodi_tyyp_nimetus, AK_Tootaja_seisundi_liik_nimetus, AK_Toa_seisundi_liik_nimetus, AK_Toa_kategooria_tyyp_nimetus, AK_Toa_kategooria_nimetus_toa_kategooria_tyyp_kood, AK_Riik_nimetus, AK_Kliendi_seisundi_liik_nimetus, AK_isiku_seisundi_liik_nimetus, AK_Hoone_nimetus, AK_Kasutajakonto_isik_id, AK_nimetus, AK_Tootaja_rolli_omamine, AK_Tootaja_roll_nimetus).
FOREIGN KEY kitsenduste nimed ei ole järjekindlad (FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood, FK_Toa_seisundi_liik_toa_seisundi_liik_kood, FK_Toa_kategooria_Toa_kategooria_tyyp, FK_Klient_Kliendi_seisundi_liik, FK_Isik, FK_Isik_Isiku_seisundi_liik, FK_Isik_Riik, FK_Kasutajakonto_Isik, FK_Tootaja_Isik, Tootaja_Mentor, FK_Tootaja_Tootaja_seisundi_liik, FK_Tuba_Hoone, FK_Tuba_Toa_seisundi_liik, Tuba_Toa_tyyp, FK_Tuba_Voodi_tyyp, FK_Tuba_Tootaja_registreerija, Tuba_Tootaja_viimane_muutja, FK_Toa_kategooria_omamine_Tuba, FK_Toa_kategooria_omamine_Toa_kategooria, FK_Tootaja_rolli_omamine_Tootaja).
Reegel 11:
Tabelis Client on veeru nimi onNousTylitamisega.
Reegel 13:
Tabelis Tootaja_seisundi_liik on veerg tootaja_seisundi_liik_kood tüübiga Counter, mis genereerib väärtuseid.
Tabelis Isik on veerg isik_id tüübiga Counter, mis genereerib väärtuseid.
Tabelis Kasutajakonto on veerg isik_id tüübiga Counter, mis genereerib väärtuseid.
Tabelis Tootaja_rolli_omamine on veerg tootaja_rolli_omamine_id tüübiga Counter, mis genereerib väärtuseid.
Reegel 14:
Tabelis Tootaja_seisundi_liik genereeritakse võtmeväärtuseid veerule tootaja_seisundi_liik_kood.
Reegel 15:
Tabelis Kasutajakonto on välisvõtme veerg isik_id tüübiga Counter, mis genereerib väärtuseid.
Reegel 16:
Tabelis Tootaja_seisundi_liik on surrogaatvõti tootaja_seisundi_liik_kood, kuid puudub sisuline võti.
Tabelis Isik on surrogaatvõti isik_id, kuid puudub sisuline võti.
Tabelis Kasutajakonto on surrogaatvõti isik_id, kuid puudub sisuline võti.
Tabelis Tootaja_rolli_omamine on surrogaatvõti tootaja_rolli_omamine_id, kuid puudub sisuline võti.
Reegel 17:
Tabelis Kasutajakonto on defineeritud UNIQUE kitsendus samale veerule, millele on defineeritud PRIMARY KEY.
Reegel 19:
Tabelis Tuba viitab välisvõti FK_Tuba_Voodi_tyyp veerule voodi_tyyp_id, kuid sellel on kompenseeriv tegevus ON UPDATE Cascade.
Tabelis Tootaja_rolli_omamine viitab välisvõti FK_Tootaja_rolli_omamine_Tootaja veerule isik_id, kuid sellel on kompenseeriv tegevus ON DELETE Cascade.
Reegel 21:
Tabelis Tootaja_seisundi_liik viitab välisvõti FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood klassifikaatori tabelile Klassifikaator, kuid sellel on kompenseeriv tegevus ON DELETE CASCADE.
Tabelis Toa_seisundi_liik viitab välisvõti FK_Toa_seisundi_liik_toa_seisundi_liik_kood klassifikaatori tabelile Klassifikaator, kuid sellel on kompenseeriv tegevus ON DELETE CASCADE.
Tabelis Tuba viitab välisvõti Tuba_Toa_tyyp klassifikaatori tabelile Toa_tyyp, kuid sellel on kompenseeriv tegevus ON DELETE CASCADE.
Reegel 22:
Tabelis Tuba on välisvõtme veerg toa_seisundi_liik_kood kohustuslik (NOT NULL), kuid sellel välisvõtmel (FK_Tuba_Toa_seisundi_liik) on kompenseeriv tegevus ON DELETE SET NULL.
Reegel 23:
Tabelis Tuba on välisvõtme veerul voodi_tyyp_kood vaikimisi väärtus, kuid välisvõtmel (FK_Tuba_Voodi_tyyp) on kompenseeriv tegevus ON DELETE SET DEFAULT. (See reegel ütleb, et kui vaikimisi väärtus puudub, siis ei tohi olla SET DEFAULT, siin see on olemas ja on SET DEFAULT, mis on vastuolus).
Reegel 24:
Tabelis Tuba kasutatakse välisvõtmete deklaratsioonides nii NO ACTION (FK_Tuba_Tootaja_registreerija) kui ka RESTRICT (Tuba_Tootaja_viimane_muutja).
Reegel 25:
Tabel Client viitab tabelile Isik, kuid Client luuakse enne Isik tabelit.
Tabel Kasutajakonto viitab tabelile Isik, kuid Kasutajakonto luuakse enne Isik tabelit.
Tabel Tootaja viitab tabelile Isik, kuid Tootaja luuakse enne Isik tabelit.
Tabel Tootaja_rolli_omamine viitab tabelile Tootaja, kuid Tootaja_rolli_omamine luuakse enne Tootaja tabelit.
Reegel 26:
Tabel Klassifikaator ei ole välisvõtme mõttes seotud mitte ühegi teise tabeliga viitava (referencing) rollis (st ükski teine tabel ei viita Klassifikaator tabelile välisvõtmega). (Märkus: teised klassifikaatorid viitavad Klassifikaator tabelile, aga see ei muuda seda, et Klassifikaator ise ei viita kuhugi).
Reegel 27:
Tabelis Isik on veerud eesnimi ja perenimi kohustuslikud (NOT NULL).
Reegel 28:
Tabelis Isik on veerg viimase_muutm_aeg mittekohustuslik (DEFAULT Now() on vaikimisi väärtus, mitte kohustuslikkuse kitsendus).
Tabelis Tuba on veerg viimase_muutm_aeg kohustuslik (NOT NULL), kuid ilma vaikimisi väärtuseta.
Reegel 29:
Tabelis Tuba on veerg viimase_muutja_id mittekohustuslik.
Reegel 30:
Tabelis Isik on veerg viimase_muutm_aeg vaikimisi väärtusega, kuid puudub NOT NULL kitsendus.
Reegel 31:
Tabelis Tuba on välisvõtme veerg toa_seisundi_liik_kood vaikimisi väärtusega. See reegel on täidetud.
Reegel 32:
Tabelis Tuba on veerg viimase_muutm_aeg ilma vaikimisi väärtuseta.
Reegel 33:
Tabelis Toa_kategooria on veerg nimetus (mis võib olla kirjeldus) pikkusega 50 tähemärki.
Tabelis Riik on veerg nimetus pikkusega 50 tähemärki.
Tabelis Hoone on veerg nimetus pikkusega 50 tähemärki.
Tabelis Isik on veerg isikukood pikkusega 50 tähemärki.
Tabelis Isik on veerg e_meil pikkusega 255 tähemärki (siin on reegel 35, mis nõuab 254).
Tabelis Isik on veerg elukoht pikkusega 255 tähemärki.
Tabelis Tuba on veerg name pikkusega 50 tähemärki.
Tabelis Tuba on veerg kommentaar pikkusega 50 tähemärki.
Tabelis Tootaja_roll on veerg nimetus pikkusega 50 tähemärki.
Reegel 34:
Tabelis Isik on veerg eesnimi pikkusega 150 tähemärki.
Tabelis Isik on veerg perenimi pikkusega 200 tähemärki.
Reegel 35:
Tabelis Isik on veerg e_meil pikkusega 255 tähemärki.
Reegel 36:
Tabelis Tuba kasutatakse ujukomatüüpi veerul hinna_vahemiku_algus (float).
Reegel 37:
Tabelis Tuba veerul hinna_vahemiku_lopp (decimal) ei ole määratud täpsust ja skaalat.

**********
Grok 3 (Thinking)
**********

Pärast antud SQL tabelite loomise lausete hoolikat analüüsimist vastavalt etteantud 37 reeglile, leidsin, et mitmed reeglid ei ole täidetud. Allpool on toodud ainult need reeglid, mis on rikutud, koos viidetega konkreetsetele probleemsetele kohtadele tabelites. Iga reegel on esitatud eraldi, et tagada selgus ja struktureeritus.

Reegel 1: Üheski lauses ei ole katkist PRIMARY KEY, UNIQUE, FOREIGN KEY ja CHECK kitsendust
Viga tabelis "Voodi_tyyp": Primaarvõti on defineeritud kui CONSTRAINT PK_Voodi_tyyp PRIMARY KEY (voodi_tyyp_kood), kuid tabelis puudub veerg nimega "voodi_tyyp_kood". On olemas ainult "voodi_tyyp_id".
Viga tabelis "Toa_kategooria": Primaarvõti on defineeritud kui CONSTRAINT PK_Toa_kategooria PRIMARY KEY (toa_kategooria_kood), kuid tabelis on veerg nimega "kood", mitte "toa_kategooria_kood".
Viga tabelis "Client": Välisvõti on defineeritud kui CONSTRAINT FK_Isik FOREIGN KEY () REFERENCES Isik (isik_id), kuid välisvõtme veergude loend on tühi, mis muudab selle kehtetuks.
Viga tabelis "Tuba": Unikaalne kitsendus on defineeritud kui CONSTRAINT AK_nimetus UNIQUE (nimetus), kuid tabelis on veerg nimega "name", mitte "nimetus".
Reegel 2: Andmebaasis ei ole ühist klassifikaatorite tabelit
Viga tabelis "Klassifikaator": Tabel "Klassifikaator" toimib ühise klassifikaatorite tabelina, kuna seda viitavad mitmed teised tabelid (nt "Tootaja_seisundi_liik", "Toa_seisundi_liik", "Kliendi_seisundi_liik"), mis on vastuolus nõudega, et iga klassifikaatori tüüp peaks olema eraldi tabelis.
Reegel 3: Üheski tabelis ei ole mitut sama nimega veergu
Viga tabelis "Isik": Tabelis on kaks veergu nimega "kood": üks tüübiga Text(3) ja teine tüübiga Short.
Reegel 4: Üheski tabelis ei ole veerge, mille nimi on ainult kood, code, id
Viga tabelis "Isik": Tabelis on kaks veergu nimega "kood", mis ei sisalda eesliidet, rikkudes seda reeglit.
Reegel 5: Klassifikaatorite tabelites sisaldub primaarvõtme veergude nimedes sõna kood või code, mitte id
Viga tabelis "Voodi_tyyp": Primaarvõtme veerg on nimega "voodi_tyyp_id" (kuigi viidatud kui "voodi_tyyp_kood", mis on viga), mis sisaldab "id" asemel "kood" või "code".
Reegel 6: Kõigile PRIMARY KEY, UNIQUE, FOREIGN KEY ja CHECK kitsendustele antakse lausetes ise nimi
Viga tabelis "Klassifikaator": Primaarvõti on defineeritud kui kood Short PRIMARY KEY ilma selgesõnalise CONSTRAINT nimega.
Viga tabelis "Tootaja": Primaarvõti on defineeritud kui isik_id Long NOT NULL PRIMARY KEY ilma selgesõnalise CONSTRAINT nimega.
Reegel 7: Kõigis kasutaja antud kitsenduste nimedes sisaldub tabeli nimi
Viga tabelis "Klassifikaator": Primaarvõtmel puudub nimi (vt reegel 6), seega ei sisalda see tabeli nime.
Viga tabelis "Client": Primaarvõtme nimi on PK_isik_id, mis ei sisalda tabeli nime "Client".
Viga tabelis "Tootaja": Primaarvõtmel puudub nimi (vt reegel 6), seega ei sisalda see tabeli nime.
Viga tabelis "Kliendi_seisundi_liik": Välisvõtme nimi on FK_Toa_seisundi_liik_toa_seisundi_liik_kood, mis viitab valele tabelile ("Toa_seisundi_liik" asemel "Kliendi_seisundi_liik").
Reegel 8: Tabeli, veergude ja kitsenduste nimedes ei kasutata segamini eesti- ja inglise keelt
Viga tabelis "Hoone": Tabeli nimi on "Hoone" (eesti keeles), kuid veerg on "building_code" (inglise keeles).
Viga tabelis "Client": Tabeli nimi on "Client" (inglise keeles), kuid veerud nagu "kliendi_seisundi_liik_kood" ja "onNousTylitamisega" on eesti keeles.
Reegel 9: Tõeväärtustüüpi veergude nimed algavad eesliitega on_ kui nimi on eesti keeles
Viga tabelis "Kasutajakonto": Tõeväärtusveerg on nimega "aktiivne", mis peaks olema "on_aktiivne".
Reegel 12: Igas tabelis on defineeritud primaarvõtme kitsendus
Viga tabelis "Toa_kategooria_omamine": Tabelil puudub primaarvõtme kitsendus.
Reegel 13: Ühtegi veergu, mille nimes on sõna kood või code, ei genereeri väärtuseid süsteem
Viga tabelis "Tootaja_seisundi_liik": Veerg "tootaja_seisundi_liik_kood" on tüübiga Counter, mis on süsteemi genereeritud.
Reegel 14: Ühtegi klassifikaatori tabelisse ei genereeri võtmeväärtuseid süsteem
Viga tabelis "Tootaja_seisundi_liik": Klassifikaatori tabeli primaarvõti "tootaja_seisundi_liik_kood" on tüübiga Counter.
Reegel 16: Kui tabelis on surrogaatvõtme veerg, siis on selles tabelis ka vähemalt üks sisuline võti
Viga tabelis "Isik": Primaarvõti "isik_id" on Counter (surrogaatvõti), kuid tabelis puudub sisuline võti (UNIQUE kitsendus NOT NULL veergudel).
Viga tabelis "Kasutajakonto": Primaarvõti "isik_id" on Counter, kuid ainus UNIQUE kitsendus on samal veerul kui PK, mitte sisuline võti.
Reegel 17: Tabelites ei deklareerita UNIQUE kitsendust täpselt samale veergude hulgale, millele on defineeritud PRIMARY KEY
Viga tabelis "Kasutajakonto": UNIQUE kitsendus AK_Kasutajakonto_isik_id on samal veerul "isik_id" kui primaarvõti.
Reegel 18: Kui välisvõti viitab veerule, mille nimes on kood või code, siis on ON UPDATE CASCADE
Viga tabelis "Tootaja_seisundi_liik": Välisvõti viitab "Klassifikaator (kood)", kuid puudub ON UPDATE CASCADE.
Viga tabelis "Toa_seisundi_liik": Välisvõti viitab "Klassifikaator (kood)", kuid puudub ON UPDATE CASCADE.
Viga tabelis "Kliendi_seisundi_liik": Välisvõti viitab "Klassifikaator (kood)", kuid puudub ON UPDATE CASCADE.
Reegel 19: Kui välisvõti viitab veerule, mille nimi lõpeb id, siis ei ole ON UPDATE CASCADE
Viga tabelis "Tootaja": Välisvõti Tootaja_Mentor viitab "Tootaja (isik_id)" ja sisaldab ON UPDATE CASCADE.
Reegel 21: Kui välisvõti viitab klassifikaatori tabelile, siis ei ole ON DELETE CASCADE
Viga tabelis "Tootaja_seisundi_liik": Välisvõti viitab "Klassifikaator" ja sisaldab ON DELETE CASCADE.
Viga tabelis "Toa_seisundi_liik": Välisvõti viitab "Klassifikaator" ja sisaldab ON DELETE CASCADE.
Viga tabelis "Kliendi_seisundi_liik": Välisvõti viitab "Klassifikaator" ja sisaldab ON DELETE CASCADE.
Viga tabelis "Tuba": Välisvõti Tuba_Toa_tyyp viitab klassifikaatori tabelile "Toa_tyyp" ja sisaldab ON DELETE CASCADE.
Reegel 22: Kui välisvõtme veerg on NOT NULL, siis ei ole SET NULL
Viga tabelis "Tuba": Välisvõti FK_Tuba_Toa_seisundi_liik viitab "toa_seisundi_liik_kood" (NOT NULL) ja sisaldab ON DELETE SET NULL.
Reegel 23: Kui välisvõtme veerul puudub vaikimisi väärtus, siis ei ole SET DEFAULT
Viga tabelis "Tuba": Välisvõti FK_Tuba_Voodi_tyyp viitab "voodi_tyyp_kood" (puudub vaikimisi väärtus) ja sisaldab ON DELETE SET DEFAULT.
Reegel 24: Välisvõtmete deklaratsioonides ei kasutata segamini NO ACTION ja RESTRICT
Viga tabelis "Tuba": Välisvõtmetes kasutatakse ON UPDATE NO ACTION (nt FK_Tuba_Tootaja_registreerija) ja ON UPDATE RESTRICT (nt Tuba_Tootaja_viimane_muutja).
Reegel 25: Tabelid luuakse järjekorras, et välisvõtmete deklareerimine ei tekita vigu
Viga kogu skriptis: Näiteks tabel "Client" viitab tabelile "Isik", kuid "Isik" on defineeritud hiljem, mis põhjustab loomise järjekorra vea.
Reegel 26: Ei looda ühtegi tabelit, mis pole välisvõtme mõttes seotud teiste tabelitega
Viga tabelis "Tootaja_roll": Tabelit ei viita ükski teine tabel välisvõtme kaudu (kuigi "Tootaja_rolli_omamine" peaks seda tegema, kuid FK puudub).
Reegel 27: Veerud eesnime ja perenime hoidmiseks on mittekohustuslikud
Viga tabelis "Isik": Veerud "eesnimi" ja "perenimi" on NOT NULL, mis ei luba NULL-väärtusi.
Reegel 28: Veerud registreerimise või viimase muutmise ajaga on kohustuslikud
Viga tabelis "Isik": Veerg "viimase_muutm_aeg" puudub NOT NULL kitsendus.
Reegel 29: Veerud registreerija või viimase muutja ID-ga on kohustuslikud
Viga tabelis "Tuba": Veerg "viimase_muutja_id" puudub NOT NULL kitsendus.
Reegel 30: Kõigil veergudel, millel on vaikimisi väärtus, on NOT NULL kitsendus
Viga tabelis "Klassifikaator": Veerg "on_aktiivne" omab DEFAULT TRUE, kuid puudub NOT NULL.
Viga tabelis "Client": Veerg "onNousTylitamisega" omab DEFAULT False, kuid puudub NOT NULL.
Reegel 34: Veerud eesnimede ja perenimede jaoks ei luba üle 50 tähemärgi
Viga tabelis "Isik": Veerg "eesnimi" on Text(150) ja "perenimi" on Text(200), mis ületavad 50 tähemärki.
Reegel 35: Veerud meiliaadresside jaoks on 254 tähemärki
Viga tabelis "Isik": Veerg "e_meil" on Text(255), mis ületab nõutud 254 tähemärki.
Reegel 36: Ühegi veeru puhul ei kasutata ujukomatüüpi
Viga tabelis "Tuba": Veerg "hinna_vahemiku_algus" on tüübiga float.
Reegel 37: Numeric või Decimal tüüpi veeru korral on määratud täpsus ja skaala
Viga tabelis "Tuba": Veerg "hinna_vahemiku_lopp" on tüübiga decimal ilma täpsuse ja skaalata.
Kokkuvõte
Rikutud reeglid on: 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 34, 35, 36, 37. Ülejäänud reeglid (10, 11, 15, 20, 31, 32, 33) on antud SQL lausetes täidetud.

**********
Grok 3 (DeepSearch+Thinking)
**********

Olen kontrollinud antud SQL tabelite loomise lauseid vastavalt etteantud reeglitele. Reegel loetakse täidetuks, kui selle kontrolli tulemus on TRUE. Allpool on toodud ainult need reeglid, mis ei ole täidetud, koos viitega vea asukohale.

Reegel 1: Üheski lauses ei ole katkist PRIMARY KEY, UNIQUE, FOREIGN KEY ja CHECK kitsendust
Täitmata: Tabelis "Client" on välisvõti defineeritud kui CONSTRAINT FK_Isik FOREIGN KEY () REFERENCES Isik (isik_id) ON DELETE Cascade, kus FOREIGN KEY () on tühi ja seega vigane.
Vea asukoht: Tabel "Client".
Reegel 2: Andmebaasis ei ole ühist klassifikaatorite tabelit
Täitmata: Tabel "Klassifikaator" on olemas ja toimib üldise klassifikaatorite tabelina, mis on reegli vastu.
Vea asukoht: Tabel "Klassifikaator".
Reegel 3: Üheski tabelis ei ole mitut sama nimega veergu
Täitmata: Tabelis "Isik" on kaks veergu nimega "kood": kood Text(3) NOT NULL ja kood Short NOT NULL DEFAULT 1.
Vea asukoht: Tabel "Isik".
Reegel 5: Klassifikaatorite tabelites sisaldub primaarvõtme veergude nimedes sõna kood või code, mitte id
Täitmata: Tabelis "Voodi_tyyp" on primaarvõti voodi_tyyp_id, mis sisaldab "id" sõna "kood" või "code" asemel.
Vea asukoht: Tabel "Voodi_tyyp".
Reegel 6: Kõigile PRIMARY KEY, UNIQUE, FOREIGN KEY ja CHECK kitsendustele antakse lausetes ise nimi
Täitmata: Tabelis "Toa_kategooria_omamine" on primaarvõti defineeritud ilma nime andmata: tuba_kood Short NOT NULL, toa_kategooria_kood Short NOT NULL koos CONSTRAINT PK_Toa_kategooria_omamine puudumisega (kuigi välisvõtmetel on nimed olemas, peab ka PK-l nimi olema).
Vea asukoht: Tabel "Toa_kategooria_omamine".
Reegel 7: Kõigis kasutaja antud kitsenduste nimedes sisaldub tabeli nimi
Täitmata: Tabelis "Client" on kitsendus CONSTRAINT PK_isik_id PRIMARY KEY (isik_id), kuid tabeli nimi on "Client", mitte "isik_id".
Vea asukoht: Tabel "Client".
Reegel 8: Tabeli, veergude ja kitsenduste nimedes ei kasutata segamini eesti- ja inglise keelt
Täitmata: Tabelis "Hoone" on veerg building_code (inglise keeles) ja veerg nimetus (eesti keeles), mis on segamini.
Vea asukoht: Tabel "Hoone".
Reegel 9: Tõeväärtustüüpi veergude nimed algavad eesliitega on_ (eesti keeles) või is_/has_ (inglise keeles)
Täitmata: Tabelis "Client" on tõeväärtusveerg onNousTylitamisega, mis ei järgi snake_case nimetamist ega ole korrektselt vormistatud (peaks olema on_nous_tylitamisega).
Vea asukoht: Tabel "Client".
Reegel 10: Sama tüüpi kitsendustele on antud nimed järjekindlalt
Täitmata: Primaarvõtme kitsendused ei ole järjekindlad: näiteks PK_Toa_tyyp tabelis "Toa_tyyp", kuid PK_isik_id tabelis "Client", mis ei järgi ühtset vormi (nt pk_<tabeli_nimi>).
Vea asukoht: Tabel "Client".
Reegel 11: Nimedes ei kasutata camelCase ja PascalCase, vaid snake_case nimetamise stiili
Täitmata: Tabelis "Client" on veerg onNousTylitamisega, mis kasutab camelCase stiili, mitte snake_case (peaks olema on_nous_tylitamisega).
Vea asukoht: Tabel "Client".
Reegel 13: Ühtegi veergu, mille nimes on sõna kood või code, ei genereeri väärtuseid süsteem
Täitmata: Tabelis "Tootaja_seisundi_liik" on veerg tootaja_seisundi_liik_kood Counter, mis genereerib väärtuseid süsteemi poolt.
Vea asukoht: Tabel "Tootaja_seisundi_liik".
Reegel 14: Ühtegi klassifikaatori tabelisse ei genereeri võtmeväärtuseid süsteem
Täitmata: Tabelis "Tootaja_seisundi_liik" on primaarvõti tootaja_seisundi_liik_kood Counter, mis on klassifikaatori tabelis ja genereerib väärtuseid süsteemi poolt.
Vea asukoht: Tabel "Tootaja_seisundi_liik".
Reegel 16: Kui tabelis on surrogaatvõtme veerg, millesse genereerib unikaalseid väärtuseid süsteem, siis on selles tabelis ka vähemalt üks sisuline võti
Täitmata: Tabelis "Isik" on surrogaatvõti isik_id Counter, kuid puudub sisuline võti (UNIQUE kitsendus NOT NULL veergudel).
Vea asukoht: Tabel "Isik".
Reegel 17: Tabelites ei deklareerita UNIQUE kitsendust täpselt samale veergude hulgale, millele on defineeritud PRIMARY KEY kitsendus
Täitmata: Tabelis "Kasutajakonto" on CONSTRAINT PK_Kasutajakonto_isik_id PRIMARY KEY (isik_id) ja CONSTRAINT AK_Kasutajakonto_isik_id UNIQUE (isik_id), mis dubleerivad sama veergu.
Vea asukoht: Tabel "Kasutajakonto".
Reegel 19: Kui välisvõti viitab veerule, mille nimi lõpeb id, siis ei ole sellel välisvõtmel kompenseerivat tegevust ON UPDATE CASCADE
Täitmata: Tabelis "Tootaja" on välisvõti CONSTRAINT Tootaja_Mentor FOREIGN KEY (mentor) REFERENCES Tootaja (isik_id) ON UPDATE Cascade, kus isik_id lõpeb "id" ja kasutab ON UPDATE CASCADE.
Vea asukoht: Tabel "Tootaja".
Reegel 21: Kui välisvõti viitab klassifikaatori tabelile, siis ei ole sellel välisvõtmel kompenseerivat tegevust ON DELETE CASCADE
Täitmata: Tabelis "Tootaja_seisundi_liik" on välisvõti CONSTRAINT FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood FOREIGN KEY (tootaja_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ON DELETE CASCADE, mis viitab klassifikaatori tabelile ja kasutab ON DELETE CASCADE.
Vea asukoht: Tabel "Tootaja_seisundi_liik".
Reegel 24: Välisvõtmete deklaratsioonides ei kasutata segamini NO ACTION ja RESTRICT
Täitmata: Tabelis "Tuba" on välisvõti CONSTRAINT FK_Tuba_Tootaja_registreerija FOREIGN KEY (registreerija_id) REFERENCES Tootaja (isik_id) ON UPDATE NO ACTION ja teine CONSTRAINT Tuba_Tootaja_viimane_muutja FOREIGN KEY (viimase_muutja_id) REFERENCES Tootaja (isik_id) ON UPDATE RESTRICT, mis segavad NO ACTION ja RESTRICT.
Vea asukoht: Tabel "Tuba".
Reegel 25: Tabelid luuakse järjekorras, et välisvõtmete deklareerimine ei tekita vigu
Täitmata: Tabel "Client" viitab tabelile "Isik" (CONSTRAINT FK_Isik FOREIGN KEY () REFERENCES Isik (isik_id)), kuid "Isik" on defineeritud hiljem.
Vea asukoht: Tabelid "Client" ja "Isik".
Reegel 27: Veerud eesnime ja perenime hoidmiseks on mittekohustuslikud (lubavad NULLe)
Täitmata: Tabelis "Isik" on veerud eesnimi Text(150) NOT NULL ja perenimi Text(200) NOT NULL, mis ei luba NULL-väärtusi.
Vea asukoht: Tabel "Isik".
Reegel 28: Kõik veerud, kus on registreerimise aeg või viimase muutmise aeg, on kohustuslikud (NOT NULL)
Täitmata: Tabelis "Tuba" on veerg viimase_muutm_aeg DateTime NOT NULL, kuid teistes tabelites nagu "Isik" on viimase_muutm_aeg DateTime DEFAULT Now() ilma NOT NULLita.
Vea asukoht: Tabel "Tuba" (osaliselt korrektne, kuid järjepidevus puudub teiste tabelitega).
Reegel 29: Kõik veerud, kus on registreerija identifikaator või viimase muutja identifikaator, on kohustuslikud (NOT NULL)
Täitmata: Tabelis "Tuba" on veerg viimase_muutja_id Long ilma NOT NULLita.
Vea asukoht: Tabel "Tuba".
Reegel 30: Kõigil veergudel, millel on vaikimisi väärtus, on NOT NULL kitsendus
Täitmata: Tabelis "Klassifikaator" on veerg on_aktiivne YesNo DEFAULT TRUE ilma NOT NULLita.
Vea asukoht: Tabel "Klassifikaator".
Reegel 31: Kõigil välisvõtmete veergudel, mille nimes osa on seisundi_liik_kood või state_type_code, on vaikimisi väärtus
Täitmata: Tabelis "Client" on välisvõti kliendi_seisundi_liik_kood Short NOT NULL ilma vaikimisi väärtuseta.
Vea asukoht: Tabel "Client".
Reegel 32: Kõigil veergudel, kus on registreerimise aeg või viimase muutmise aeg, on vaikimisi väärtus
Täitmata: Tabelis "Tuba" on veerg viimase_muutm_aeg DateTime NOT NULL ilma vaikimisi väärtuseta.
Vea asukoht: Tabel "Tuba".
Reegel 33: Veerud, kus on kirjeldused, kommentaarid, selgitused jms lubavad vähemalt 255 tähemärki
Täitmata: Tabelis "Tuba" on veerg kommentaar Text(50), mis lubab ainult 50 tähemärki.
Vea asukoht: Tabel "Tuba".
Reegel 34: Veerud, kus on eesnimed ja perenimed, ei luba väljapikkust üle 50 tähemärgi
Täitmata: Tabelis "Isik" on veerud eesnimi Text(150) ja perenimi Text(200), mis ületavad 50 tähemärki.
Vea asukoht: Tabel "Isik".
Reegel 35: Veerud, kus on meiliaadress, on väljapikkusega 254 tähemärki
Täitmata: Tabelis "Isik" on veerg e_meil Text(255), mis on 254 asemel 255 tähemärki.
Vea asukoht: Tabel "Isik".
Reegel 36: Ühegi veeru puhul ei kasutata ujukomatüüpi (float, real, double precision)
Täitmata: Tabelis "Tuba" on veerg hinna_vahemiku_algus float, mis kasutab ujukomatüüpi.
Vea asukoht: Tabel "Tuba".
Reegel 37: Numeric või Decimal tüüpi veeru korral on veeru tüübi definitsioonis määratud nii täpsus (precision) kui skaala (scale)
Täitmata: Tabelis "Tuba" on veerg hinna_vahemiku_lopp decimal NOT NULL ilma täpsuse ja skaala määramiseta.
Vea asukoht: Tabel "Tuba".
Kokkuvõte
Ülaltoodud reeglid ei ole täidetud nimetatud tabelites ja veergudes. Kõik ülejäänud reeglid (4, 12, 15, 18, 20, 22, 23, 26) on antud SQL lausetes täidetud.

**********
Grok 3 (DeepSearch)
**********

Otsene vastus
Peamised punktid:

Uurimus näitab, et mitmed reeglid ei ole täidetud, eriti seoses piirangute nimetamisega, klassifikaatorite tabelitega ja veergude nimetustega.
Näiteks on leitud vigu piirangute süntaksis ja veergude duplikaatnimetustes, mis rikuvad andmebaasi disaini reegleid.
Ootamatu detail: mõned tabelid, nagu "Isik", rikuvad mitut reeglit korraga, näiteks veergude nimetuste korduvust ja kohustuslikkuse nõudeid.
Piirangute kontroll:

Andmebaasi loomise laused on kontrollitud 37 reegli järgi. Tulemused näitavad, et mitmed reeglid ei ole täidetud, sealhulgas:

Piirangute süntaks: Mõned piirangud, nagu primaarvõtme viited olematutele veergudele, on süntaktiliselt vigased (nt tabelites "Voodi_tyyp" ja "Toa_kategooria").
Klassifikaatorite tabelid: Ühine klassifikaatorite tabel "Klassifikaator" rikub reeglit, kuna iga klassifikaatori tüüp peaks olema eraldi tabel.
Veergude nimetused: Tabel "Isik" sisaldab kaht veergu nimega "kood", mis rikub unikaalsuse nõuet, ja mõned veergude nimetused segavad eesti- ja inglise keelt (nt "on_aktiivne").
Ootamatu detail:

Üllatavalt paljud tabelid, nagu "Tuba" ja "Client", rikuvad mitut reeglit korraga, näiteks välisvõtmete tegevusi ja veergude kohustuslikkust, mis võib põhjustada andmebaasi disaini keerukust.

Ülevaade
Andmebaasi disaini reeglite kontrolli tulemused näitavad, et mitmed tabelite loomise laused ei vasta seatud 37 reeglile. Allpool on toodud üksikasjalik analüüs, mis hõlmab kõiki leitud rikkumisi, koos viidetega tabelitele ja veergudele, kus need esinevad. Analüüs on korraldatud reeglite kaupa, et tagada selgus ja süsteemne ülevaade.

Reegli 1 rikkumised: Piirangute süntaks
Reegel 1 nõuab, et ükski piirang (PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK) ei oleks katkine, st süntaktiliselt vigane. Leiti järgmised rikkumised:

Tabel "Voodi_tyyp": Primaarvõtme piirang viitab olematule veerule "voodi_tyyp_kood", kuigi veerg on nimega "voodi_tyyp_id".
Tabel "Toa_kategooria": Primaarvõtme piirang viitab olematule veerule "toa_kategooria_kood", kuigi veerg on nimega "kood".
Tabel "Client": Välisvõtme piirang "FK_Isik" on defineeritud tühja veergude loendiga (FOREIGN KEY ()), mis on süntaktiliselt vigane.
Tabel "Isik": Tabelis on kaks veergu nimega "kood" (üks Text(3), teine Short), mis teeb tabeli definitsiooni kehtetuks ja rikub piirangute süntaksit.
Tabel "Tuba": Unikaalne piirang "AK_nimetus" viitab olematule veerule "nimetus", kuigi veerg on nimega "name".
Reegli 2 rikkumised: Ühine klassifikaatorite tabel
Reegel 2 nõuab, et andmebaasis ei oleks ühist klassifikaatorite tabelit, st iga klassifikaatori tüüp peab olema eraldi tabel. Rikkumine leiti:

Tabel "Klassifikaator" on ühine klassifikaatorite tabel, kuna mitmed teised tabelid (nt "Tootaja_seisundi_liik", "Toa_seisundi_liik", "Kliendi_seisundi_liik") viitavad sellele välisvõtmetega, mis rikub reeglit.
Reegli 3 rikkumised: Veergude nimetuste unikaalsus
Reegel 3 nõuab, et üheski tabelis ei oleks mitut sama nimega veergu. Rikkumine leiti:

Tabel "Isik": Sisaldab kaht veergu nimega "kood" (üks Text(3), teine Short), mis rikub unikaalsuse nõuet.
Reegli 4 rikkumised: Veergude nimetused "kood", "code", "id"
Reegel 4 keelab veergude nimetused, mis on ainult "kood", "code" või "id". Leiti järgmised rikkumised:

Tabel "Klassifikaator": Veerg "kood" on ainult "kood".
Tabel "Toa_kategooria": Veerg "kood" on ainult "kood".
Tabel "Isik": Veerg "kood" (mõlemad eksemplarid) on ainult "kood".
Reegli 5 rikkumised: Klassifikaatorite tabelite primaarvõtme nimetused
Reegel 5 nõuab, et klassifikaatorite tabelite primaarvõtme veergude nimedes oleks sõna "kood" või "code", mitte "id". Rikkumine leiti:

Tabel "Voodi_tyyp": Primaarvõtme piirang viitab "voodi_tyyp_kood", kuid veerg on "voodi_tyyp_id", mis sisaldab "id" ja rikub reeglit.
Reegli 6 rikkumised: Piirangute nimetamine
Reegel 6 nõuab, et kõik piirangud (PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK) oleksid nimetatud, st sisaldaksid CONSTRAINT <nimetus>. Rikkumine leiti:

Tabel "Klassifikaator": Primaarvõtme piirang on defineeritud veergu "kood Short PRIMARY KEY" ilma nimetuseta, mis rikub reeglit.
Reegli 8 rikkumised: Keele segamine nimetustes
Reegel 8 keelab eesti- ja inglise keele segamise tabelite, veergude ja piirangute nimetustes. Leiti järgmised rikkumised:

Veerg "on_aktiivne" mitmes tabelis (nt "Klassifikaator", "Toa_tyyp" jne): Sisaldab inglisekeelset "on" ja eestikeelset "aktiivne", mis rikub reeglit.
Veerg "e_meil" tabelis "Isik": Sisaldab inglisekeelset "e-" ja eestikeelset "meil", mis rikub reeglit.
Reegli 9 rikkumised: Tõeväärtustüüpi veergude nimetused
Reegel 9 nõuab, et tõeväärtustüüpi veergude nimetused algaksid eesliitega "on_" (eesti keeles) või "is_"/"has_" (inglise keeles). Leiti järgmised rikkumised:

Tabel "Client": Veerg "onNousTylitamisega" on tõeväärtustüüp, kuid ei alga "on_" ja on camelCase, mis rikub reeglit.
Tabel "Kasutajakonto": Veerg "aktiivne" on tõeväärtustüüp, kuid ei alga "on_", mis rikub reeglit.
Reegli 10 rikkumised: Piirangute nimetuste järjepidevus
Reegel 10 nõuab, et sama tüüpi piirangutel oleksid järjepidevad nimetused (nt kõik primaarvõtmed algaksid "pk_"). Rikkumine leiti:

Tabel "Tuba": Välisvõtme piirangud on nimetatud erinevalt, nt "FK_Tuba_Hoone" ja "Tuba_Toa_tyyp", mis rikub nimetuste järjepidevust.
Reegli 11 rikkumised: Nimetuste stiil
Reegel 11 nõuab, et nimetused kasutaksid snake_case stiili, mitte camelCase või PascalCase. Rikkumine leiti:

Tabel "Client": Veerg "onNousTylitamisega" on camelCase, mis rikub reeglit.
Reegli 13 rikkumised: Veergude automaatne genereerimine
Reegel 13 keelab veergudel, mille nimes on "kood" või "code", automaatse väärtuste genereerimise. Rikkumine leiti:

Tabel "Tootaja_seisundi_liik": Veerg "tootaja_seisundi_liik_kood" on tüüpi Counter, mis on automaatselt genereeritav, ja sisaldab "kood", mis rikub reeglit.
Reegli 14 rikkumised: Klassifikaatorite tabelite võtme genereerimine
Reegel 14 keelab klassifikaatorite tabelites võtmeväärtuste automaatse genereerimise. Rikkumine leiti:

Tabel "Tootaja_seisundi_liik": Primaarvõtme veerg "tootaja_seisundi_liik_kood" on tüüpi Counter, mis on automaatselt genereeritav, ja tabel on klassifikaator, mis rikub reeglit.
Reegli 16 rikkumised: Surrogaatvõtmed ja loomulikud võtmed
Reegel 16 nõuab, et kui tabelil on surrogaatvõtme veerg, mis genereerib väärtusi süsteemist, peab tabelil olema vähemalt üks loomulik võti (UNIQUE piirang NOT NULL veergudel). Leiti järgmised rikkumised:

Tabel "Isik": Veerg "isik_id" on tüüpi Counter, st surrogaatvõtme veerg, kuid tabelil puudub UNIQUE piirang teistel NOT NULL veergudel.
Tabel "Kasutajakonto": Veerg "isik_id" on tüüpi Counter, st surrogaatvõtme veerg, kuid tabelil puudub UNIQUE piirang teistel NOT NULL veergudel.
Reegli 17 rikkumised: Unikaalsed piirangud ja primaarvõtmed
Reegel 17 keelab UNIQUE piirangu sama veergude hulga peal, millele on defineeritud PRIMARY KEY piirang. Rikkumine leiti:

Tabel "Kasutajakonto": UNIQUE piirang "AK_Kasutajakonto_isik_id" on defineeritud veergule "isik_id", mis on ka primaarvõtme veerg, mis rikub reeglit.
Reegli 18 rikkumised: Välisvõtmed ja ON UPDATE CASCADE
Reegel 18 nõuab, et kui välisvõti viitab veerule, mille nimes on "kood" või "code", peab sellel olema ON UPDATE CASCADE tegevus. Leiti järgmised rikkumised:

Tabel "Tootaja_seisundi_liik": Välisvõtme piirang "FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood" viitab "Klassifikaator (kood)" (nimes on "kood"), kuid puudub ON UPDATE CASCADE (ainult ON DELETE CASCADE).
Tabel "Toa_seisundi_liik": Sarnane rikkumine.
Tabel "Kliendi_seisundi_liik": Sarnane rikkumine.
Reegli 19 rikkumised: Välisvõtmed ja ON UPDATE CASCADE
Reegel 19 nõuab, et kui välisvõti viitab veerule, mille nimi lõpeb "id", ei tohi sellel olla ON UPDATE CASCADE tegevust. Leiti järgmised rikkumised:

Tabel "Tuba": Välisvõtme piirang "FK_Tuba_Voodi_tyyp" viitab "Voodi_tyyp (voodi_tyyp_id)" (nimi lõpeb "id") ja sisaldab ON UPDATE Cascade, mis rikub reeglit.
Tabel "Tootaja": Välisvõtme piirang "Tootaja_Mentor" viitab "Tootaja (isik_id)" (nimi lõpeb "id") ja sisaldab ON UPDATE Cascade, mis rikub reeglit.
Reegli 20 rikkumised: 1:1 seosed ja ON DELETE CASCADE
Reegel 20 nõuab, et kui välisvõti realiseerib 1:1 seost, peab sellel olema ON DELETE CASCADE tegevus. Leiti järgmised rikkumised:

Tabel "Kasutajakonto": Välisvõtme piirang "FK_Kasutajakonto_Isik" viitab "Isik (isik_id)" ja on 1:1 seos (isik_id on primaarvõtme), kuid puudub ON DELETE CASCADE (ei ole määratud).
Tabel "Tootaja": Välisvõtme piirang "FK_Tootaja_Isik" viitab "Isik (isik_id)" ja on 1:1 seos, kuid puudub ON DELETE CASCADE (ei ole määratud).
Reegli 21 rikkumised: Klassifikaatorite tabelid ja ON DELETE CASCADE
Reegel 21 nõuab, et kui välisvõti viitab klassifikaatorite tabelile, ei tohi sellel olla ON DELETE CASCADE tegevust. Leiti järgmised rikkumised:

Tabel "Tootaja_seisundi_liik": Välisvõtme piirang "FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood" viitab "Klassifikaator (kood)" (klassifikaatorite tabel) ja sisaldab ON DELETE CASCADE, mis rikub reeglit.
Tabel "Toa_seisundi_liik": Sarnane rikkumine.
Tabel "Kliendi_seisundi_liik": Sarnane rikkumine.
Reegli 22 rikkumised: Kohustuslikud välisvõtmed ja SET NULL
Reegel 22 nõuab, et kui välisvõtme veerg on kohustuslik (NOT NULL), ei tohi sellel olla SET NULL tegevust. Rikkumine leiti:

Tabel "Tuba": Välisvõtme piirang "FK_Tuba_Toa_seisundi_liik" veerg "toa_seisundi_liik_kood" on NOT NULL DEFAULT 1, kuid piirang sisaldab ON DELETE SET NULL, mis rikub reeglit.
Reegli 23 rikkumised: Välisvõtmed ja SET DEFAULT
Reegel 23 nõuab, et kui välisvõtme veergul puudub vaikimisi väärtus, ei tohi sellel olla SET DEFAULT tegevust. Rikkumine leiti:

Tabel "Tuba": Välisvõtme piirang "FK_Tuba_Voodi_tyyp" veerg "voodi_tyyp_kood" on NOT NULL ilma vaikimisi väärtuseta, kuid piirang sisaldab ON DELETE SET DEFAULT, mis rikub reeglit.
Reegli 25 rikkumised: Tabelite loomise järjekord
Reegel 25 nõuab, et tabelid luuakse sellises järjekorras, et välisvõtmete deklareerimine ei põhjustaks vigu. Rikkumine leiti:

Tabel "Client": Viitab tabelile "Isik" välisvõtmega, kuid "Isik" luuakse pärast "Client"i, mis põhjustab vea.
Reegli 27 rikkumised: Ees- ja perenime veergude kohustuslikkus
Reegel 27 nõuab, et veergud ees- ja perenime hoidmiseks oleksid valikulised (lubavad NULL). Rikkumine leiti:

Tabel "Isik": Veergud "eesnimi" ja "perenimi" on defineeritud NOT NULL, mis rikub reeglit.
Reegli 28 rikkumised: Registreerimise ja muutmise aegade kohustuslikkus
Reegel 28 nõuab, et veergud, mis hoiavad registreerimise aega või viimase muutmise aega, oleksid kohustuslikud (NOT NULL). Rikkumine leiti:

Tabel "Isik": Veerg "viimase_muutja_aeg" on defineeritud DEFAULT Now() ilma NOT NULL, st on valikuline, mis rikub reeglit.
Reegli 29 rikkumised: Registreerija ja muutja identifikaatorite kohustuslikkus
Reegel 29 nõuab, et veergud, mis hoiavad registreerija või viimase muutja identifikaatorit, oleksid kohustuslikud (NOT NULL). Rikkumine leiti:

Tabel "Tuba": Veerg "viimase_muutja_id" on defineeritud ilma NOT NULL, st on valikuline, mis rikub reeglit.
Reegli 30 rikkumised: Vaikimisi väärtused ja NOT NULL
Reegel 30 nõuab, et kõik veergud, millel on vaikimisi väärtus, oleksid defineeritud NOT NULL. Leiti järgmised rikkumised:

Tabel "Klassifikaator": Veerg "on_aktiivne" on defineeritud DEFAULT TRUE ilma NOT NULL, st on valikuline.
Tabel "Client": Veerg "onNousTylitamisega" on defineeritud DEFAULT False ilma NOT NULL, st on valikuline.
Tabel "Isik": Veerg "viimase_muutja_aeg" on defineeritud DEFAULT Now() ilma NOT NULL, st on valikuline.
Reegli 31 rikkumised: Välisvõtmed ja vaikimisi väärtused
Reegel 31 nõuab, et kõik välisvõtme veergud, mille nimes on "seisundi_liik_kood", oleksid defineeritud vaikimisi väärtusega. Rikkumine leiti:

Tabel "Client": Veerg "kliendi_seisundi_liik_kood" on NOT NULL ilma vaikimisi väärtuseta, mis rikub reeglit.
Reegli 32 rikkumised: Registreerimise ja muutmise aegade vaikimisi väärtused
Reegel 32 nõuab, et kõik veergud, mis hoiavad registreerimise aega või viimase muutmise aega, oleksid defineeritud vaikimisi väärtusega. Rikkumine leiti:

Tabel "Tuba": Veerg "viimase_muutja_aeg" on defineeritud NOT NULL ilma vaikimisi väärtuseta, mis rikub reeglit.
Reegli 33 rikkumised: Kirjelduste veergude pikkus
Reegel 33 nõuab, et veergud, mis hoiavad kirjeldusi, kommentaare jms, lubaksid vähemalt 255 tähemärki. Rikkumine leiti:

Tabel "Tuba": Veerg "kommentaar" on defineeritud Text(50), mis lubab ainult 50 tähemärki, mis rikub reeglit.
Kokkuvõte rikkumistest tabelite kaupa:
Järgnev tabel toob kokku kõik leitud rikkumised, et anda ülevaade, millised reeglid millistes tabelites ei ole täidetud:

Tabel	Rikutud reeglid
Klassifikaator	2, 4, 6, 8, 30
Toa_tyyp	8
Voodi_tyyp	1, 5, 8
Tootaja_seisundi_liik	13, 14, 18, 21
Toa_seisundi_liik	18, 21
Toa_kategooria_tyyp	8
Toa_kategooria	1, 4, 8
Riik	8
Kliendi_seisundi_liik	18, 21
Isiku_seisundi_liik	8
Hoone	8
Client	1, 25, 31, 30, 8, 9, 11
Isik	1, 3, 4, 27, 28, 30, 8, 16
Kasutajakonto	9, 16, 17, 20, 8
Tootaja	19, 20, 8
Tuba	1, 19, 22, 23, 32, 33, 8, 10, 29
Toa_kategooria_omamine	-
Tootaja_rolli_omamine	-
Tootaja_roll	8
See tabel näitab, et kõige rohkem rikkumisi esineb tabelites "Isik", "Client" ja "Tuba", mis nõuab täiendavat tähelepanu andmebaasi disaini parandamisel.

Järeldus
Andmebaasi disaini reeglite kontroll näitas, et mitmed tabelid ei vasta seatud nõuetele, eriti seoses piirangute süntaksiga, klassifikaatorite tabelite kasutamisega ja veergude nimetustega. Soovitatav on parandada nimetusi, lisada puuduvad NOT NULL piirangud ja tagada tabelite loomise õige järjekord, et vältida vigu.

Võtmeviited
Andmebaasi disaini reeglid ja praktikad
SQL piirangute defineerimine
Klassifikaatorite tabelite disain

**********
Qwen2.5-Turbo
**********

Reeglid, mis pole täidetud:
Reegel 1
Veateade: Mõned tabelite (nt Klassifikaator, Toa_kategooria) ei deklareeri PRIMARY KEY, UNIQUE või muud kitsendusi nimega.
Viitamine:

CREATE TABLE Klassifikaator – PRIMARY KEY (kood) puudub nimi.
CREATE TABLE Toa_kategooria – PRIMARY KEY (toa_kategooria_kood) puudub nimi.
Reegel 2
Veateade: Olemas on ühine Klassifikaator tabel, mis vastab mitmele klassifikaatorite tüübi jaoks.
Viitamine: CREATE TABLE Klassifikaator on vastuolus reegliga.

Reegel 4
Veateade: Isik tabelis on veerg kood (mitte-klassifikaatoritabel).
Viitamine: Isik tabelis: kood Short NOT NULL DEFAULT 1 on vastuolus reegliga.

Reegel 5
Veateade: Voodi_tyyp tabelis on PRIMARY KEY veerg nimega voodi_tyyp_id (kasutab id asemel kood/code).
Viitamine: Voodi_tyyp tabelis: voodi_tyyp_id on vastuolus reegliga.

Reegel 8
Veateade: Client tabelis segatakse eesti- ja inglisekeelseid nimed (nt isik_id).
Viitamine: Client tabeli veerg isik_id (eesti "isik" + inglise "id") on segamine.

Reegel 10
Veateade: Kitsenduste nimed ei järgi vormingut pk_<tabelinimi> (nt PK_Toa_tyyp asemel peaks olema pk_toa_tyyp).
Viitamine:

PK_Toa_tyyp, PK_Voodi_tyyp, PK_Tootaja_seisundi_liik jne.
Reegel 11
Veateade: Tabelinimed on PascalCase (nt Klassifikaator, Client), mitte snake_case.
Viitamine: Kõik tabelinimed peaksid olema väiketähtedega ja underscorega (nt klassifikaator, client).

Reegel 13
Veateade: Tootaja_seisundi_liik tabelis on PRIMARY KEY veerg tootaja_seisundi_liik_kood (Counter/AUTOINCREMENT), mis on klassifikaatoritabel.
Viitamine: Tootaja_seisundi_liik tabelis: tootaja_seisundi_liik_kood Counter on vastuolus reegliga.

Reegel 14
Veateade: Tootaja_seisundi_liik tabelis on PRIMARY KEY veerg tootaja_seisundi_liik_kood (Counter/AUTOINCREMENT), mis on klassifikaatoritabel.
Viitamine: Samas tabelis nagu reegel 13.

Reegel 16
Veateade: Isik tabelis on surrogaatvõti isik_id (Counter/AUTOINCREMENT), kuid puudub sisuline võti (UNIQUE NOT NULL veerg).
Viitamine: Isik tabelis: isikukood on UNIQUE ei ole deklareeritud.

Reegel 17
Veateade: Kasutajakonto tabelis on UNIQUE kitsendus AK_Kasutajakonto_isik_id sama veergude hulgadel nagu PRIMARY KEY.
Viitamine: AK_Kasutajakonto_isik_id on dubleeriv PRIMARY KEY (isik_id).

Reegel 18
Veateade: Tootaja_seisundi_liik tabelis on FOREIGN KEY FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood (viitab Klassifikaator.kood), mis ei kasuta ON UPDATE CASCADE.
Viitamine: FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood on ON DELETE CASCADE, puudub ON UPDATE CASCADE.

Reegel 19
Veateade: Tuba tabelis on FOREIGN KEY FK_Tuba_Voodi_tyyp (viitab Voodi_tyyp.voodi_tyyp_id), mis kasutab ON UPDATE CASCADE (veerg nimi lõpeb id).
Viitamine: Voodi_tyyp_id on "id" tüüpi veerg, kuid ON UPDATE CASCADE on lubatud mitte.

Reegel 20
Veateade: Tootaja tabelis on FOREIGN KEY FK_Tootaja_Isik (viitab Isik.isik_id), mis on 1:1 seos, kuid puudub ON DELETE CASCADE.
Viitamine: FK_Tootaja_Isik ei sisalda ON DELETE CASCADE.

Reegel 21
Veateade: Tootaja_seisundi_liik tabelis on FOREIGN KEY FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood (viitab Klassifikaator), mis kasutab ON DELETE CASCADE.
Viitamine: ON DELETE CASCADE ei ole lubatud klassifikaatorite tabelitele.

Reegel 22
Veateade: Tuba tabelis on FOREIGN KEY FK_Tuba_Toa_seisundi_liik (veerg toa_seisundi_liik_kood on NOT NULL), kuid kasutab ON DELETE SET NULL.
Viitamine: ON DELETE SET NULL ei ole lubatud kohustuslikele veergudele.

Reegel 23
Veateade: Tuba tabelis on FOREIGN KEY FK_Tuba_Voodi_tyyp (veerg voodi_tyyp_kood puudub vaikimisi väärtus), kuid kasutab ON DELETE SET DEFAULT.
Viitamine: voodi_tyyp_kood ei ole määratud DEFAULT väärtus.

Reegel 25
Veateade: Client tabel loodi enne Isik tabelit, mis põhjustab välisvõtmete deklareerimise viga.
Viitamine: Client viitab Isik-ile, kuid Isik loodi hiljem.

Reegel 27
Veateade: Isik tabelis on veergud eesnimi ja perenimi NOT NULL.
Viitamine: eesnimi ja perenimi peaksid lubama NULL.

Reegel 28
Veateade: Isik tabelis on veerg viimase_muutm_aeg NOT NULL ei ole.
Viitamine: viimase_muutm_aeg on DateTime DEFAULT Now(), puudub NOT NULL.

Reegel 30
Veateade: Klassifikaator tabelis on veerg on_aktiivne määratud vaikimisi väärtusega, kuid ei ole NOT NULL.
Viitamine: on_aktiivne YesNo DEFAULT TRUE ei sisalda NOT NULL.

Reegel 31
Veateade: Client tabelis on veerg kliendi_seisundi_liik_kood NOT NULL ilma vaikimisi väärtusega.
Viitamine: kliendi_seisundi_liik_kood on NOT NULL, puudub DEFAULT.

Reegel 33
Veateade: Tuba tabelis on veerg kommentaar suurus 50, mis on väiksem kui 255.
Viitamine: kommentaar Text(50) ei vasta kohustuslikule 255 tähemärgi piirangule.

Reegel 34
Veateade: Isik tabelis on eesnimi (150) ja perenimi (200) suuremad kui 50 tähemärgi.
Viitamine: eesnimi Text(150) ja perenimi Text(200) on üle piirangu.

Reegel 35
Veateade: Isik tabelis on e_meil suurus 255, kuid reeglis on lubatud maksimaalselt 254.
Viitamine: e_meil Text(255) ületab piirangu.

Reegel 36
Veateade: Tuba tabelis on veerg hinna_vahemiku_algus tüübina float.
Viitamine: float tüüp on keelatud.

Reegel 37
Veateade: Tuba tabelis on veerg hinna_vahemiku_lopp tüübina decimal ilma täpsuse ja skaalaga.
Viitamine: decimal peab olema decimal(precision,scale).

Kokkuvõte:
Need reeglid ei ole täidetud, kuna SQL-lauseid ei ole kohandatud vastavalt nõuetele. Kontrollige kõiki mainitud aspekte uuesti.

**********
Claude 3.7 Normal
**********

I'll review the SQL table creation statements against the provided rules and report any violations.
Rules Violations:
Reegel 1: Broken constraints

CONSTRAINT FK_Isik FOREIGN KEY () REFERENCES Isik (isik_id) in table Client is missing column names.

Reegel 2: No common classifier table

Klassifikaator table exists, violating the rule that each classifier should have its own table.
Several foreign keys reference this table: FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood, FK_Toa_seisundi_liik_toa_seisundi_liik_kood, FK_Toa_seisundi_liik_toa_seisundi_liik_kood (in Kliendi_seisundi_liik).

Reegel 4: No columns named just code/id

Toa_kategooria table has a column named just kood.
Isik table has columns named just kood (appears twice).

Reegel 5: Classifier tables should use kood/code

Voodi_tyyp table has primary key voodi_tyyp_id instead of using kood or code.
Tootaja_seisundi_liik table uses tootaja_seisundi_liik_kood as Counter, not appropriate for classifier.

Reegel 6: Named constraints

PRIMARY KEY (isik_id) in Tootaja table lacks a named constraint.

Reegel 8: Consistent language

Hoone table mixes Estonian and English with building_code field.
Tuba table has name field (English) alongside Estonian fields.
Tootaja_rolli_omamine table has end_time (English) alongside Estonian fields.
Client table uses English name with Estonian fields.

Reegel 9: Boolean naming

Client table has onNousTylitamisega field, which should be on_nous_tylitamisega.
Kasutajakonto table has aktiivne field, which should be on_aktiivne.

Reegel 10: Consistent constraint naming

Inconsistent naming of primary key constraints: PK_isik_id, PK_Kasutajakonto_isik_id, PK_Isik.
Inconsistent naming of foreign key constraints: Tootaja_Mentor, Tuba_Toa_tyyp, Tuba_Tootaja_viimane_muutja.

Reegel 12: Primary key constraint

Toa_kategooria_omamine table lacks a primary key constraint.

Reegel 13: System-generated code values

Tootaja_seisundi_liik table has tootaja_seisundi_liik_kood as Counter type.

Reegel 15: No system-generated foreign key values

Kasutajakonto table has isik_id as Counter type, which is a foreign key.

Reegel 16: Surrogate key with natural key

Isik table has isik_id as Counter but no UNIQUE constraint defining a natural key.

Reegel 17: No duplicate UNIQUE constraints

Kasutajakonto table has AK_Kasutajakonto_isik_id UNIQUE constraint on isik_id, which is already the primary key.

Reegel 21: Classifiers and ON DELETE CASCADE

Tuba_Toa_tyyp foreign key in Tuba table has ON DELETE CASCADE but references a classifier table.

Reegel 22: No SET NULL on NOT NULL columns

FK_Tuba_Toa_seisundi_liik has ON DELETE SET NULL but the column is NOT NULL with DEFAULT.

Reegel 23: No SET DEFAULT on columns without DEFAULT

FK_Tuba_Voodi_tyyp has ON DELETE SET DEFAULT but the column has no DEFAULT value.

Reegel 24: Consistent NO ACTION and RESTRICT

FK_Tuba_Tootaja_registreerija uses ON UPDATE NO ACTION while Tuba_Tootaja_viimane_muutja uses ON UPDATE RESTRICT.

Reegel 25: Table creation order

Client table is created before Isik table while having a foreign key to it.
Tootaja_rolli_omamine refers to Tootaja_roll which is created later.

Reegel 26: All tables must be connected

Voodi_tyyp table's primary key is declared as voodi_tyyp_kood but its column is named voodi_tyyp_id.

Reegel 27: First and last names can be NULL

Isik table has eesnimi and perenimi columns as NOT NULL.

Reegel 28: Registration time columns NOT NULL

Isik table has viimase_muutm_aeg that allows NULL values.
Tuba table has a timestamp reg_aeg which is already NOT NULL.

Reegel 33: Description fields min length

Tuba table has kommentaar field with limited length of 50 characters.

Reegel 35: Email fields length

Isik table has e_meil field with length 255, should be 254.

Reegel 36: No floating point types

Tuba table has hinna_vahemiku_algus as float type.

Reegel 37: Numeric/Decimal precision and scale

Tuba table has hinna_vahemiku_lopp as decimal type without precision and scale.

Additional Issues:

Voodi_tyyp table has a primary key declared as voodi_tyyp_kood but the column is named voodi_tyyp_id.
Toa_kategooria table has primary key defined as toa_kategooria_kood but the column is named kood.
Toa_kategooria_omamine needs a primary key constraint.
FK_Toa_seisundi_liik_toa_seisundi_liik_kood constraint in Kliendi_seisundi_liik table references wrong column.
FK_Isik_Riik constraint in Isik table references kood column which appears twice.
AK_nimetus constraint in Tuba table references nimetus column, but table has name column.

**********
Qwen2.5-Max
**********

Kokkuvõte reeglite rikkumistest (kõik leitud vead mõlemast kontrollist):
Reegel 2
Veateade : Leitud ühine klassifikaatorite tabel 'Klassifikaator'.
Viide : CREATE TABLE Klassifikaator (...);.

Reegel 4
Veateade : Veerg kood tabelis Klassifikaator ei tohi olla nimetatud ilma täiendava identifikaatorita.
Viide : CREATE TABLE Klassifikaator (kood Short PRIMARY KEY, ...);.
Veateade : Veerg kood tabelis Isik ei tohi olla nimetatud ilma täiendava identifikaatorita.
Viide : CREATE TABLE Isik (... kood Text(3) NOT NULL, ...);.

Reegel 5
Veateade : Veerg voodi_tyyp_id tabelis Voodi_tyyp peaks sisaldama kood või code nimes, mitte id.
Viide : CREATE TABLE Voodi_tyyp (voodi_tyyp_id Text(4) NOT NULL, ...);.

Reegel 8
Veateade : Tabeli Hoone veerg building_code kasutab inglise keelt, mis on segatud eesti keelsega.
Viide : CREATE TABLE Hoone (building_code Text(4) NOT NULL, ...);.
Veateade : Veerg onNousTylitamisega tabelis Client kasutab camelCase asemel snake_case.
Viide : CREATE TABLE Client (... onNousTylitamisega YesNo DEFAULT False, ...);.
Veateade : Veerg name tabelis Tuba kasutab inglise keelt, mis on segatud eesti keelsega.
Viide : CREATE TABLE Tuba (... name Text(50) NOT NULL, ...);.
Veateade : Veerg aktiivne tabelis Kasutajakonto peaks olema on_aktiivne (eesti keeles).
Viide : CREATE TABLE Kasutajakonto (... aktiivne YesNo NOT NULL DEFAULT True, ...);.

Reegel 9
Veateade : Veerg onNousTylitamisega tabelis Client peaks olema snake_case (nt on_nous_tylitamisega).
Viide : CREATE TABLE Client (... onNousTylitamisega YesNo DEFAULT False, ...);.
Veateade : Veerg aktiivne tabelis Kasutajakonto peaks olema on_aktiivne (eesti keeles).
Viide : CREATE TABLE Kasutajakonto (... aktiivne YesNo NOT NULL DEFAULT True, ...);.

Reegel 13
Veateade : Veerg tootaja_seisundi_liik_kood tabelis Tootaja_seisundi_liik kasutab süsteemset genereerimist (Counter), mis on keelatud kood-nimeliste veergude jaoks.
Viide : CREATE TABLE Tootaja_seisundi_liik (tootaja_seisundi_liik_kood Counter NOT NULL, ...);.

Reegel 14
Veateade : Klassifikaatori tabel Tootaja_seisundi_liik kasutab süsteemset genereerimist (Counter) võtmeväärtuste jaoks.
Viide : CREATE TABLE Tootaja_seisundi_liik (tootaja_seisundi_liik_kood Counter NOT NULL, ...);.

Reegel 17
Veateade : Tabel Kasutajakonto deklareerib UNIQUE kitsenduse sama veeru jaoks, millele on juba PRIMARY KEY.
Viide : CONSTRAINT AK_Kasutajakonto_isik_id UNIQUE (isik_id);.

Reegel 18
Veateade : Välisvõti toa_seisundi_liik_kood tabelis Toa_seisundi_liik viitab kood-veerule, kuid puudub ON UPDATE CASCADE.
Viide : CONSTRAINT FK_Toa_seisundi_liik_toa_seisundi_liik_kood FOREIGN KEY (...) REFERENCES Klassifikaator (kood) ON DELETE CASCADE;.
Veateade : Välisvõti voodi_tyyp_kood tabelis Tuba viitab voodi_tyyp_id (mis sisaldab id), kuid kasutab ON UPDATE CASCADE.
Viide : CONSTRAINT FK_Tuba_Voodi_tyyp FOREIGN KEY (voodi_tyyp_kood) REFERENCES Voodi_tyyp (voodi_tyyp_id) ON UPDATE CASCADE;.

Reegel 21
Veateade : Välisvõti tootaja_seisundi_liik_kood tabelis Tootaja_seisundi_liik viitab klassifikaatorile ja kasutab ON DELETE CASCADE.
Viide : CONSTRAINT FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood FOREIGN KEY (...) REFERENCES Klassifikaator (kood) ON DELETE CASCADE;.

Reegel 22
Veateade : Välisvõti toa_seisundi_liik_kood tabelis Tuba on NOT NULL, kuid kasutab ON DELETE SET NULL.
Viide : CONSTRAINT FK_Tuba_Toa_seisundi_liik FOREIGN KEY (...) REFERENCES Toa_seisundi_liik (...) ON DELETE SET NULL;.

Reegel 23
Veateade : Välisvõti voodi_tyyp_kood tabelis Tuba kasutab ON DELETE SET DEFAULT, kuid veerg voodi_tyyp_kood ei oma vaikimisi väärtust.
Viide : CONSTRAINT FK_Tuba_Voodi_tyyp FOREIGN KEY (...) REFERENCES Voodi_tyyp (...) ON DELETE SET DEFAULT;.

Reegel 24
Veateade : Tabel Tuba segab välisvõtme deklaratsioonis NO ACTION ja RESTRICT.
Viide :

CONSTRAINT FK_Tuba_Tootaja_registreerija FOREIGN KEY (...) ON UPDATE NO ACTION,  
CONSTRAINT Tuba_Tootaja_viimane_muutja FOREIGN KEY (...) ON UPDATE RESTRICT.
Reegel 25
Veateade : Tabel Client viitab tabelile Isik, mis on loodud pärast Clienti, põhjustades välisvõtme deklareerimise viga.
Viide : CREATE TABLE Client (... FOREIGN KEY () REFERENCES Isik (isik_id) ON DELETE CASCADE);.
Veateade : Tabel Tootaja_rolli_omamine viitab tabelile Tootaja_roll, mis on loodud pärast seda, põhjustades välisvõtme deklareerimise viga.
Viide : CREATE TABLE Tootaja_rolli_omamine (... FOREIGN KEY (tootaja_roll_kood) REFERENCES Tootaja_roll (tootaja_roll_kood) ...);.

Reegel 26
Veateade : Tabel Hoone ei ole ühegi teise tabeli välisvõtmena viidatud.
Viide : CREATE TABLE Hoone (...);.

Reegel 27
Veateade : Veerud eesnimi ja perenimi tabelis Isik on kohustuslikud (NOT NULL), kuid peaksid lubama NULLe.
Viide : CREATE TABLE Isik (... eesnimi Text(150) NOT NULL, perenimi Text(200) NOT NULL, ...);.

Reegel 30
Veateade : Veerg onNousTylitamisega tabelis Client omab vaikimisi väärtust, kuid puudub NOT NULL kitsendus.
Viide : CREATE TABLE Client (... onNousTylitamisega YesNo DEFAULT False, ...);.

Reegel 31
Veateade : Välisvõtme veerg kliendi_seisundi_liik_kood tabelis Client ei oma vaikimisi väärtust.
Viide : CREATE TABLE Client (kliendi_seisundi_liik_kood Short NOT NULL, ...);.
Veateade : Välisvõtme veerg tootaja_seisundi_liik_kood tabelis Tootaja_seisundi_liik ei oma vaikimisi väärtust.
Viide : CREATE TABLE Tootaja_seisundi_liik (tootaja_seisundi_liik_kood Counter NOT NULL, ...);.

Reegel 32
Veateade : Veerg viimase_muutm_aeg tabelis Tuba on NOT NULL, kuid puudub vaikimisi väärtus.
Viide : CREATE TABLE Tuba (... viimase_muutm_aeg DateTime NOT NULL, ...);.

Reegel 33
Veateade : Veerg kommentaar tabelis Tuba lubab vaid 50 tähemärki, kuid peaks lubama vähemalt 255.
Viide : CREATE TABLE Tuba (... kommentaar Text(50), ...);.

Reegel 34
Veateade : Veerud eesnimi (150) ja perenimi (200) tabelis Isik ületavad 50 tähemärgi piiri.
Viide : CREATE TABLE Isik (... eesnimi Text(150) NOT NULL, perenimi Text(200) NOT NULL, ...);.

Reegel 35
Veateade : Veerg e_meil tabelis Isik on pikkusega 255, kuid peaks olema 254.
Viide : CREATE TABLE Isik (... e_meil Text(255) NOT NULL, ...);.

Reegel 36
Veateade : Veerg hinna_vahemiku_algus tabelis Tuba kasutab ujukomatüüpi (float).
Viide : CREATE TABLE Tuba (... hinna_vahemiku_algus float NOT NULL, ...);.

Reegel 37
Veateade : Veerg hinna_vahemiku_lopp tabelis Tuba ei määra täpsust (precision) ega skaalat (scale) Decimal tüübile.
Viide : CREATE TABLE Tuba (... hinna_vahemiku_lopp decimal NOT NULL, ...);.

Kokkuvõte :

Kõige sagedamini rikkunud reeglid : 8, 25, 31, 34, 35.
Kriitilised vead : Reegel 2 (ühine klassifikaatorite tabel), Reegel 18 (vigane ON UPDATE CASCADE kasutamine), Reegel 25 (tabelite järjekorra viga).
Parandamiseks soovitused :
Eemalda ühine klassifikaatorite tabel ja eralda klassifikaatorid eraldi tabelitesse.
Kontrolli välisvõtmete ON UPDATE/DELETE sätteid vastavalt reeglitele 18–24.
Paranda väljade pikkused (nt e_meil 254 tähemärki, kommentaar 255 tähemärki).
Kasuta snake_case ja keelte segamise vältimiseks ühtset keelt tabeli/veergude nimedes.

**********
Grok 3 (katse2)
**********
Analüüsin antud SQL tabelite loomise lauseid vastavalt esitatud reeglitele. Toon välja ainult need reeglid, mis ei ole täidetud, koos viitega vea asukohale.

Reegel 1: Üheski lauses ei ole katkist PRIMARY KEY, UNIQUE, FOREIGN KEY ja CHECK kitsendust
FALSE: Tabelis Client on välisvõtme kitsendus CONSTRAINT FK_Isik FOREIGN KEY () REFERENCES Isik (isik_id) ON DELETE Cascade vigane, kuna sulgudes puudub viidatav veerg.
Asukoht: CREATE TABLE Client -> CONSTRAINT FK_Isik FOREIGN KEY () REFERENCES Isik (isik_id)
Reegel 2: Andmebaasis ei ole ühist klassifikaatorite tabelit
FALSE: Tabel Klassifikaator on loodud kui ühine klassifikaatorite tabel, mida viitavad tabelid Tootaja_seisundi_liik, Toa_seisundi_liik ja Kliendi_seisundi_liik. See rikub reeglit, mis nõuab eraldi tabelit iga klassifikaatori tüübi kohta.
Asukoht: CREATE TABLE Klassifikaator
Reegel 3: Üheski tabelis ei ole mitut sama nimega veergu
FALSE: Tabelis Isik on kaks veergu nimega kood:
kood Text(3) NOT NULL
kood Short NOT NULL DEFAULT 1
Asukoht: CREATE TABLE Isik
Reegel 5: Klassifikaatorite tabelites sisaldub primaarvõtme veergude nimedes sõna kood või code, mitte id
FALSE: Tabelis Voodi_tyyp on primaarvõti voodi_tyyp_id, mis lõpeb id-ga, mitte kood või code.
Asukoht: CREATE TABLE Voodi_tyyp -> CONSTRAINT PK_Voodi_tyyp PRIMARY KEY (voodi_tyyp_kood)
Reegel 6: Kõigile PRIMARY KEY, UNIQUE, FOREIGN KEY ja CHECK kitsendustele antakse lausetes ise nimi
FALSE: Tabelis Tootaja on primaarvõtme kitsendus defineeritud otse veeru juures (isik_id Long NOT NULL PRIMARY KEY) ilma eraldi nimetatud CONSTRAINT-lauseta.
Asukoht: CREATE TABLE Tootaja -> isik_id Long NOT NULL PRIMARY KEY
Reegel 7: Kõigis kasutaja antud kitsenduste nimedes sisaldub tabeli nimi
FALSE: Tabelis Tootaja on välisvõtme kitsendus CONSTRAINT Tootaja_Mentor, kus kitsenduse nimi ei sisalda tabeli nime täielikult korrektselt (peaks olema nt FK_Tootaja_Mentor).
Asukoht: CREATE TABLE Tootaja -> CONSTRAINT Tootaja_Mentor FOREIGN KEY (mentor) REFERENCES Tootaja (isik_id)
Reegel 8: Tabeli, veergude ja kitsenduste nimedes ei kasutata segamini eesti- ja inglise keelt
FALSE:
Tabelis Client on veerg onNousTylitamisega, mis segab eesti keelt (on_) inglise keelega (tylitamisega peaks olema eesti keeles on_nõus_tühistamisega).
Tabelis Hoone on veerg building_code, mis kasutab inglise keelt, samas kui tabeli nimi on eesti keeles.
Tabelis Tuba on veerg name, mis on inglise keeles, samas kui tabeli nimi on eesti keeles.
Asukohad:
CREATE TABLE Client -> onNousTylitamisega
CREATE TABLE Hoone -> building_code
CREATE TABLE Tuba -> name
Reegel 9: Tõeväärtustüüpi veergude nimed algavad eesliitega on_ (eesti) või is_/has_ (inglise)
FALSE: Tabelis Kasutajakonto on veerg aktiivne, mis ei alga eesliitega on_ (peaks olema on_aktiivne).
Asukoht: CREATE TABLE Kasutajakonto -> aktiivne YesNo NOT NULL DEFAULT True
Reegel 10: Sama tüüpi kitsendustele on antud nimed järjekindlalt
FALSE: Primaarvõtme kitsendused ei ole järjekindlad:
Enamikus tabelites on formaat PK_<tabeli_nimi>, nt PK_Toa_tyyp, kuid tabelis Client on PK_isik_id ja tabelis Kasutajakonto on PK_Kasutajakonto_isik_id.
Asukohad:
CREATE TABLE Client -> CONSTRAINT PK_isik_id
CREATE TABLE Kasutajakonto -> CONSTRAINT PK_Kasutajakonto_isik_id
Reegel 13: Ühtegi veergu, mille nimes on sõna kood või code, ei genereeri süsteem
FALSE: Tabelis Tootaja_seisundi_liik on veerg tootaja_seisundi_liik_kood Counter NOT NULL, mis kasutab süsteemi genereeritud väärtust (Counter).
Asukoht: CREATE TABLE Tootaja_seisundi_liik -> tootaja_seisundi_liik_kood Counter NOT NULL
Reegel 14: Ühtegi klassifikaatori tabelisse ei genereeri võtmeväärtuseid süsteem
FALSE: Tabelis Tootaja_seisundi_liik on primaarvõti tootaja_seisundi_liik_kood Counter NOT NULL, mis kasutab süsteemi genereeritud väärtust (Counter).
Asukoht: CREATE TABLE Tootaja_seisundi_liik -> tootaja_seisundi_liik_kood Counter NOT NULL
Reegel 18: Kui välisvõti viitab veerule, mille nimes on sõna kood või code, siis on ON UPDATE CASCADE
FALSE:
Tabelis Kasutajakonto puudub välisvõtmel FK_Kasutajakonto_Isik (viitab isik_id) ON UPDATE CASCADE, kuigi see ei ole nõutav, kuid tabelis Tuba viitab FK_Tuba_Hoone veerule building_code ja kasutab ON UPDATE CASCADE, mis on korrektne. Kuid tabelis Tootaja viitab FK_Tootaja_Tootaja_seisundi_liik veerule tootaja_seisundi_liik_kood, kuid kasutab ON UPDATE CASCADE, mis on korrektne, kuid järjepidevus on küsitav.
Kontrollimisel selgus, et see reegel on osaliselt täidetud, kuid mitte järjepidevalt.
Reegel 19: Kui välisvõti viitab veerule, mille nimi lõpeb id, siis ei ole ON UPDATE CASCADE
FALSE: Tabelis Tootaja viitab välisvõti CONSTRAINT Tootaja_Mentor veerule isik_id ja kasutab ON UPDATE CASCADE, mis rikub reeglit.
Asukoht: CREATE TABLE Tootaja -> CONSTRAINT Tootaja_Mentor FOREIGN KEY (mentor) REFERENCES Tootaja (isik_id) ON UPDATE Cascade
Reegel 21: Kui välisvõti viitab klassifikaatori tabelile, siis ei ole ON DELETE CASCADE
FALSE:
Tabelis Tootaja_seisundi_liik viitab välisvõti FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood tabelile Klassifikaator ja kasutab ON DELETE CASCADE.
Tabelis Toa_seisundi_liik viitab välisvõti FK_Toa_seisundi_liik_toa_seisundi_liik_kood tabelile Klassifikaator ja kasutab ON DELETE CASCADE.
Tabelis Kliendi_seisundi_liik viitab välisvõti FK_Toa_seisundi_liik_toa_seisundi_liik_kood tabelile Klassifikaator ja kasutab ON DELETE CASCADE.
Asukohad:
CREATE TABLE Tootaja_seisundi_liik
CREATE TABLE Toa_seisundi_liik
CREATE TABLE Kliendi_seisundi_liik
Reegel 24: Välisvõtmete deklaratsioonides ei kasutata segamini NO ACTION ja RESTRICT
FALSE: Tabelis Tuba kasutatakse nii ON UPDATE NO ACTION (FK_Tuba_Tootaja_registreerija) kui ka ON UPDATE RESTRICT (Tuba_Tootaja_viimane_muutja), mis rikub järjepidevust.
Asukoht: CREATE TABLE Tuba
Reegel 27: Veerud eesnime ja perenime hoidmiseks on mittekohustuslikud
FALSE: Tabelis Isik on veerud eesnimi Text(150) NOT NULL ja perenimi Text(200) NOT NULL kohustuslikud.
Asukoht: CREATE TABLE Isik
Reegel 31: Kõigil välisvõtmete veergudel, mille nimes osa on seisundi_liik_kood, on vaikimisi väärtus
TRUE: Kõik vastavad veerud (toa_seisundi_liik_kood, tootaja_seisundi_liik_kood, kliendi_seisundi_liik_kood) omavad vaikimisi väärtust, nt DEFAULT 1.
Reegel 33: Veerud, kus on kirjeldused, kommentaarid, selgitused jms lubavad vähemalt 255 tähemärki
FALSE: Tabelis Tuba on veerg kommentaar Text(50), mis lubab ainult 50 tähemärki.
Asukoht: CREATE TABLE Tuba -> kommentaar Text(50)
Reegel 34: Veerud, kus on eesnimed ja perenimed, ei luba väljapikkust üle 50 tähemärgi
FALSE: Tabelis Isik on eesnimi Text(150) ja perenimi Text(200), mis ületavad 50 tähemärki.
Asukoht: CREATE TABLE Isik
Reegel 35: Veerud, kus on meiliaadress, on väljapikkusega 254 tähemärki
FALSE: Tabelis Isik on e_meil Text(255), mis ei vasta nõutud 254 tähemärgile.
Asukoht: CREATE TABLE Isik -> e_meil Text(255)
Reegel 36: Ühegi veeru puhul ei kasutata ujukomatüüpi (float, real, double precision)
FALSE: Tabelis Tuba on veerg hinna_vahemiku_algus float NOT NULL, mis kasutab ujukomatüüpi.
Asukoht: CREATE TABLE Tuba -> hinna_vahemiku_algus float NOT NULL
Reegel 37: Numeric või Decimal tüüpi veeru korral on määratud täpsus ja skaala
FALSE: Tabelis Tuba on veerg hinna_vahemiku_lopp decimal NOT NULL, kuid täpsus (precision) ja skaala (scale) pole määratud.
Asukoht: CREATE TABLE Tuba -> hinna_vahemiku_lopp decimal NOT NULL
Kokkuvõte
Täitmata reeglid: 1, 2, 3, 5, 6, 7, 8, 9, 10, 13, 14, 18, 19, 21, 24, 27, 33, 34, 35, 36, 37.

Kui vajad täiendavat analüüsi või parandusi, anna teada!

**********
Grok 3
**********
Analüüsin antud SQL tabelite loomise lauseid vastavalt etteantud reeglitele ja raporteerin ainult need reeglid, mis ei ole täidetud, koos viitega vea asukohale.

Reegel 1: Üheski lauses ei ole katkist PRIMARY KEY, UNIQUE, FOREIGN KEY ja CHECK kitsendust
FALSE: Tabelis Client on katkine välisvõti:
CONSTRAINT FK_Isik FOREIGN KEY () REFERENCES Isik (isik_id) ON DELETE Cascade
Probleem: Välisvõtme veeru nimi on puudu sulgudes.
Reegel 2: Andmebaasis ei ole ühist klassifikaatorite tabelit (nt Klassifikaator)
FALSE: Tabel Klassifikaator on loodud, mis rikub reeglit, kuna iga klassifikaatori tüübi jaoks peaks olema eraldi tabel.
Reegel 3: Üheski tabelis ei ole mitut sama nimega veergu
FALSE: Tabelis Isik on kaks veergu nimega kood:
kood Text(3) NOT NULL
kood Short NOT NULL DEFAULT 1
Reegel 4: Üheski tabelis ei ole veerge, mille nimi on ainult kood, code, id
FALSE: Tabelis Isik on veerg kood kahel korral:
kood Text(3) NOT NULL
kood Short NOT NULL DEFAULT 1
FALSE: Tabelis Toa_kategooria on veerg kood:
kood Short NOT NULL
Reegel 5: Klassifikaatorite tabelites sisaldub primaarvõtme veergude nimedes sõna kood või code, mitte id
FALSE: Tabelis Voodi_tyyp on primaarvõti voodi_tyyp_kood, kuid see viitab veerule voodi_tyyp_id, mis rikub nimetamisreeglit:
CONSTRAINT PK_Voodi_tyyp PRIMARY KEY (voodi_tyyp_kood)
Deklareeritud veerg: voodi_tyyp_id Text(4) NOT NULL
Reegel 7: Kõigis kasutaja antud kitsenduste nimedes sisaldub tabeli nimi
FALSE: Tabelis Tootaja on välisvõti Tootaja_Mentor, mis ei sisalda tabeli nime korrektselt:
CONSTRAINT Tootaja_Mentor FOREIGN KEY (mentor) REFERENCES Tootaja (isik_id) ON UPDATE Cascade
Peaks olema näiteks FK_Tootaja_Tootaja_mentor.
Reegel 8: Tabeli, veergude ja kitsenduste nimedes ei kasutata segamini eesti- ja inglise keelt
FALSE: Tabelis Hoone on veerg building_code, mis segab inglise keelt (building) ja eesti keelt (Hoone):
building_code Text(4) NOT NULL
FALSE: Tabelis Client on veerg onNousTylitamisega, mis segab eesti keelt (on) ja inglise keelt (YesNo tüüp):
onNousTylitamisega YesNo DEFAULT False
Reegel 9: Tõeväärtustüüpi veergude nimed algavad eesliitega on_ (eesti) või is_/has_ (inglise)
FALSE: Tabelis Kasutajakonto on veerg aktiivne, mis ei alga eesliitega on_:
aktiivne YesNo NOT NULL DEFAULT True
FALSE: Tabelis Client on veerg onNousTylitamisega, mis ei järgi korrektset nimetamist (ei ole selge eesliide on_ ega is_):
onNousTylitamisega YesNo DEFAULT False
Reegel 10: Sama tüüpi kitsendustele on antud nimed järjekindlalt
FALSE: Primaarvõtmete nimetamine ei ole järjekindel:
CONSTRAINT PK_Toa_tyyp vs CONSTRAINT PK_isik_id (tabelis Client) – peaks olema PK_Client.
Reegel 13: Ühtegi veergu, mille nimes on sõna kood või code, ei genereeri väärtuseid süsteem
FALSE: Tabelis Tootaja_seisundi_liik on veerg tootaja_seisundi_liik_kood Counter NOT NULL, mis genereerib väärtusi süsteemi poolt.
Reegel 14: Ühtegi klassifikaatori tabelisse ei genereeri võtmeväärtuseid süsteem
FALSE: Tabelis Tootaja_seisundi_liik on veerg tootaja_seisundi_liik_kood Counter NOT NULL, mis on klassifikaatori tabel ja genereerib väärtusi süsteemi poolt.
Reegel 18: Kui välisvõti viitab veerule, mille nimes on sõna kood või code, siis on ON UPDATE CASCADE
FALSE: Tabelis Kasutajakonto puudub ON UPDATE CASCADE, kuigi viitab tabelile Isik:
CONSTRAINT FK_Kasutajakonto_Isik FOREIGN KEY (isik_id) REFERENCES Isik (isik_id)
Ei vasta reeglile, kui isik_id loetakse koodiks.
Reegel 19: Kui välisvõti viitab veerule, mille nimi lõpeb id, siis ei ole ON UPDATE CASCADE
FALSE: Tabelis Tootaja on välisvõti mentor, mis viitab isik_id-le ja kasutab ON UPDATE CASCADE:
CONSTRAINT Tootaja_Mentor FOREIGN KEY (mentor) REFERENCES Tootaja (isik_id) ON UPDATE Cascade
Reegel 20: Kui välisvõti realiseerib 1:1 seose, siis on ON DELETE CASCADE
FALSE: Tabelis Kasutajakonto on 1:1 seos tabeliga Isik (primaarvõti ja välisvõti kattuvad), kuid puudub ON DELETE CASCADE:
CONSTRAINT FK_Kasutajakonto_Isik FOREIGN KEY (isik_id) REFERENCES Isik (isik_id)
Reegel 21: Kui välisvõti viitab klassifikaatori tabelile, siis ei ole ON DELETE CASCADE
FALSE: Tabelis Tootaja_seisundi_liik on ON DELETE CASCADE, kuigi viitab klassifikaatorile Klassifikaator:
CONSTRAINT FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood FOREIGN KEY (tootaja_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ON DELETE CASCADE
Reegel 27: Veerud eesnime ja perenime hoidmiseks on mittekohustuslikud
FALSE: Tabelis Isik on veerud eesnimi ja perenimi kohustuslikud:
eesnimi Text(150) NOT NULL
perenimi Text(200) NOT NULL
Reegel 30: Kõigil veergudel, millel on vaikimisi väärtus, on NOT NULL kitsendus
FALSE: Tabelis Client on veerg onNousTylitamisega vaikimisi väärtusega, kuid puudub NOT NULL:
onNousTylitamisega YesNo DEFAULT False
Reegel 34: Veerud, kus on eesnimed ja perenimed, ei luba väljapikkust üle 50 tähemärgi
FALSE: Tabelis Isik on:
eesnimi Text(150) NOT NULL (üle 50)
perenimi Text(200) NOT NULL (üle 50)
Reegel 35: Veerud, kus on meiliaadress, on väljapikkusega 254 tähemärki
FALSE: Tabelis Isik on veerg e_meil Text(255) NOT NULL, mis peaks olema 254 tähemärki.
Reegel 36: Ühegi veeru puhul ei kasutata ujukomatüüpi (float, real, double precision)
FALSE: Tabelis Tuba on veerg hinna_vahemiku_algus float NOT NULL.
Reegel 37: Numeric või Decimal tüüpi veeru korral on täpsus ja skaala määratud
FALSE: Tabelis Tuba on veerg hinna_vahemiku_lopp decimal NOT NULL, kuid puudub täpsus ja skaala (nt DECIMAL(10,2)).
Kõik ülejäänud reeglid (mis siin loetlemata) on täidetud. Kui vajad täiendavat analüüsi või parandusi, anna teada!

**********
ChatGPT 4
**********
Tabelite loomise lausetes on mitmeid reeglite rikkumisi. Siin on leitud vead koos viidetega asukohtadele:

Reegel 2 (klassifikaatorid eraldi tabelites)
Probleem: Tabel Klassifikaator eksisteerib, kuid klassifikaatorite tabelid peavad olema eraldi.
Viga: CREATE TABLE Klassifikaator (kood Short PRIMARY KEY, ...)
Reegel 4 (veeru nimi ei tohi olla lihtsalt "kood", "code" või "id")
Probleem: Tabelis Toa_kategooria on veerg kood.
Viga: CREATE TABLE Toa_kategooria (kood Short NOT NULL, ...)
Probleem: Tabelis Isik on veerg kood.
Viga: CREATE TABLE Isik (kood Text(3) NOT NULL, ...)
Reegel 5 (klassifikaatori tabelite primaarvõtmetes peab olema "kood" või "code", mitte "id")
Probleem: Tabelis Voodi_tyyp on primaarvõtme veerg voodi_tyyp_id, kuid see peaks olema voodi_tyyp_kood.
Viga: CONSTRAINT PK_Voodi_tyyp PRIMARY KEY (voodi_tyyp_kood)
Reegel 6 (kitsendustel peab olema CONSTRAINT nimega määratud)
Probleem: Client tabelis on välisvõti FOREIGN KEY () REFERENCES Isik (isik_id) ON DELETE CASCADE, kuid kitsendusel puudub nimi.
Viga: FOREIGN KEY () REFERENCES Isik (isik_id) ON DELETE CASCADE
Reegel 7 (kitsenduse nimedes peab sisalduma tabeli nimi)
Probleem: Tabelis Toa_kategooria on CONSTRAINT AK_nimetus UNIQUE (nimetus), kuid kitsenduse nimi peaks sisaldama tabeli nime.
Viga: CONSTRAINT AK_nimetus UNIQUE (nimetus)
Reegel 10 (järjekindlad kitsenduste nimed)
Probleem: Tootaja tabeli välisvõti Tootaja_Mentor ei järgi järjekindlat nimekuju.
Viga: CONSTRAINT Tootaja_Mentor FOREIGN KEY (mentor) REFERENCES Tootaja (isik_id) ON UPDATE Cascade
Parandus: CONSTRAINT FK_Tootaja_Mentor FOREIGN KEY (mentor) REFERENCES Tootaja (isik_id) ON UPDATE Cascade
Reegel 13 (klassifikaatorite võtmeveerg ei tohi olla genereeritud süsteemi poolt)
Probleem: Tabelis Tootaja_seisundi_liik on veerg tootaja_seisundi_liik_kood tüübiga Counter, mis on autogeneratsiooniga.
Viga: tootaja_seisundi_liik_kood Counter NOT NULL
Reegel 16 (surrogaatvõtmega tabelis peab olema vähemalt üks sisuline unikaalne võti)
Probleem: Isik tabeli isik_id on Counter, kuid puudub täiendav sisuline unikaalne võti.
Viga: isik_id Counter NOT NULL,
Lahendus: Lisa UNIQUE piirang näiteks isikukood peale.
Reegel 18 (kui FK viitab veerule, mille nimes on "kood" või "code", siis ON UPDATE CASCADE on kohustuslik)
Probleem: Isik tabelis FK_Isik_Riik viitab veerule riik_kood, kuid ON UPDATE CASCADE puudub.
Viga: CONSTRAINT FK_Isik_Riik FOREIGN KEY (kood) REFERENCES Riik (riik_kood)
Reegel 21 (klassifikaatori välisvõtmel ei tohi olla ON DELETE CASCADE)
Probleem: Tabelites Tootaja_seisundi_liik, Toa_seisundi_liik ja Kliendi_seisundi_liik on välisvõti REFERENCES Klassifikaator (kood) ON DELETE CASCADE, mis pole lubatud.
Viga: CONSTRAINT FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood FOREIGN KEY (tootaja_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ON DELETE CASCADE
Reegel 23 (välisvõtmel ei tohi olla SET DEFAULT, kui veerul puudub vaikimisi väärtus)
Probleem: Tuba tabelis on FK_Tuba_Voodi_tyyp määratud ON DELETE SET DEFAULT, kuid veerul puudub vaikimisi väärtus.
Viga: CONSTRAINT FK_Tuba_Voodi_tyyp FOREIGN KEY (voodi_tyyp_kood) REFERENCES Voodi_tyyp (voodi_tyyp_id) ON UPDATE Cascade ON DELETE SET DEFAULT
Reegel 26 (kõik tabelid peavad olema seotud välisvõtme kaudu)
Probleem: Tabel Klassifikaator ei ole seotud ühegi teise tabeliga välisvõtme kaudu.
Viga: CREATE TABLE Klassifikaator (...)
Reegel 27 (ees- ja perenimed peavad lubama NULL väärtuseid)
Probleem: Isik tabelis on eesnimi ja perenimi NOT NULL.
Viga: eesnimi Text(150) NOT NULL, perenimi Text(200) NOT NULL
Lahendus: Muuda veerud eesnimi Text(150) NULL, perenimi Text(200) NULL
Reegel 34 (eesnime ja perenime maksimaalne pikkus 50 tähemärki)
Probleem: Isik tabelis eesnimi ja perenimi ületavad 50 tähemärki.
Viga: eesnimi Text(150), perenimi Text(200)
Reegel 35 (e-meili maksimaalne pikkus 254 tähemärki)
Probleem: Isik tabelis e_meil on 255 tähemärki, kuid max on 254.
Viga: e_meil Text(255)
Reegel 36 (ei tohi kasutada float tüüpi)
Probleem: Tuba tabelis hinna_vahemiku_algus on float.
Viga: hinna_vahemiku_algus float NOT NULL
Reegel 37 (numeric/decimal peab sisaldama täpsust ja skaalat)
Probleem: Tuba tabelis hinna_vahemiku_lopp on decimal, kuid ilma määratud täpsuse ja skaalata.
Viga: hinna_vahemiku_lopp decimal NOT NULL
Kokkuvõte
Leiti 18 rikkumist erinevates reeglites. Soovitan parandada:

Eemalda üldine Klassifikaator tabel ja loo eraldi klassifikaatoritabelid.
Vältida id, code ja kood ainukese veerunimena.
Kõikidel piirangutel peab olema CONSTRAINT nimega.
Välisvõtete määrangud peavad järgima ON UPDATE/DELETE reegleid.
Kasuta eesnimi/perenimi max 50 tähemärki, e-mail max 254 tähemärki.
Asenda float tüübid numeric(precision, scale) tüübiga.
Lisa UNIQUE piirangud sinna, kus on surrogaatvõti (nt isik_id).
Kas soovid, et ma aitaksin need parandused ka SQL-is rakendada? 😊
**********
Gemini 2.0 Flash
**********

Muidugi, siin on tulemus reeglite kaupa, näidates, millistes tabelites on rikkumisi:

Reegel 1: Klassifikaator, Voodi_tyyp, Toa_kategooria
Reegel 2: Klassifikaator, Tootaja_seisundi_liik, Toa_seisundi_liik, Kliendi_seisundi_liik
Reegel 4: Klassifikaator, Voodi_tyyp, Tootaja_seisundi_liik, Toa_seisundi_liik, Toa_kategooria, Kliendi_seisundi_liik, Isik
Reegel 5: Klassifikaator, Voodi_tyyp, Tootaja_seisundi_liik, Toa_seisundi_liik, Toa_kategooria, Kliendi_seisundi_liik, Isik
Reegel 13: Tootaja_seisundi_liik, Isik
Reegel 14: Klassifikaator, Tootaja_seisundi_liik, Toa_kategooria
Reegel 16: Isik
Reegel 21: Tootaja_seisundi_liik, Toa_seisundi_liik, Kliendi_seisundi_liik
Reegel 25: Tootaja_seisundi_liik, Toa_seisundi_liik, Kliendi_seisundi_liik, Isik
Reegel 26: Client, Kasutajakonto, Tootaja, Tuba, Toa_kategooria_omamine, Tootaja_rolli_omamine
Reegel 27: Client
Reegel 34: Isik
Reegel 36: Tuba
Reegel 37: Tuba

**********
Gemini 2.0 Flash Thinkng Experimental
**********
Andmebaasi disaineri rolli kontrollaruanne
Tere! Olen andmebaasi disaineri rollis ja kontrollinud esitatud SQL tabelite loomise lauseid 37 reegli suhtes. Allpool on raport reeglite kaupa, kus on välja toodud ainult reeglid, mis ei ole täidetud, koos viitega vea asukohale. Kui reegel on täidetud, siis seda raportis ei ole.

Reegel 2: Andmebaasis ei ole ühist klassifikaatorite tabelit (nt Klassifikaator), st iga klassifikaatori tüübi kohta luuakse eraldi tabel.

EI OLE TÄIDETUD: Tabel Klassifikaator on ühine klassifikaatorite tabel, mida reegel 2 keelab. Seda tabelit kasutatakse välisvõtme viitena tabelites Tootaja_seisundi_liik, Toa_seisundi_liik ja Kliendi_seisundi_liik.
Reegel 4: Üheski tabelis ei ole veerge, mille nimi on ainult kood, code, id (st näiteks isik_id ja riik_kood ei lähe arvesse).

EI OLE TÄIDETUD: Tabelis Isik on veerg nimega kood.
EI OLE TÄIDETUD: Tabelis Toa_kategooria on veerg nimega kood.
EI OLE TÄIDETUD: Tabelis Client on veerg nimega isik_id.
EI OLE TÄIDETUD: Tabelis Kasutajakonto on veerg nimega isik_id.
EI OLE TÄIDETUD: Tabelis Tootaja on veerg nimega isik_id.
EI OLE TÄIDETUD: Tabelis Tootaja_rolli_omamine on veerg nimega isik_id.
Reegel 5: Klassifikaatorite tabelites sisaldub primaarvõtme veergude nimedes sõna kood või code, mitte id.

EI OLE TÄIDETUD: Tabelis Voodi_tyyp on primaarvõtme veeru nimi voodi_tyyp_id, mis sisaldab sõna "id", mitte "kood" või "code". Kuigi tabeli nimi on klassifikaatori tüüpi (vihjab klassifikaatorile), ei pruugi see reegli 2 rikkumise tõttu olla klassifikaatori tabel eraldiseisvalt.
EI OLE TÄIDETUD: Tabelis Tootaja_rolli_omamine on primaarvõtme veeru nimi tootaja_rolli_omamine_id, mis sisaldab sõna "id", mitte "kood" või "code". See tabel ei ole otseselt klassifikaator, aga primaarvõtme nime osas reegel kehtib.
Reegel 13: Ühtegi veergu, mille nimes on sõna kood või code, ei genereeri väärtuseid süsteem (MS Accessis tüüp Counter või Autoincrement, PostgreSQLis notatsioon SERIAL/SMALLSERIAL/BIGSERIAL või GENERATED ALWAYS AS IDENTITY).

EI OLE TÄIDETUD: Tabelis Tootaja_seisundi_liik on veerg tootaja_seisundi_liik_kood tüübiga Counter, mis genereerib väärtuseid süsteem.
EI OLE TÄIDETUD: Tabelis Isik on veerg isik_id tüübiga Counter, mis genereerib väärtuseid süsteem.
EI OLE TÄIDETUD: Tabelis Kasutajakonto on veerg isik_id tüübiga Counter, mis genereerib väärtuseid süsteem.
EI OLE TÄIDETUD: Tabelis Tootaja_rolli_omamine on veerg tootaja_rolli_omamine_id tüübiga Counter, mis genereerib väärtuseid süsteem.
Reegel 14: Ühtegi klassifikaatori tabelisse ei genereeri võtmeväärtuseid süsteem (MS Accessis tüüp Counter või Autoincrement, PostgreSQLis notatsioon SERIAL/SMALLSERIAL/BIGSERIAL või GENERATED ALWAYS AS IDENTITY).

EI OLE TÄIDETUD: Tabelis Tootaja_seisundi_liik on primaarvõtme veerg tootaja_seisundi_liik_kood tüübiga Counter, mis genereerib väärtuseid süsteem ja see tabel on klassifikaatori tüüpi.
Reegel 15: Ühtegi välisvõtme veergu ei genereeri väärtuseid süsteem (MS Accessis tüüp Counter või Autoincrement, PostgreSQLis notatsioon SERIAL/SMALLSERIAL/BIGSERIAL või GENERATED ALWAYS AS IDENTITY).

EI OLE TÄIDETUD: Tabelis Tootaja_seisundi_liik on veerg tootaja_seisundi_liik_kood välisvõtme veeruna määratletud FOREIGN KEY (tootaja_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ja on tüübiga Counter, mis genereerib väärtuseid süsteem.
EI OLE TÄIDETUD: Tabelis Toa_seisundi_liik on veerg toa_seisundi_liik_kood välisvõtme veeruna määratletud FOREIGN KEY (toa_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ja on tüübiga Short, aga see peaks olema sama tüüpi kui Klassifikaator.kood, mis on Short. Tüübi määramine Counter pole otse näha, aga kui see oleks ka Counter, siis see rikkuks reeglit 15. Hetkel ebaselge, kas see rikub reeglit 15.
EI OLE TÄIDETUD: Tabelis Kliendi_seisundi_liik on veerg kliendi_seisundi_liik_kood välisvõtme veeruna määratletud FOREIGN KEY (kliendi_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ja on tüübiga Short, sama ebaselgus nagu eelmisel punktil.
Reegel 16: Kui tabelis on surrogaatvõtme veerg, millesse genereerib unikaalseid täisarvulisi väärtuseid süsteem, siis on selles tabelis ka vähemalt üks sisuline võti (UNIQUE kitsendus NOT NULL veergudel).

EI OLE TÄIDETUD: Tabelis Isik on surrogaatvõti isik_id (Counter), aga puudub sisuline võti (UNIQUE ja NOT NULL veergudel). isikukood on küll NOT NULL aga pole UNIQUE. e_meil on NOT NULL aga pole UNIQUE.
EI OLE TÄIDETUD: Tabelis Kasutajakonto on surrogaatvõti isik_id (Counter), aga puudub sisuline võti (UNIQUE ja NOT NULL veergudel). Hetkel on ainult AK_Kasutajakonto_isik_id UNIQUE (isik_id), aga see on sama veerg mis primaarvõti. Sisulist võtit pole.
EI OLE TÄIDETUD: Tabelis Tootaja_rolli_omamine on surrogaatvõti tootaja_rolli_omamine_id (Counter), aga ainuke UNIQUE on AK_Tootaja_rolli_omamine UNIQUE (isik_id,tootaja_roll_kood,alguse_aeg), mis on sisuline võti, aga veerg tootaja_rolli_omamine_id ise on ka sisuline võti - seega reegel 16 on vastuoluline selles osas, kas loetakse surrogaatvõtmeks ka juhul, kui on sisuline võti ka olemas. Võib-olla on reegel mõeldud nii, et kui on ainult surrogaatvõti ja ei ole sisulist võtit, siis on rikkumine. Antud juhul on sisuline võti olemas, aga ka surrogaatvõti on olemas. Selguse mõttes peaks küsima reegli autorilt täpsustust. Hetkel loen, et rikkumine on.
Reegel 18: Kui välisvõti viitab veerule, mille nimes on sõna kood või code, siis on sellel välisvõtmel kompenseeriv tegevus ON UPDATE CASCADE.

EI OLE TÄIDETUD: Tabelis Client on välisvõti FK_Klient_Kliendi_seisundi_liik FOREIGN KEY (kliendi_seisundi_liik_kood) REFERENCES Kliendi_seisundi_liik (kliendi_seisundi_liik_kood), mis viitab veerule kliendi_seisundi_liik_kood (nimes on 'kood'), aga ON UPDATE CASCADE on määratud, seega see ei riku reeglit. Vabandust, lugesin valesti reeglit. Reegel ütleb, et peab olema ON UPDATE CASCADE. Kontrollin uuesti. EI OLE TÄIDETUD: Tabelis Client on välisvõti FK_Klient_Kliendi_seisundi_liik FOREIGN KEY (kliendi_seisundi_liik_kood) REFERENCES Kliendi_seisundi_liik (kliendi_seisundi_liik_kood), mis viitab veerule kliendi_seisundi_liik_kood (nimes on 'kood'), aga ei ole ON UPDATE CASCADE (on määratud ON UPDATE Cascade, aga see on sama, vabandust). See on TÄIDETUD. Vabandust, lugesin jälle valesti. Reegel 18 ütleb, et kui viitab kood või code veerule, siis on ON UPDATE CASCADE. Kontrollin uuesti. TÄIDETUD: Tabelis Client on FK_Klient_Kliendi_seisundi_liik ja on ON UPDATE Cascade. Seega TÄIDETUD. Vabandust segaduse pärast.
EI OLE TÄIDETUD: Tabelis Tootaja on välisvõti FK_Tootaja_Tootaja_seisundi_liik FOREIGN KEY (tootaja_seisundi_liik_kood) REFERENCES Tootaja_seisundi_liik (tootaja_seisundi_liik_kood), mis viitab veerule tootaja_seisundi_liik_kood (nimes on 'kood'), aga ei ole ON UPDATE CASCADE (on ON UPDATE Cascade, vabandust, sama viga uuesti). TÄIDETUD: Tabelis Tootaja on FK_Tootaja_Tootaja_seisundi_liik ja on ON UPDATE Cascade. Seega TÄIDETUD.
EI OLE TÄIDETUD: Tabelis Tuba on välisvõti FK_Tuba_Toa_seisundi_liik FOREIGN KEY (toa_seisundi_liik_kood) REFERENCES Toa_seisundi_liik (toa_seisundi_liik_kood), mis viitab veerule toa_seisundi_liik_kood (nimes on 'kood'), aga ei ole ON UPDATE CASCADE (on ON UPDATE Cascade, jälle sama viga). TÄIDETUD: Tabelis Tuba on FK_Tuba_Toa_seisundi_liik ja on ON UPDATE Cascade. Seega TÄIDETUD.
Reegel 19: Kui välisvõti viitab veerule, mille nimi lõpeb id, siis ei ole sellel välisvõtmel kompenseerivat tegevust ON UPDATE CASCADE.

EI OLE TÄIDETUD: Tabelis Client on välisvõti FK_Isik FOREIGN KEY () REFERENCES Isik (isik_id) ON DELETE Cascade. Välisvõti viitab veerule isik_id, mis lõpeb id. Peaks mitte olema ON UPDATE CASCADE. Aga polegi ON UPDATE CASCADE. Seega TÄIDETUD.
EI OLE TÄIDETUD: Tabelis Kasutajakonto on välisvõti FK_Kasutajakonto_Isik FOREIGN KEY (isik_id) REFERENCES Isik (isik_id). Välisvõti viitab veerule isik_id, mis lõpeb id. Peaks mitte olema ON UPDATE CASCADE. Aga polegi ON UPDATE CASCADE. Seega TÄIDETUD.
EI OLE TÄIDETUD: Tabelis Tootaja on välisvõti FK_Tootaja_Isik FOREIGN KEY (isik_id) REFERENCES Isik (isik_id). Välisvõti viitab veerule isik_id, mis lõpeb id. Peaks mitte olema ON UPDATE CASCADE. Aga polegi ON UPDATE CASCADE. Seega TÄIDETUD.
EI OLE TÄIDETUD: Tabelis Tootaja on välisvõti Tootaja_Mentor FOREIGN KEY (mentor) REFERENCES Tootaja (isik_id) ON UPDATE Cascade. Välisvõti viitab veerule isik_id, mis lõpeb id. Peaks mitte olema ON UPDATE CASCADE. Aga on ON UPDATE CASCADE. Seega EI OLE TÄIDETUD: Tootaja.Tootaja_Mentor FOREIGN KEY (mentor) REFERENCES Tootaja (isik_id) ON UPDATE Cascade peaks mitte olema ON UPDATE CASCADE.
EI OLE TÄIDETUD: Tabelis Tuba on välisvõti FK_Tuba_Voodi_tyyp FOREIGN KEY (voodi_tyyp_kood) REFERENCES Voodi_tyyp (voodi_tyyp_id) ON UPDATE Cascade ON DELETE SET DEFAULT. Välisvõti viitab veerule voodi_tyyp_id, mis lõpeb id. Peaks mitte olema ON UPDATE CASCADE. Aga on ON UPDATE CASCADE. Seega EI OLE TÄIDETUD: Tuba.FK_Tuba_Voodi_tyyp FOREIGN KEY (voodi_tyyp_kood) REFERENCES Voodi_tyyp (voodi_tyyp_id) ON UPDATE Cascade ON DELETE SET DEFAULT peaks mitte olema ON UPDATE CASCADE.
EI OLE TÄIDETUD: Tabelis Tuba on välisvõti FK_Tuba_Tootaja_registreerija FOREIGN KEY (registreerija_id) REFERENCES Tootaja (isik_id) ON UPDATE NO ACTION. Välisvõti viitab veerule isik_id, mis lõpeb id. Peaks mitte olema ON UPDATE CASCADE. Aga polegi ON UPDATE CASCADE (on NO ACTION, mis pole CASCADE). Seega TÄIDETUD.
EI OLE TÄIDETUD: Tabelis Tuba on välisvõti Tuba_Tootaja_viimane_muutja FOREIGN KEY (viimase_muutja_id) REFERENCES Tootaja (isik_id) ON UPDATE RESTRICT. Välisvõti viitab veerule isik_id, mis lõpeb id. Peaks mitte olema ON UPDATE CASCADE. Aga polegi ON UPDATE CASCADE (on RESTRICT, mis pole CASCADE). Seega TÄIDETUD.
EI OLE TÄIDETUD: Tabelis Tootaja_rolli_omamine on välisvõti FK_Tootaja_rolli_omamine_Tootaja FOREIGN KEY (isik_id) REFERENCES Tootaja (isik_id) ON DELETE Cascade. Välisvõti viitab veerule isik_id, mis lõpeb id. Peaks mitte olema ON UPDATE CASCADE. Aga polegi ON UPDATE CASCADE. Seega TÄIDETUD.
Reegel 20: Kui välisvõti realiseerib 1:1 seose, siis on sellel välisvõtmel kompenseeriv tegevus ON DELETE CASCADE.

EI OLE TÄIDETUD: Tabelis Kasutajakonto on välisvõti FK_Kasutajakonto_Isik FOREIGN KEY (isik_id) REFERENCES Isik (isik_id). Tabeli Kasutajakonto primaarvõti on isik_id ja see on ka välisvõti tabelisse Isik. See realiseerib 1:1 seose. Peaks olema ON DELETE CASCADE. Aga ei ole ON DELETE CASCADE. Seega EI OLE TÄIDETUD: Kasutajakonto.FK_Kasutajakonto_Isik FOREIGN KEY (isik_id) REFERENCES Isik (isik_id) peaks olema ON DELETE CASCADE.
EI OLE TÄIDETUD: Tabelis Tootaja on primaarvõti isik_id ja välisvõti FK_Tootaja_Isik FOREIGN KEY (isik_id) REFERENCES Isik (isik_id). See realiseerib 1:1 seose. Peaks olema ON DELETE CASCADE. Aga ei ole ON DELETE CASCADE. Seega EI OLE TÄIDETUD: Tootaja.FK_Tootaja_Isik FOREIGN KEY (isik_id) REFERENCES Isik (isik_id) peaks olema ON DELETE CASCADE.
Reegel 21: Kui välisvõti viitab klassifikaatori tabelile, siis ei ole sellel välisvõtmel kompenseerivat tegevust ON DELETE CASCADE.

EI OLE TÄIDETUD: Tabelis Tootaja_seisundi_liik on välisvõti FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood FOREIGN KEY (tootaja_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ON DELETE CASCADE. Viitab Klassifikaator tabelile (mida loetakse klassifikaatori tabeliks). Peaks mitte olema ON DELETE CASCADE. Aga on ON DELETE CASCADE. Seega EI OLE TÄIDETUD: Tootaja_seisundi_liik.FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood FOREIGN KEY (tootaja_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ON DELETE CASCADE peaks mitte olema ON DELETE CASCADE.
EI OLE TÄIDETUD: Tabelis Toa_seisundi_liik on välisvõti FK_Toa_seisundi_liik_toa_seisundi_liik_kood FOREIGN KEY (toa_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ON DELETE CASCADE. Viitab Klassifikaator tabelile. Peaks mitte olema ON DELETE CASCADE. Aga on ON DELETE CASCADE. Seega EI OLE TÄIDETUD: Toa_seisundi_liik.FK_Toa_seisundi_liik_toa_seisundi_liik_kood FOREIGN KEY (toa_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ON DELETE CASCADE peaks mitte olema ON DELETE CASCADE.
EI OLE TÄIDETUD: Tabelis Kliendi_seisundi_liik on välisvõti FK_Toa_seisundi_liik_toa_seisundi_liik_kood FOREIGN KEY (kliendi_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ON DELETE CASCADE. Viitab Klassifikaator tabelile. Peaks mitte olema ON DELETE CASCADE. Aga on ON DELETE CASCADE. Seega EI OLE TÄIDETUD: Kliendi_seisundi_liik.FK_Toa_seisundi_liik_toa_seisundi_liik_kood FOREIGN KEY (kliendi_seisundi_liik_kood) REFERENCES Klassifikaator (kood) ON DELETE CASCADE peaks mitte olema ON DELETE CASCADE.
Reegel 26: Ei looda ühtegi sellist tabelit, mis pole välisvõtme mõttes viitava (referencing) või viidatava (referenced) tabeli rollis seotud mitte ühegi teise tabeliga.

EI OLE TÄIDETUD: Tabel Klassifikaator ei ole seotud ühegi teise tabeliga välisvõtme mõttes. See ei viita ühelelegi tabelile ja mitte ükski teine tabel ei viita sellele (viitamised, mida tabelid Tootaja_seisundi_liik, Toa_seisundi_liik ja Kliendi_seisundi_liik teevad, on reegli 2 rikkumise tõttu küsitavad - kui ei tohiks olla ühist klassifikaatori tabelit, siis ei saa olla ka viitamist sellesse tabelisse). Kui eirame reeglit 2 ja loeme, et Klassifikaator on ikka tabel ja teised viitavad, siis Klassifikaator on ikka ainult viidatav ja mitte viitav - seega ikka rikkumine reegli 26 mõttes. Kui reegel 2 oleks täidetud, ja Klassifikaator tabelit ei oleks, siis peaksime kontrollima teisi klassifikaatori tüüpi tabeleid. Hetkel, Klassifikaator on olemas, ja ta on isoleeritud. Seega EI OLE TÄIDETUD: Tabel Klassifikaator ei ole seotud teiste tabelitega välisvõtme mõttes.
EI OLE TÄIDETUD: Tabel Isiku_seisundi_liik ei ole seotud ühegi teise tabeliga välisvõtme mõttes. See ei viita ühelelegi tabelile ja mitte ükski teine tabel ei viita sellele. Seega EI OLE TÄIDETUD: Tabel Isiku_seisundi_liik ei ole seotud teiste tabelitega välisvõtme mõttes.
EI OLE TÄIDETUD: Tabel Tootaja_roll ei ole seotud ühegi teise tabeliga välisvõtme mõttes. See ei viita ühelelegi tabelile ja mitte ükski teine tabel ei viita sellele. Seega EI OLE TÄIDETUD: Tabel Tootaja_roll ei ole seotud teiste tabelitega välisvõtme mõttes.
Reegel 36: Ühegi veeru puhul ei kasutata ujukomatüüpi (float, read, double precision).

EI OLE TÄIDETUD: Tabelis Tuba on veerg hinna_vahemiku_algus tüübiga float. Seega EI OLE TÄIDETUD: Tuba.hinna_vahemiku_algus on tüübiga float, mis on keelatud.
Reegel 37: Numeric või Decimal tüüpi veeru korral on veeru tüübi definitsioonis määratud nii täpsus (precision) kui skaala (scale).

EI OLE TÄIDETUD: Tabelis Tuba on veerg hinna_vahemiku_lopp tüübiga decimal, aga pole määratud täpsust (precision) ja skaalat (scale). Seega EI OLE TÄIDETUD: Tuba.hinna_vahemiku_lopp tüübi definitsioon peaks sisaldama nii täpsust kui skaalat.
Kokkuvõte rikkumistest:

Reegel 2: Ühine klassifikaatorite tabel Klassifikaator.
Reegel 4: Veergude nimed 'kood' (tabelis Isik ja Toa_kategooria), 'isik_id' (tabelites Client, Kasutajakonto, Tootaja, Tootaja_rolli_omamine).
Reegel 5: Primaarvõtme veeru nimedes sõna "id" (tabelites Voodi_tyyp, Tootaja_rolli_omamine).
Reegel 13: Süsteem-genereeritud väärtused veergudele, mille nimes on 'kood' või 'code' (tabelites Tootaja_seisundi_liik.tootaja_seisundi_liik_kood, Isik.isik_id, Kasutajakonto.isik_id, Tootaja_rolli_omamine.tootaja_rolli_omamine_id).
Reegel 14: Süsteem-genereeritud võtmed klassifikaatori tabelis Tootaja_seisundi_liik.
Reegel 15: Süsteem-genereeritud väärtused välisvõtme veerus Tootaja_seisundi_liik.tootaja_seisundi_liik_kood.
Reegel 16: Puudub sisuline võti tabelites Isik, Kasutajakonto, Tootaja_rolli_omamine (millel on surrogaatvõti).
Reegel 19: ON UPDATE CASCADE välisvõtmetel, mis viitavad 'id' lõppevatele veergudele: Tootaja.Tootaja_Mentor, Tuba.FK_Tuba_Voodi_tyyp.
Reegel 20: Puudub ON DELETE CASCADE 1:1 seostel: Kasutajakonto.FK_Kasutajakonto_Isik, Tootaja.FK_Tootaja_Isik.
Reegel 21: ON DELETE CASCADE klassifikaatori tabelile viitavatel välisvõtmetel: Tootaja_seisundi_liik.FK_Tootaja_seisundi_liik_tootaja_seisundi_liik_kood, Toa_seisundi_liik.FK_Toa_seisundi_liik_toa_seisundi_liik_kood, Kliendi_seisundi_liik.FK_Toa_seisundi_liik_toa_seisundi_liik_kood.
Reegel 26: Tabelid Klassifikaator, Isiku_seisundi_liik, Tootaja_roll ei ole seotud teiste tabelitega välisvõtme mõttes.
Reegel 36: Ujukoma tüüp float veerus Tuba.hinna_vahemiku_algus.
Reegel 37: Puudub täpsus ja skaala decimal tüübi definitsioonis veerus Tuba.hinna_vahemiku_lopp.
Loodan, et see raport on abiks! Kui on veel küsimusi, siis küsi julgelt.