Domanda

Gli indici e i vincoli in MS SQL Server sono locali alla tabella in cui sono definiti. Quindi è possibile creare lo stesso indice o nome del vincolo in più di una tabella senza problemi.

I vincoli di chiave esterna (che come tutti dovrebbero sapere NON sono chiavi, ma vincoli) appariranno nella sottocartella Chiavi e i loro nomi appariranno con ambito globale.

Qualcuno sa perché " chiavi " hanno nomi con ambito globale? Capisco le differenze tra chiavi e indici. Non capisco perché ci dovrebbe essere una tale differenza nella definizione del nome. In tutti i casi sono "locali" alla tabella per cui sono definiti.

TIA

È stato utile?

Soluzione

Secondo " SQL-99 completo, davvero " di Peter Gulutzan e Trudy Pelzer, i nomi dei vincoli sono qualificati dallo schema in cui vivono e la tabella interessata dal vincolo deve risiedere nello stesso schema. Ma il nome del vincolo non è qualificato da quel nome di tabella. Il nome del vincolo deve essere univoco all'interno dello schema in cui risiede.

  • SÌ: myschema.some_primary_key
  • NO: myschema.mytable.some_primary_key

Come per " perché " questo è il caso, presumo sia correlato a un tipo di vincolo in SQL-99 chiamato ASSERTION . Un'asserzione non appartiene a " una singola tabella, come è vero per la chiave primaria, la chiave esterna e i vincoli di controllo. Un'asserzione dichiara una condizione che deve essere vera affinché qualsiasi INSERT / UPDATE / DELETE abbia esito positivo e l'asserzione può fare riferimento a più tabelle. Non avrebbe senso qualificare questi nomi di vincoli da qualsiasi tabella.

Non so quanti marchi RDBMS implementano asserzioni SQL (in realtà non ne conosco una sola), ma potrebbero anche essere conformi alle regole SQL standard per i nomi dei vincoli, quindi in futuro potranno scegliere di implementare la funzione di asserzione secondo lo standard.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top