Miks peaks tabeliga seotud kitsenduse või indeksi nimi sisaldama tabeli nime?

Postitas Erki Eessaar
Hea praktika on sellistes nimedes tabeli nime kasutada. Üldine põhimõte on, et tabeli nimi aitab tagada kitsenduse/indeksi nime unikaalsust skeemi piires. Miks on nime unikaalsus skeemi piires vajalik?

Miks kasutada indeksi nimes tabeli nime?

  1. See vähendab nimekonfliktide tekkimise võimalust. Indeksi nimi peab olema nii PostgreSQLis kui Oracles skeemi piires unikaalne. Erinevates samas skeemis olevastes tabelites võib olla sama nimega veerge. Kui annate selliste veergude korral indeksitele või kitsendustele, millega koos luuakse automaatselt indeks (PRIMARY KEY, UNIQUE, PostgreSQLis ka EXCLUDE) nime, mis sisaldab ainult tabeli veeru nime, siis kutsute sellise nimekonflikti ise esile. Nimekonflikti esilekutsunud lause (CREATE INDEX, CREATE TABLE, ALTER TABLE) jääb täitmata.
  2. Kui indeksi nimes ei ole tabeli nime, siis halvendab see SQL andmekäitluskeele lausete täitmisplaanide loetavust.

Miks kasutada kitsenduse nimes tabeli nime?

  1. Oracles peavad kitsenduste nimed olema skeemi piires unikaalsed. Arvestades võimalusega, et erinevates sama skeemi tabelites võib olla sama nimega veerge, eeldab nimetamisskeem, mis tagab sisukad unikaalsed ja ühetaolised nimed, tabeli nime kasutamist kitsenduse nime osana.
  2. PostgreSQL on kitsenduste nimetamisel liberaalsem.
    • PRIMARY KEY, UNIQUE ja EXCLUDE kitsenduste nimed peavad olema unikaalsed skeemi piires. Nende kitsenduste toetuseks luuakse indeks ja indeksi nimi peab olema skeemi piires unikaalne.
    • Erinevates tabelites võib olla sama nimega CHECK ja FOREIGN KEY kitsendusi.
    • Ühes ja samas tabelis ei tohi olla sama nimega CHECK ja FOREIGN KEY kitsendust.
  3. PostgreSQLis peaks PRIMARY KEY, UNIQUE ja EXCLUDE kitsenduste nimedes kasutama tabeli nime tulenevalt indeksitega seoses mainitud punktist 1.
  4. PostgreSQLis peaks FOREIGN KEY (ning tulevikku silmas pidades ka CHECK kitsenduste) nimed olema unikaalsed, et oleks mugavam kasutada seda lauset: https://www.postgresql.org/docs/current/sql-set-constraints.html " Because PostgreSQL does not require constraint names to be unique within a schema (but only per-table), it is possible that there is more than one match for a specified constraint name. In this case SET CONSTRAINTS will act on all matches."
  5. Unikaalsed kitsenduste nimed aitavad paremini aru saada veateadetest.
  6. Unikaalsete kitsenduste nimede alusel on parem skriptifailist või päringuga andmebaasi süsteemikataloogist huvipakkuva kitsenduse kirjeldus üles leida.

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!