par Kent Milligan - Mis en ligne le 26/11/2003
Utilisez les colonnes d'identité SQL pour alléger votre fardeau
Les colonnes d'identité de DB2 UDB
sont l'une des nombreuses améliorations
de SQL V5R2, qui permettent de
porter plus facilement des bases de
données sur l'iSeries, à partir d'autres
plates-formes...
Les colonnes d'identité de DB2 UDB
sont l'une des nombreuses améliorations
de SQL V5R2, qui permettent de
porter plus facilement des bases de
données sur l'iSeries, à partir d'autres
plates-formes. Beaucoup de tables
d'une base de données ont une caractéristique
commune : elles contiennent
des identificateurs uniques, généralement
utilisés comme index vis-à -vis des
données qu'ils identifient. Par exemple,
un champ numéro de client identifie
de façon unique un client et lui relie
l'information dans la base de données
le concernant.
Certaines applications demandent
aux utilisateurs d'attribuer ces identificateurs
; d'autres les génèrent ellesmêmes.
Bien entendu, les développeurs
doivent écrire et maintenir ce
code. Pour de telles applications, les
colonnes d'identité simplifient la tâche.
Voyons comment elles fonctionnent.
Pour les développeurs, les colonnes
d’identité sont un moyen de générer
automatiquement et facilement une valeur
numérique unique pour chaque
ligne d’une table. Au fur et à mesure
que de nouvelles lignes s’ajoutent à
une table, DB2 UDB for iSeries se
charge de fournir la valeur de la colonne
d’identité suivante, au lieu de
passer par le code d’application pour
cela.
L’exemple de table employée cidessous
montre les colonnes d’identité
en action :
CREATE TABLE employee (
empid INTEGER GENERATED ALWAYS AS
IDENTITY,
name CHAR(3à˜), dep# CHAR(4))
La colonne ID employé (empid)
a été créée comme une colonne
d’identité et donc, quand de nouveaux employés sont ajoutés, DB2 UDB génère
la valeur empid. Le premier employé
recevra une valeur empid de 1,
l’employé suivant recevra 2, et ainsi de
suite. Les colonnes d’identité sont intéressantes
pour des colonnes comme
ID employé où il faut simplement de la
logique pour attribuer la valeur suivante,
et où la valeur elle-même n’a pas
de signification. Les clés secondaires
en data warehousing sont un autre créneau
où les colonnes d’identité ont
leur place.
Une fois que l’on sait ce qu’une colonne
d’identité peut faire, la question
logique suivante est : « Est-elle
meilleure que le code d’application ? ».
Les colonnes d’identité de DB2 UDB
évitent les problèmes de simultanéité
et de performance possibles quand
une application génère son propre
compteur unique à l’extérieur de la
base de données. Une logique d’application
courante consiste à stocker un
compteur dans un objet qui peut être
partagé, comme une table, zone de
données, ou file d’attente de données.
Chaque transaction verrouille ensuite
cet objet compteur, incrémente le
nombre, puis déverrouille l’objet
compteur.
Malheureusement, ce modèle oblige
aussi les autres jobs ou transactions
à attendre jusqu’à ce que l’objet compteur
ait été incrémenté et déverrouillé,
avant de pouvoir obtenir une valeur
clé. Bien que DB2 UDB doive aussi utiliser
un genre de verrouillage interne
pour maintenir la colonne d’identité,
le verrouillage effectué par DB2 UDB
demande moins de ressources système.
La génération plus rapide de valeurs
clé par les colonnes d’identité de
DB2 UDB signifie que les applications
peuvent atteindre de plus hauts niveaux
de débit et d’évolutivité.
Les colonnes d’identité dispensent
aussi le développeur d’application de
devoir se rappeler d’écrire du code ou
d’appeler une routine qui génère
l’identificateur unique pour une table.
L’intégrité de l’application et de la base de données est améliorée par la génération
automatique d’identificateurs
uniques par la colonne d’identité.
Téléchargez cette ressource
Guide inmac wstore pour l’équipement IT de l’entreprise
Découvrez les dernières tendances et solutions IT autour des univers de Poste de travail, Affichage et Collaboration, Impression et Infrastructure, et notre dossier Green IT sur les actions engagés par inmac wstore pour réduire son impact environnemental