Détails supplémentaires sur les contraintes

Dans ce chapitre :

Privilèges de sécurité pour les contraintes

Pour créer une clé primaire ou des contraintes uniques :

  • Lors de la modification d’une table existante pour ajouter la contrainte, le rôle actuel de l’utilisateur doit avoir le privilège OWNERSHIP pour la table.

  • Lors de la création d’une nouvelle table, le rôle actuel de l’utilisateur doit avoir le privilège CREATE TABLE pour le schéma où la table sera créée.

Pour créer des contraintes de clés étrangères :

  • Le rôle actuel de l’utilisateur doit avoir le privilège OWNERSHIP pour la table de clés étrangères.

  • Le rôle actuel de l’utilisateur doit avoir le privilège REFERENCES pour la table de clés uniques/primaires

Le privilège REFERENCES peut être accordé aux rôles et révoqués en utilisant les commandes GRANT <privileges> … TO ROLE et REVOKE <privileges> … FROM ROLE :

GRANT REFERENCES ON TABLE <pk_table_name> TO ROLE <role_name>

REVOKE REFERENCES ON TABLE <pk_table_name> FROM ROLE <role_name>

Commentaires au niveau des contraintes

Comme pour d’autres objets et constructions de bases de données, Snowflake prend en charge l’ajout de commentaires au niveau des contraintes. Les commentaires peuvent être ajoutés aux contraintes de deux façons :

  • La contrainte hors ligne prend en charge la clause COMMENT, dans laquelle un commentaire peut être spécifié lors de la définition de la contrainte.

    Les commentaires ne sont pas autorisés lors de la définition de contraintes en ligne car ils peuvent créer des ambiguïtés.

  • Des commentaires peuvent également être donnés au niveau des contraintes à l’aide de la commande COMMENT :

    COMMENT [IF EXISTS] ON CONSTRAINT <constraint_name> IS '<comment_string>'
    

Prise en charge des contraintes dans les commandes Copy

Snowflake prend en charge la création de copies de tableaux à l’aide de CREATE TABLE :

  • Pour créer une copie vide, utilisez CREATE TABLE … LIKE.

  • Pour créer un clone, utilisez CREATE TABLE … CLONE.

De plus, des copies de tables sont automatiquement créées lorsqu’un schéma ou une base de données est cloné.

Indépendamment de la façon dont une copie est créée pour une table, les contraintes de la table originale sont également copiées. Lors de la copie d’une clé étrangère avec une table de référence (table de clé étrangère) et une table référencée (table de clé primaire), les scénarios suivants peuvent survenir :

  • Si les deux tables sont copiées dans la même commande (par exemple lors du clonage d’un schéma ou d’une base de données), une nouvelle clé étrangère est créée entre la nouvelle table de référence et la table référencée.

  • Si seule la table de référence est copiée, une nouvelle clé étrangère est créée au niveau de la table de référence. Celle-ci pointe vers la table de clé primaire d’origine, comme table de référence.

  • Si seule la table référencée est copiée, aucune nouvelle clé étrangère n’est créée, bien que les clés primaires/uniques soient copiées.

Par conséquent, si un utilisateur copie une table de référence et une table référencée séparément, il doit créer manuellement une nouvelle clé étrangère ou remplacer manuellement la table de clés primaires par la nouvelle clé étrangère.

Prise en charge des contraintes dans GET_DDL

Snowflake prend en charge les contraintes pour GET_DDL. Cependant, notez ce qui suit :

  • Seules les contraintes d’une seule colonne, telles que NOT NULL et DEFAULT, sont reconstruites en ligne avec la définition de la colonne.

  • Les contraintes de table, telles que les clés uniques/principales/étrangères, sont toujours reconstruites en tant que contraintes hors ligne, même si elles sont constituées d’une seule colonne.

  • Pour les contraintes non nommées (c.-à-d. les contraintes avec un nom généré par le système), le nom généré par le système n’est pas renvoyé par GET_DDL.