Salut à tous,
Je reprends une partie de mon post précédent parce que la question que je voudrais poser ici s'est un peu perdue dans le sujet de l'autre.
Je me demande ce est préférable de faire dans la conception d'une BDD : mettre des clefs primaires séquentielles dans les tables ou créer une table des clefs ?
J'ai lu, relu, re-relu le super article de Frédéric Brouard sur les clefs auto incrémentées et je me pose plein de questions :
1) Dans les SGBD d'aujourd'hui, l'auto-incrémentation de la clef primaire (dans le cas d'une clef séquentielle) se fait au moment de l'insert dans la base de donnée ou dès que l'utilisateur ouvre une nouvelle ligne ?
2) Dans le cas ou la clef est créée au moment de l'insert cela veut dire que 'lintégrité de la base est sauvegardée puisque deux utilisateurs ne peuvent enregistrer exactement au même moment ?
Par ailleurs, lors d'une suppression de ligne d'un enregistrement la clef est définitivement perdue donc il n'y a plus de risque en cas d'archivage et de restauration? non ?
3) Dans le cas de la construction d'une table des clefs tel qu'expliqué dans l'article, je ne comprends pas complètement la construction de la procédure décrite par Sqlpro:
Le nom des tables est récupéré dans INFORMATION_SCHEMA.TABLES stocké dans la variable @Nom_Table puis inséré dans la table LesClefs.
A priori c'est le même principe pour la clef primaire et sa variable @Nom_Champ.
je remets ici la partie du code :Mais dans cette dernière partie de la procédure, comment détermine-t-on quel champ sera stocké dans la variable @Nom_Champ. Y a t-il un moyen grâce à INFORMATION.SCHEMA de déterminer quels champs a une clef primaire surtout dans le cas de Clef sur deux champ ?SET @OK = 0
SELECT @OK = COUNT(*)
FROM SYS_DB_MASTERKEY
WHERE MSK_TABLE_NAME = @NOM_TABLE
-- elle n'existe pas, on l'y insère
IF @OK = 0
BEGIN
SET @STR_QRY = 'INSERT INTO SYS_DB_MASTERKEY ' + 'SELECT ''' + @NOM_TABLE + ''', MAX(' + @NOM_CHAMP +') ' + ' FROM ' + @NOM_TABLE
EXEC(@STR_QRY)
END
Je ne sais pas si mes questions sont intéressantes et surtout si elles ne sont pas complètement idiotes mais j'aimerais quand même savoir?
Si par hasard vous pouviez éclairer ma lanterne...
Merci à tous
et surout toutes mes excuses si, du coup, mon post fait doublon avec le précédent.
Partager