Andmebaasid I (ITI0206) (kevad 2025)

Küsimus

Anonüümne (01.02.2025 14:55)
Kuidas jõustada MS Accessi ja PostgreSQL andmebaasis piirangut, et väärtus ei tohi olla tühi string, tühikutest koosnev string, tühimärkidest koosnev string?

Vastus (01.02.2025 15:13): Tühi string, tühikutest koosnev string ja tühimärkidest koosnev string on kõik tekstilised väärtused ning selliseid piiranguid võib olla vaja jõustada tekstiliste veergude põhjal.

Need ei ole sama mis NULL. NULL on spetsiaalne tähis, mis osutab väärtuse puudumisele, samas kui eelnimetatud on väärtused. Tühimärkide hulk (ingl k whitespace character)  hõlmab tühikuid, tabulatsioone, reavahetusi ja muid mitteprinditavaid tühikuid tekstis.

Oletame, et tabelis on veerg nimega nimetus. Mõned märkused:

  • Trim on paljudes andmebaasisüsteemides toetatud funktsioon, mis eemaldab stringi algusest ja lõpust tühikud.
  • Esitatud kitsendused on sellised, kus iga kitsenduse realisatsioon hõlmab endas ka eelmiste kitsenduste jõustamist (seega näiteks kitsenduse "ei tohi olla tühimärkidest koosnev string" realisatsioon välistab ka tühikutest koosnevate stringide ja tühjade stringide registreerimise.

MS Access
  • Ei tohi olla tühi string (kaks võimalikku viisi):
    • Veeru nimetus omadus, mida saab määrata graafilises kasutajaliideses: Allow Zero Length = No
    • CHECK(nimetus<>'')
  • Ei tohi olla tühikutest koosnev string (kaks võimalikku viisi):
    • Veeru nimetus valideerimisreegel, mida saab määrata graafilises kasutajaliideses: Trim([nimetus])<>''
    • CHECK(Trim(nimetus)<>'')
  • Ei tohi olla tühimärkidest koosnev string: Ei saa jõustada

PostgreSQL
  • Ei tohi olla tühi string:
    • CHECK(nimetus<>'')
  • Ei tohi olla tühikutest koosnev string:
    • CHECK(Trim(nimetus)<>'')
  • Ei tohi olla tühimärkidest koosnev string:
    • CHECK(nimetus!~'^[[:space:]]*$')
      • Kasutatakse regulaaravaldist
      • !~ - operaator, mis kontrollib, et string ei vastaks mustrile
      • [[:space:]] - tühimärkide klass
      • ^ - stringi algus
      • $ - stringi lõpp
      • * - esineb null või rohkem korda
      • Alternatiivne kirjapilt: CHECK(nimetus!~'^\s*$')
Hinda vastust:

Keskmine hinne: Pole veel hinnanguid!