OVH Cloud OVH Cloud

Les GUIDs... bien ou pas?

5 réponses
Avatar
AW
Bonjour,

Après avoir parcouru des dizaines de pages sur les GUIDs, je ne suis
toujours pas fixé.

Mon but est d'avoir un comportement similaire entre SQL Server et Oracle
lors de l'insertion de lignes, et le problème se pose pour récupérer la clé
primaire d'une ligne insérée. Je peux utiliser une IDENTITY de SQL Server
pour autogénérer la clé, puis faire un SELECT @@IDENTITY, mais Oracle ne
connaît pas. Du coup pour Oracle je dois utiliser un trigger puis un SELECT
MAX. Ce n'est pas du tout la même manière de faire.

L'idée est donc de générer moi-même (en .net c'est facile) un GUID avec le
programme, qui sera utilisé comme clé primaire de la ligne insérée. En
théorie ça marche, mais apparemment ça risque de poser des problèmes de
performance.

Quelqu'un a-t-il un retour d'expérience? Je compte ainsi transformer les
clés primaires de TOUTES mes tables en GUIDs. Il s'agit d'une appli
professionnelle, donc avec beaucoup de tables et d'entrées.

Merci pour vos avis.
--
To reply, remove a "l" before the @ sign.

Arnaud Weil - MCT, MCSD.Net, MCAD.Net

5 réponses

Avatar
bruno reiter [MVP]
Pour avoir un comportement similaire, je pense qu'il vaut mieux utiliser un
trigger avec un champ de type int.
par trigger tu modifies pour prendre la 1ere valeur dispo.

br

"AW" wrote in message
news:
Bonjour,

Après avoir parcouru des dizaines de pages sur les GUIDs, je ne suis
toujours pas fixé.

Mon but est d'avoir un comportement similaire entre SQL Server et Oracle
lors de l'insertion de lignes, et le problème se pose pour récupérer la clé
primaire d'une ligne insérée. Je peux utiliser une IDENTITY de SQL Server
pour autogénérer la clé, puis faire un SELECT @@IDENTITY, mais Oracle ne
connaît pas. Du coup pour Oracle je dois utiliser un trigger puis un SELECT
MAX. Ce n'est pas du tout la même manière de faire.

L'idée est donc de générer moi-même (en .net c'est facile) un GUID avec le
programme, qui sera utilisé comme clé primaire de la ligne insérée. En
théorie ça marche, mais apparemment ça risque de poser des problèmes de
performance.

Quelqu'un a-t-il un retour d'expérience? Je compte ainsi transformer les
clés primaires de TOUTES mes tables en GUIDs. Il s'agit d'une appli
professionnelle, donc avec beaucoup de tables et d'entrées.

Merci pour vos avis.
--
To reply, remove a "l" before the @ sign.

Arnaud Weil - MCT, MCSD.Net, MCAD.Net




Avatar
Fred BROUARD
Dans ce cas, ni l'un ni l'autre, opte pour une table de clef comme
indiqué dans cet article :
http://sqlpro.developpez.com/ClefsAuto/SQL_ClefsAuto.html

A +

AW a écrit:
Bonjour,

Après avoir parcouru des dizaines de pages sur les GUIDs, je ne suis
toujours pas fixé.

Mon but est d'avoir un comportement similaire entre SQL Server et Oracle
lors de l'insertion de lignes, et le problème se pose pour récupérer la clé
primaire d'une ligne insérée. Je peux utiliser une IDENTITY de SQL Server
pour autogénérer la clé, puis faire un SELECT @@IDENTITY, mais Oracle ne
connaît pas. Du coup pour Oracle je dois utiliser un trigger puis un SELECT
MAX. Ce n'est pas du tout la même manière de faire.

L'idée est donc de générer moi-même (en .net c'est facile) un GUID avec le
programme, qui sera utilisé comme clé primaire de la ligne insérée. En
théorie ça marche, mais apparemment ça risque de poser des problèmes de
performance.

Quelqu'un a-t-il un retour d'expérience? Je compte ainsi transformer les
clés primaires de TOUTES mes tables en GUIDs. Il s'agit d'une appli
professionnelle, donc avec beaucoup de tables et d'entrées.

Merci pour vos avis.



--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
AW
Hi all,

Sorry for my previous post in French, I mistakenly posted it here without
translation.

So, the problem: after reading tens of pages about GUIDs, I still don't know
what to do.

I would like to get the same behaviour with SQL Server and Oracle when
inserting lines. The problem comes when I try to get the primary ID value of
a newly inserted line. I can use the IDENTITY type of SQL Server to
automatically generate the key, and then get it through a SELECT @@IDENTITY,
but Oracle doesn't handle this. So with Oracle I have to use a trigger and
the SELECT MAX, but then it's not the same way to do.

So the idea is to generate a GUID myself (easy using the .net framework),
that way I will know the ID of the inserted line. Theorically this seems
good, but there may be concerns with performance.

Does anybody know how GUIDs perform in real life with SQL Server? I intend
to use them for the primary keys of each table in my database. This is for a
professionnal application, with many tables and rows.

Thanks for any help.
--
To reply, remove a "l" before the @ sign.

Arnaud Weil - MCT, MCSD.Net, MCAD.Net
Avatar
Miha Markic
Hi AW,

I would prefer numeric PKs.
The main reason would be that they are way easier to read for humans and
programers :)
They are also faster to retrieve from db and other operations (int is 4
bytes while guid is 16 bytes).

--
Miha Markic - RightHand .NET consulting & software development
miha at rthand com

"AW" wrote in message
news:
Hi all,




Does anybody know how GUIDs perform in real life with SQL Server? I intend
to use them for the primary keys of each table in my database. This is for


a
professionnal application, with many tables and rows.


Avatar
AW
Thaks all for your answers.

Merci à tous pour vos réponses.