Question

Les index et les contraintes dans MS SQL Server sont locaux dans la table dans laquelle ils ont été définis. Vous pouvez ainsi créer le même nom d’index ou de contrainte dans plusieurs tables sans problème.

Les contraintes de clé étrangère (qui, comme tout le monde le sait, ne sont PAS des clés, mais des contraintes) apparaîtront dans le sous-dossier Clés et leurs noms semblent avoir une portée globale.

Tout le monde sait pourquoi " clés " ont des noms globalement étendus? Je comprends les différences entre les clés et les index. Je ne comprends pas pourquoi il devrait y avoir une telle différence dans la définition du nom. Dans tous les cas, ils sont "locaux". à la table pour laquelle ils sont définis.

TIA

Était-ce utile?

La solution

Selon "SQL-99 Complete, Really". Peter Gulutzan et Trudy Pelzer, les noms de contrainte sont qualifiés par le schéma dans lequel ils résident, et la table affectée par la contrainte doit résider dans le même schéma. Mais le nom de la contrainte n'est pas qualifié par ce nom de table. Le nom de la contrainte doit être unique dans le schéma dans lequel il réside.

  • OUI: myschema.some_primary_key
  • NO: myschema.mytable.some_primary_key

Quant à " pourquoi " c'est le cas, je suppose que cela est lié à une sorte de contrainte dans SQL-99 appelée ASSERTION . Une assertion n'appartient pas à " une seule table, comme c'est le cas pour la clé primaire, la clé étrangère et les contraintes de vérification. Une assertion déclare une condition qui doit être vraie pour que tout INSERT / UPDATE / DELETE réussisse et l'assertion peut référencer plusieurs tables. Cela n'aurait aucun sens de qualifier ces noms de contraintes par une table.

Je ne sais pas combien de marques de SGBDR ont implémenté des assertions SQL (en fait, je n'en connais pas une seule), mais elles pourraient également se conformer aux règles SQL standard pour les noms de contrainte, afin de pouvoir choisir à l'avenir implémenter la fonctionnalité d'assertion selon le standard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top