Bonjour,
Je ne suis pas DBA ni développeur, mais un fonctionnel techniquement réceptif ...
Je démarre une mission chez un client qui utilise DB2 AS400 en version 7.1
La situation de la base est désastreuse.
Il n'y a aucune clé primaire, et aucune clé étrangère.
Il y a par contre un certain nombre d'index unique qui assurent un minimum d'intégrité, j'ai bien dit un minimum.
Sur une table, mais il y en a surement d'autres dans le modèle, je trouve une définition d'index qui ne colle pas avec le contenu.
Je ne connais pas les spécificités ou différences de DB2/iSerie par rapport à Oracle que je connais mieux, et j'aimerai avoir un éclairage.
Dans cette table, les index sont les suivants :
CREATE UNIQUE INDEX INDEXL1 ON SCHEMA.TABLE (CODE1,CODE2) ;
CREATE INDEX INDEXL2 ON SCHEMA.TABLE (CODE2,CODE1) ;
CREATE INDEX INDEXL3 ON SCHEMA.TABLE (CODE3,CODE1) ;
CREATE UNIQUE INDEX INDEXL4 ON SCHEMA.TABLE (CODE1) ;
Le contenu de la table est :
CODE1 CODE2 CODE3
ABCD 1234
ABCD 2345
ABCD 3456 abcd
DEFG 3456
DEFG 7890 bcde
etc...
L'assemblage de CODE1 et CODE2,qui sont toujours servis, forme effectivement un identifiant unique qui devrait être la clé primaire.
L'index INDEXL1 est cohérent avec le contenu, et un tentative d'écriture d'une nouvelle ligne avec un couple déjà présent sort bien en erreur "Duplicate Key".
Les index INDEXL2 et INDEXL3 ne me posent pas de problème de compréhension, pour la pertinence je verrais plus tard
L'index INDEXL4 me pose un problème car tel qu'il est dans le DDL généré, il n'est pas applicable.
Dans mes souvenirs, un index UNIQUE crée une contrainte d'unicité.
Toujours dans mes souvenirs, une contrainte peut s'activer ou se désactiver, pour optimiser un batch par exemple, et donc rester inactivée volontairement ou non.
Question 1 : mon analyse est-elle valable sur ce SGBDR ?
Question 2 : si Oui, comment peut-on visualiser l'état des contraintes avec iNavigator ou DBeaver
Question 3 : et si Non, ou est mon erreur
Merci
Partager