Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-12-2008 18:26:34

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

[Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

Salut,

Je lance un sujet qui n'a rien à voir avec Zend.

Il y a un sujet très récurrent concernant les bonnes méthodes pour identifier de façon unique une entité dans une base de données.

Je souhaiterais avoir vos avis sur la question.

Pour re-situer la problématique :

Quand on crée une application qui se repose sur une base de données dont l'unicité des enregistrements est gérée par des auto-incréments et que cette même BDD peut être alimentée par divers clients, on se pose souvent la question suivante :

"Puis-je utiliser l'auto-incrément et le communiquer à mes applications clientes lors de la création d'une entité pour identifier cette même entité lors des opérations futurs (entre autres lors d'un update)"

Les auto-incréments ne sont pas gérés par tous les moteurs, il faut donc s'assurer la pérennité du système dans le cas d'un changement de moteur de bases de données.

Jusqu'à aujourd'hui, selon le contexte, j'utilise un autre champs, qui n'est pas un auto-incrément mais dont je m'assure l'unicité. La valeur de ce champ est générée automatiquement (en fonction d'une logique déterminéé au préalable) lors de la création de l'enregistrement et est renvoyée au client qui la conserve pour des opérations futurs.

Lors d'une mise à jour des données sur une entité, le client envoie cette "clé" à l'application pour identifier cette dernière.

Sauf que, lorsque je conçois un nouveau projet, je me pose systématiquement la même question : "Pourquoi ne pas utiliser l'auto-incrément", car si mon moteur change, je sais que je vais maitriser la migration des données, et je m'arranger pour conserver cette valeur et la porter sur le nouveau système.

Et chaque fois, je rejette la possibilité parce que "quelquechose me dérange dans l'idée" smile


Qu'en pensez-vous ? Comment avez-vous l'habitude de procéder ?


Merci,


A+ benjamin.

Dernière modification par Delprog (21-06-2009 11:19:01)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#2 23-12-2008 18:33:23

vg33
Membre
Date d'inscription: 30-07-2008
Messages: 46

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

Personnellement, j'utilise l'autoincrement.
De toute façon, si tu portes ton application sur une bdd ne supportant pas l'autoincrement, tu peux modifier tes modèles pour insérer un id généré par l'application.

Hors ligne

 

#3 23-12-2008 21:17:02

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

même avis que vg33.


Société : Direct Info Service

Hors ligne

 

#4 24-12-2008 09:20:57

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

J'utilise aussi l'autoincrément.

Avec Zend_Db, tu simuler un autoincrément même quand ta base n'en a pas (oracle). Donc ton code ne change pas sauf le nom de la séquence à donner au moment de ton insert (ou dans ton Zend_Db_Table selon le cas).
Pour Postgres, tu peux simuler un autoincrément directement dans la base en mettant dans ta clé primaire une requête sur la séquence, ou bien utiliser la même méthode que pour Oracle.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 24-12-2008 09:41:34

ledahu
Membre
Date d'inscription: 13-03-2008
Messages: 69

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

Moi je suis un peu comme toi, plus je peux me passer de l'auto-incrément plus je le fais.
La plupart du temps, on peut s'en passer sans problème avec des clés uniques construites suivant une nomenclature bien précise. Depuis plus de 10 ans que je fais comme ca, je n'ai pas encore rencontré de problème.
De temps en temps pour me simplifier la vie sur des tables simples, j'utilise l'auto-incrément mais comme ca ne fait pas très longtemps que c'est intégré à db2 et encore moins sur db2-400, je n'y pense pas forcément.

Hors ligne

 

#6 24-12-2008 14:46:36

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

l'auto incrément est une facilité qui n'est pas toujours très efficace.

par exemple il est préférable d'avoir d'abord la valeur de l'id pour insérer un objet dans une table et et tous les objets dépendants dans une transaction.
avec une séquence comme le supporte PostgrSQL ou Oracle et bien d'autre
il suffit de demander à la base la prochaine valeur de l'incrément pour pouvoir préparer sa transaction et l'exécuter.

avec un auto incrément il faut d'abord insérer l'élément pour pouvoir préparer la transaction
du coup on fait plusieurs appels à la base là ou seul l'exécution de la transaction aurait suffit.

dans une application ou l'on m'a imposé MySQL donc pas de séquences et pour laquelle j'avais des transactions complexe à faire j'ai usé d'une astuce qui c'est avérée intéressante.
J'ai utilise Des UUID numériques (Unique Universal ID) j'ai donc généré un UUID à la place de prendre une valeur de séquence et j'ai utilise cet ID commet clef dans mes transactions.
cela permet de reproduire le fonctionnement des séquences sans en avoir.

à noter que certaine base comme PostgreSQL permettent de combiner l'approche séquence et autoincrément

Code:

CREATE SEQUENCE user_id_seq ...;
CREATE TABLE user (
   user_id INTEGER DEFAULT user_id_seq::NEXTVAL,

il est donc possible d'utiliser la séquence de façon traditionnelle mais aussi de s'en servir comme un autoincrement
lorsqu'on insère une ligne dans la table sans valeur user_id la valeur insérée est la suivant dans l'a séquence.

le principal avantage est de pouvoir en disposer avant si nécessaire ce que ne permets pas l'autoincrement.

A+JYT

Hors ligne

 

#7 30-12-2008 12:32:47

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

Salut,

Merci pour vos avis.

J'ai quand même tendance à penser comme sekaijin et, comme je disais, c'est ce que je faisais jusqu'à maintenant. Un champ unique indépendant de la clé primaire que je peux transporter de SGBD en SGBD.

Et effectivement ça permet de générer la clé par le code avant la transaction pour un insert. Ca évite aussi les mic-mac sur les lastInsertId().

Dans tous les cas, c'est beaucoup plus rassurant de maitriser la clé unique je trouve.

Je posais la question par pur problème de conscience et pour me débrider le cerveau sur la question.

Je pense, sauf si quelqu'un me sort un argument béton, que je vais continuer comme je faisais.


Merci,

A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#8 30-12-2008 16:36:19

Nikkau
Membre
Date d'inscription: 25-03-2008
Messages: 52

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

Je suppose que la bonne réponse est la même que d'habitude dans ce style de débat qui a pour but de trancher sur la meilleure méthode: ça dépend.

Je pense que y a aucune recette universelle en dev', ça dépend de ce qu'on fait.

Pour ma part, sauf dans les cas où c'est gênant comme on a eu un exemple plus haut, je vois pas de bonne raison pour s'en passer, c'est se compliquer la vie pour rien.

Hors ligne

 

#9 05-06-2009 11:46:26

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

Bonjour,

Je fais remonter ce message.

@sekaijin:

Tu dis utiliser des uuid numérique ? tu peux m'en dire plus ? Tu utilises une fonction particulière ou tu les génères toi-même (timestamp ?) ?

Mes uuid sont en hexa, et ça m'arrangerai de générer des numériques pour des raisons de performances.


Merci.

A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#10 21-06-2009 11:18:39

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

Pour cloturer tout ça.

Je suis passé à Postgresql, et c'est le pied smile

Les séquences sont très pratiques, plus toute la puissance global du SGBDR.


A+ benjamin


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#11 21-06-2009 14:04:50

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

oui postgreSQL clos le pb

sinon http://fr2.php.net/manual/fr/function.uniqid.php

Hors ligne

 

#12 22-06-2009 09:16:49

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

C'est dommage que postgre ne soit connu que de nom, et nom pas connu "d'utilisation". Car, c'est un excellent SGBDR.


----
Gruiiik !

Hors ligne

 

#13 22-06-2009 09:49:09

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu]BDD - Identifiant unique et Auto-incrément - vos méthodes

Open source qui plus est smile


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages