menuHaut

Fonctionnement des clés primaires sous SQL Server dans Coheris CRM

La table CLES_PRIM

Dans le cadre d’une implémentation sur une base SQLServer, Coheris gère les clés primaires (pk) de ses tables de valeurs au travers d’une table dédiée : « CLES_PRIM ».

Cette table comporte 4 colonnes dont seules les colonnes CE_Table et CE_DERN sont utilisées dans ce qui nous intéresse:
 CREATE TABLE [CLES_PRIM](
   [CE_TABLE] [nvarchar](20) COLLATE French_CI_AS NOT NULL DEFAULT (''),
   [CE_DERN] [bigint] NOT NULL DEFAULT ((0)),
   [CE_LIMIT1] [bigint] NULL,
   [CE_LIMIT2] [bigint] NULL
) ON [PRIMARY]

La colonne CE_TABLE contient le nom de la table Coheris et la colonne CE_DERN contient la dernière valeur demandée de la pk sur cette table.
Par exemple pour la table des personnes la ligne présente serait la suivante : « CLIENTS | 16340 | NULL | NULL ».

Note : le nom de la pk de chaque table de Coheris n’est pas contenue dans la table CLES_PRIM, seule sa valeur l’est.

Récupérer une nouvelle clé (pk)

Lors d’un insert dans une table, Coheris fait appel à la fonction spécifique getKey présente en standard dans son modèle de données. Cette fonction récupère la dernière valeur de la pk de la table passée en paramètre et l’incrémente du pas (en général +1) également  passé en paramètre. La fonction getKey met à jour la nouvelle valeur dans CLES_PRIM et retourne la valeur incrémentée.

Le code de cette fonction est indiqué ici pour mémoire :
 CREATE PROCEDURE [GetKey] @Table varchar(100), @Step int AS
   declare @Key int
   SET NOCOUNT ON
   UPDATE CLES_PRIM SET CE_DERN = CE_DERN + @Step, @Key = CE_DERN + @Step WHERE CE_TABLE = @Table
   SELECT @Key AS CE_DERN

Dans le cadre d’une mise à jour externe d’une table de Coheris CRM, il est impératif de faire appel à cette fonction afin de respecter le standard produit et éviter tout conflit avec le CRM.

Si l’appel à getKey est impossible alors il faut updater manuellement la table CLES_PRIM avec la nouvelle valeur (avec un pas indifférent) puis faire l’insert dans la table correspondante :

  • Dans le cas où Coheris CRM reste démarré pendant cette manipulation, il est préférable de mettre à jour la table « CLES_PRIM » avant chaque nouvel insert.
  • Si Coheris CRM n’accède pas à la base (applicatif éteint) pendant la manipulation, alors il est possible de ne faire l’update qu’en fin de traitement dès lors qu’aucun autre traitement parallèle ne vient lire la table « CLES_PRIM ».

Dans le cas d’oracle, les pk sont directement gérées via un classique nextval().

, , ,

No comments yet.

Laisser un commentaire

Powered by WordPress. Designed by Woo Themes