Question

Nous utilisions auparavant ' GÉNÉRÉ TOUJOURS ' pour générer les valeurs d'une clé primaire. Mais maintenant, il est suggéré que, au lieu d'utiliser 'GENERATED ALWAYS', utilisez séquence pour renseigner la valeur de la clé primaire. Selon vous, quelle peut être la raison de ce changement? Est-ce juste une question de choix?

Code antérieur:

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER         NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE),
.
.
);

Maintenant c'est

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER ),
.
.
);

maintenant lors de l'insertion, générez la valeur pour TAB_P via une séquence.

Était-ce utile?

La solution

J'ai tendance à utiliser davantage les colonnes d'identité que les séquences, mais je vais comparer les deux pour vous.

Les séquences peuvent générer des nombres pour n’importe quel but, alors qu’une colonne d’identité est strictement attachée à une colonne dans une table.

Puisqu'une séquence est un objet indépendant, elle peut générer des nombres pour plusieurs tables (ou toute autre chose) et n'est pas affectée lors de la suppression d'une table. Lorsqu'une table avec une colonne d'identité est supprimée, il n'y a aucune mémoire de la dernière valeur attribuée par cette colonne d'identité.

Une table ne peut contenir qu'une seule colonne d'identité. Par conséquent, si vous souhaitez enregistrer plusieurs numéros séquentiels dans différentes colonnes de la même table, les objets séquence peuvent le gérer.

L'exigence la plus courante pour un générateur de nombres séquentiels dans une base de données consiste à affecter une clé technique à une ligne, qui est bien gérée par une colonne d'identité. Pour les besoins plus complexes en matière de génération de nombres, un objet séquence offre plus de flexibilité.

Autres conseils

C’est probablement pour gérer les identifiants au cas où il y aurait beaucoup de suppressions sur la table.

Par exemple: en cas d’identité, si vos identifiants sont 1 2 3

Maintenant, si vous supprimez l'enregistrement 3, votre table aura 1 2

Et si vous insérez un nouvel enregistrement, les identifiants seront 1 2 4

À l'inverse, si vous n'utilisez pas de colonne d'identité et générez l'identifiant à l'aide de code, vous pouvez calculer l'identifiant de la manière suivante: max (id) + 1, afin que les identifiants soient en ordre. 1 2 3

Je ne vois pas d'autre raison pour laquelle une colonne d'identité ne devrait pas être utilisée.

Voici quelque chose que j'ai trouvé sur le site publib:

Comparaison des colonnes et des séquences IDENTITY

Bien qu'il existe des similitudes entre les colonnes et les séquences IDENTITY, il existe également des différences. Les caractéristiques de chacun peuvent être utilisées lors de la conception de votre base de données et de vos applications.

Une colonne d'identité présente les caractéristiques suivantes:

  • Une colonne d'identité peut être définie comme partie d'une table seulement quand la table est créé. Une fois la table créée, vous ne pouvez pas le modifier pour ajouter un colonne d'identité. (Cependant, existant les caractéristiques de la colonne d'identité pourraient être modifié.)
  • Une colonne d'identité génère automatiquement des valeurs pour un table unique.
  • Quand une identité la colonne est définie comme générée TOUJOURS, les valeurs utilisées sont toujours généré par le gestionnaire de base de données. Les applications ne sont pas autorisées à fournir leurs propres valeurs au cours de la modification du contenu de la table.

Un objet séquence présente les caractéristiques suivantes:

  • Un objet séquence est une base de données objet qui n'est lié à personne table.
  • Un objet séquence génère valeurs séquentielles qui peuvent être utilisées dans toute instruction SQL ou XQuery.
  • Puisqu'un objet séquence peut être utilisé par toute application, il y a deux expressions utilisées pour contrôler la récupération de la valeur suivante dans le séquence spécifiée et la valeur généré avant la déclaration en cours d'exécution. La valeur précédente expression retourne le plus récemment valeur générée pour le spécifié séquence pour une déclaration précédente dans la session en cours. Le suivant L'expression VALUE renvoie le suivant valeur pour la séquence spécifiée. le L’utilisation de ces expressions permet au même valeur à utiliser sur plusieurs Instructions SQL et XQuery dans plusieurs tables.

Bien qu'il ne s'agisse pas de toutes les caractéristiques de ces deux éléments, ces caractéristiques vous aideront à déterminer laquelle utiliser, en fonction de la conception de votre base de données et des applications utilisant cette base de données.

Je ne sais pas pourquoi quelqu'un utiliserait JAMAIS une colonne d'identité plutôt qu'une séquence. Les séquences accomplissent la même chose et sont beaucoup plus simples. Les colonnes d'identité sont bien plus pénibles, en particulier lorsque vous souhaitez effectuer des déchargements et des chargements de données dans d'autres environnements. Je ne vais pas entrer dans toutes les différences car ces informations se trouvent dans les manuels, mais je peux vous dire que les administrateurs de bases de données doivent presque toujours intervenir à chaque fois qu'un utilisateur souhaite migrer des données d'un environnement à un autre lorsqu'une table avec une identité est impliqué car cela peut être déroutant pour les utilisateurs. Nous n'avons pas de problèmes quand une séquence est utilisée. Nous autorisons les utilisateurs à mettre à jour tous les objets de schéma afin de pouvoir modifier leurs séquences s'ils le souhaitent.

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