Palun pane ennast andmebaasi disaineri rolli. 

Reegel 1: Üheski lauses ei ole katkist PRIMARY KEY, UNIQUE, FOREIGN KEY ja CHECK kitsendust (nt FOREIGN KEY() REFERENCES ...).

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

Reegel 3: Üheski tabelis ei ole mitut sama nimega veergu.
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).
Reegel 5: Klassifikaatorite tabelites sisaldub primaarvõtme veergude nimedes sõna kood või code, mitte id.
Reegel 6: Kõigile PRIMARY KEY, UNIQUE, FOREIGNE KEY ja CHECK kitsendustele antakse lausetes ise nimi. Teiste sõnadega on kitsenduse deklaratsiooni osa CONSTRAINT <kitsenduse nimi>
Reegel 7: Kõigis kasutaja antud kitsenduste nimedes sisaldub tabeli nimi.
Reegel 8: 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.
Reegel 9: 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).
Reegel 10: Sama tüüpi kitsendustele on antud nimed järjekindlalt (nt kõikidel primaarvõtme kitsendustel on nimi kujul pk_<tabeli_nimi>).
Reegel 11: Nimedes ei kasutata camalCase ja PascalCase, vaid snake_case nimetamise stiili.

Reegel 12: Igas tabelis on defineeritud primaarvõtme kitsendus.
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).
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).
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).
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).
Reegel 17: Tabelites ei deklareerita UNIQUE kitsendust täpselt samale veergude hulgale, millele on defineeritud PRIMARY KEY kitsendus. 

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.
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.
Reegel 20: Kui välisvõti realiseerib 1:1 seose, siis on sellel välisvõtmel kompenseeriv tegevus ON DELETE CASCADE.
Reegel 21: Kui välisvõti viitab klassifikaatori tabelile, siis ei ole sellel välisvõtmel kompenseerivat tegevust ON DELETE CASCADE.
Reegel 22: Kui välisvõtme veerg on kohustuslik (NOT NULL), siis on sellel välisvõtmel ei ole kompenseerivat tegevust SET NULL.
Reegel 23: Kui välisvõtme veerul puudub vaikimisi väärtus, siis on sellel välisvõtmel ei ole kompenseerivat tegevust SET DEFAULT.
Reegel 24: Välisvõtmete deklaratsioonides ei kasutata segamini NO ACTION ja RESTRICT.
Reegel 25: Tabelid luuakse järjekorras, et välisvõtmete deklareerimine ei tekita vigu.
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.

Reegel 27: Veerud eesnime ja perenime hoidmiseks on mittekohustuslikud (lubavad NULLe).
Reegel 28: Kõik veerud, kus on registreerimise aeg või viimase muutmise aeg, on kohustuslikud (NOT NULL) veerud.
Reegel 29: Kõik veerud, kus on registreerija identifikaator või viimase muutja identifikaator, on kohustuslikud (NOT NULL) veerud.
Reegel 30: Kõigil veergudel, millel on vaikimisi väärtus, on NOT NULL kitsendus.

Reegel 31: Kõigil välisvõtmete veergudel, mille nimes osa on seisundi_liik_kood või state_type_code, on vaikimisi väärtus.
Reegel 32: Kõigil veergudel, kus on registreerimise aeg või viimase muutmise aeg, on vaikimisi väärtus.

Reegel 33: Veerud, kus on kirjeldused, kommentaarid, selgitused jms lubavad vähemalt 255 tähemärki.
Reegel 34: Veerud, kus on eesnimed ja perenimed, ei luba väljapikkust üle 50 tähemärgi.
Reegel 35: Veerud, kus on meiliaadress on väljapikkusega 254 tähemärki.
Reegel 36: Ühegi veeru puhul ei kasutata ujukomatüüpi (float, read, double precision).
Reegel 37: Numeric või Decimal tüüpi veeru korral on veeru tüübi definitsioonis määratud nii täpsus (precision) kui skaala (scale).

Palun kontrolli järgnevaid SQL tabelite loomise lauseid eelnevate reeglite suhtes.
Reegel on täidetud, kui selle kontrolli tulemus on TRUE. Palun raporteeri ainult sellised reeglid, mis pole täidetud koos viitega vea asukohale. Palun raporteeri tulemus reeglite kaupa.