OVH Cloud OVH Cloud

Question de debutant sur formulaire

40 réponses
Avatar
Marc Mendez
Bonjour,

J'ai un formulaire en HTML , tout simple, qui permet par exemple d'ajouter
un élément dans un base de données.
Je passe par un post qui appelle la même page. Le choix du traitement est
conditionné par un paramètre qui indique ce que je veux faire (add, del,
update).
Tout marche très bien. Sauf que si je fais un refresh dans le navigateur de
la page, suite à une action, il me rebalance le même traitement !
Il faudrait en fait, une fois que mon traitement est effectué, que j'efface
le contenu des paramètres..... commen faire ? ou y-a-t-il un autre moyen ?

J'espère avoir été assez clair....

merci de votre aide.

10 réponses

1 2 3 4
Avatar
Michel Billaud
Larroque writes:

Michel Billaud disait ceci en ce jour du 30.09.2006 22:04:
Autre hypothèse, vous prenez comme "date de transaction" la date
(unique) à la microseconde de la fabrication du formulaire. Et là,
vous êtes en train de réinventer le jeton.



Je ne ré-invente rien du tout, il suffit de lire n'importe quel
ouvrage sur Merise ou sur les SGD relationnels.


Oh, excusez moi, je les ai lu vers 1980, ça remonte un peu.

Quelque chose me dit que vous confondez copieusement les bases de
données relationnelles, et la théorie d' "algèbre relationnelle" qui
en est un modèle théorique. Il y a quelques différences, par exemple
d'une relation est un ensemble (non-ordonné, sans répétition) de
n-uplets, là om une table est une suite (plus ou moins ordonnée, avec
doublons éventuesl) de n-uplets. Mais c'est pas du tout pareil (c'est
comme quand on dégaine les clauses de Horn et la résolution de
Robinson pour parler de programmation Prolog)

Souvent, la théorie relationnelle est exposée dans les bouquins pour
pouvoir montrer que les opérations relationnelles ont la même
puissance d'expression que les opérateurs algébriques (jointure,
projection, sélection, différence...). Chose dont tout le monde, de
nos jours, est convaincu (ou se contrefout, faut bien dire, autant que
du théorême d'Armstrong), mais les bouquins ont tendance à réaccomoder
les mêmes restes sans trop varier la sauce depuis 20 ans.

La date ( à la micro-seconde, seconde, ...., année ) est un objet qui
modélise le monde réel et non un jeton qui est, si j'ai bien compris,
une astuce technique.


Un jeton modélise quelque chose aussi.


J'ajoute que j'ai pris l'exemple de la date, mais ce pourrait être un
numéro de transaction bancaire ( qui n'a rien à voir avec un numéro
d'ordre dans la base de données ) si l'analyse a montré que c'est
comme ça que ça fonctionne dans la réalité.


Vous attribuez des numéros de transaction bancaire avant
que la transaction soit enregistrée de façon automatique,
vous vous en servez donc comme jeton.

De toute façon, vous ne pouvez créer de table qui n'ait pas de clé,


Oh ?

:~$ mysql test
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 9 to server version: 4.0.24_Debian-10sarge2-log

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> create table takacroire (truc integer);
Query OK, 0 rows affected (0.24 sec)

mysql> insert into takacroire values (42),(42),(42);
Query OK, 3 rows affected (0.11 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from takacroire;
+------+
| truc |
+------+
| 42 |
| 42 |
| 42 |
+------+
3 rows in set (0.00 sec)


sinon votre analyse est mauvaise et M. Codd ne sera pas d'accord.


Le regretté Codd a quitté cette vallée de larmes en 2003, et je ne
crois pas que son fantome viendra nous tirer les pieds la nuit, ni moi
pour mes piètres analyses supposées, ni vous pour vos confusions entre
théorie, possibilités pratiques, et recommandations d'usage.

http://fr.wikipedia.org/wiki/Ted_Codd

MB

--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)


Avatar
Michel Billaud
Larroque writes:

Tout d'abord, j'avais déjà envoyé une réponse; ne la voyant pas sur le
forum, je re-réponds. Veuillez m'excuser si les 2 réponses arrivent et
doublonnent.


Ca n'arriverait pas si il y avait un jeton qui interdit de reposter
une réponse à un truc auquel on a déjà répondu.


Dans votre analyse, vous définissez un virement comme ceci:
(emetteur, destinataire, montant)


Jamais dit ça.

ce qui veut dire, dans le meilleur des cas, que vous n'autorisez,
qu'une et une seule transaction d'un montant x entre l'émetteur toto
et le destinataire titi.


Non plus.

Je ne pense pas que c'est ce que vous voulez, amha.


Ca tombe bien.

MB
--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)

Avatar
Larroque
Michel Billaud disait ceci en ce jour du 02.10.2006 20:43:
Je ne ré-invente rien du tout, il suffit de lire n'importe quel
ouvrage sur Merise ou sur les SGD relationnels.


Oh, excusez moi, je les ai lu vers 1980, ça remonte un peu.



Heureux de vous rafraîchir la mémoire :-) .

Quelque chose me dit que vous confondez copieusement les bases de
données relationnelles, et la théorie d' "algèbre relationnelle" qui
en est un modèle théorique. Il y a quelques différences, par exemple
d'une relation est un ensemble (non-ordonné, sans répétition) de
n-uplets, là om une table est une suite (plus ou moins ordonnée, avec
doublons éventuesl) de n-uplets. Mais c'est pas du tout pareil (c'est
comme quand on dégaine les clauses de Horn et la résolution de
Robinson pour parler de programmation Prolog)



Non, je ne confonds pas la théorie de l'algèbre relationnelle et les
SGBD relationnels.

Pour reprendre les dires de M. Gardarin ( oui, c'est vrai, j'aime bien
ses ouvrages), l'algèbre relationnelle est l'outil formel indispensable
pour manipuler les relations.

Les SGBD relationnels sont basés sur le modèle relationnel et permettent
de structurer les données sous forme de tables à 2 dimensions.

En ce qui concerne la relation, je ne suis pas d'accord avec vous: une
relation s'exprime sous forme de table dans un SGBD. Il n'y a pas lieu
d'opposer table et relation.

Exemple de relation dans le modèle relationnel:
r ={ (Dupont,Paris,2140), (Durand,Orsay,1128), ....} (cf Modélisation
dans la conception des systèmes d'information par Acsiome chez Masson )

D'ailleurs, il est dit, par le même auteur ( Gardarin ), que le langage
SQL permet de créer des relations sous forme de table.

Dans ce modèle, la relation se situe au plan conceptuel et la table au
plan applicatif.


Si on prend le modèle entité-relation, la relation relie une ou
plusieurs entités mais les 2 sont représentés sous forme de table dans
le SGBD relationnel.

Définition ( issue de Apprendre et pratiquer Merise chez Masson ): une
relation entre objets ( ou individus ) est une association perçue dans
le réel entre 2 ou plusieurs entités. Une relation est dépourvue
d'existence propre.

La définition de la relation est différente par rapport au modèle
relationnel mais est toujours située au plan conceptuel.

Et au plan applicatif, relation et objets sont représentés tous les 2
par des tables ( SGDB relationnels ).


En UML, je dirais que la relation est l'association entre classes.


Souvent, la théorie relationnelle est exposée dans les bouquins pour
pouvoir montrer que les opérations relationnelles ont la même
puissance d'expression que les opérateurs algébriques (jointure,
projection, sélection, différence...). Chose dont tout le monde, de
nos jours, est convaincu (ou se contrefout, faut bien dire, autant que
du théorême d'Armstrong), mais les bouquins ont tendance à réaccomoder
les mêmes restes sans trop varier la sauce depuis 20 ans.



Là, vous vous situez au niveau du langage de manipulation des données et
non plus au niveau de la modélisation ( ou analyse ).

La date ( à la micro-seconde, seconde, ...., année ) est un objet qui
modélise le monde réel et non un jeton qui est, si j'ai bien compris,
une astuce technique.


Un jeton modélise quelque chose aussi.



Quoi ? ( dans le mode réel, je rappelle ).

Veuillez m'excuser, mais je ne connais pas la définition du jeton ( à
part dans les réseaux Token-ring ...).


J'ajoute que j'ai pris l'exemple de la date, mais ce pourrait être un
numéro de transaction bancaire ( qui n'a rien à voir avec un numéro
d'ordre dans la base de données ) si l'analyse a montré que c'est
comme ça que ça fonctionne dans la réalité.


Vous attribuez des numéros de transaction bancaire avant
que la transaction soit enregistrée de façon automatique,
vous vous en servez donc comme jeton.



J'attribue un numéro avant et le valide après ( enfin, le SGBD ).

C'est même le concept des transactions ( base de données relationnelle
s'entend ), non ?

Quand aux numéros de transaction bancaire que je prends en exemple, je
ne m'en sert que s'ils existent dans les règles de gestion de la banque.
Il ne s'agit pas d'une astuce technique informatique pour différencier 2
transactions bancaires.

Je rappelle qu'on modélise le monde réel et que la clé doit correspondre
à des attributs du monde réel. Je n'ai pas à inventer des attributs pour
faciliter mon analyse ( même si on le fait pour implémenter le système ).

De toute façon, vous ne pouvez créer de table qui n'ait pas de clé,


Oh ?

:~$ mysql test
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 9 to server version: 4.0.24_Debian-10sarge2-log

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> create table takacroire (truc integer);
Query OK, 0 rows affected (0.24 sec)

mysql> insert into takacroire values (42),(42),(42);
Query OK, 3 rows affected (0.11 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from takacroire;
+------+
| truc |
+------+
| 42 |
| 42 |
| 42 |
+------+
3 rows in set (0.00 sec)




Comme me le faisait remarquer d'un façon très aimable M. Mevzek, il n'y
a pas que MySql et, de plus, MySql n'est pas un vrai SGBD relationnel (
sauf à prendre le 'moteur' innodb ).

Je n'ai pas dit, ce me semble, que ce genre de table était rejeté par un
SGBD relationnel; j'ai dit qu'une table devait toujours contenir une
clé, sinon l'analyse était mauvaise. Ce qui est différent.

Vous pouvez bien sur créer ce genre d'horreur, mais à quoi cela sert-il ?

sinon votre analyse est mauvaise et M. Codd ne sera pas d'accord.


Le regretté Codd a quitté cette vallée de larmes en 2003, et je ne
crois pas que son fantome viendra nous tirer les pieds la nuit, ni moi
pour mes piètres analyses supposées, ni vous pour vos confusions entre
théorie, possibilités pratiques, et recommandations d'usage.



Qui sait ? Peut-être lit-il de là-haut nos élucubrations ? :-)

--
---- Pierre ----
Ne craignez pas d'atteindre la perfection, vous n'y
arriverez jamais.
Salvador Dali


Avatar
Michel Billaud
Larroque writes:

Michel Billaud disait ceci en ce jour du 02.10.2006 20:43:
Je ne ré-invente rien du tout, il suffit de lire n'importe quel
ouvrage sur Merise ou sur les SGD relationnels.
Oh, excusez moi, je les ai lu vers 1980, ça remonte un peu.




Heureux de vous rafraîchir la mémoire :-) .


Oh, depuis j'ai même eu le bonheur d'enseigner ce genre de choses.

Non, je ne confonds pas la théorie de l'algèbre relationnelle et les
SGBD relationnels.

Pour reprendre les dires de M. Gardarin ( oui, c'est vrai, j'aime bien
ses ouvrages), l'algèbre relationnelle est l'outil formel
indispensable pour manipuler les relations.


ce n'est pas moi qui reprocherai à M. Gardarin de faire la promotion
de l'algèbre en général. Mais là vous tournez en rond, parce que
relations != tables. Il aurait parlé de l'algèbre tabulaire, ç'aurait
été différent.

Les SGBD relationnels sont basés sur le modèle relationnel et
permettent de structurer les données sous forme de tables à 2
dimensions.

En ce qui concerne la relation, je ne suis pas d'accord avec vous: une
relation s'exprime sous forme de table dans un SGBD.


Elle s'implémente. Et à condition bien sur de ne vouloir considérer
que des relations finies, définies en extension.

Exemple de relation dans le modèle relationnel:
r ={ (Dupont,Paris,2140), (Durand,Orsay,1128), ....} (cf Modélisation
dans la conception des systèmes d'information par Acsiome chez Masson )


Vous sautez de la théorie relationnelle, aux sgbd et maintenant à la
modélisation. Quelle confusion !

D'ailleurs, il est dit, par le même auteur ( Gardarin ), que le
langage SQL permet de créer des relations sous forme de table.


Je vous rassure, Gardarin a parfaitement raison. Enfin, si il a dit
précisément que le langage SQL, dans sa partie LDD, permet d'exprimer
des ordres de création de *tables* dans une base. Si il a écrit que
SQL créait des *relations*, ce qui m'étonnerait, c'est le goudron et
les plumes.

Dans ce modèle, la relation se situe au plan conceptuel et la table au
plan applicatif.


Comme quoi, déjà, ce n'est pas tout à fait la même chose, si on
distingue les deux.


Définition ( issue de Apprendre et pratiquer Merise chez Masson ): une
relation entre objets ( ou individus ) est une association perçue dans
le réel entre 2 ou plusieurs entités. Une relation est dépourvue
d'existence propre.


Manque de chance, les individus et les objets n'ont pas non plus
d'existence propre, si on y réfléchit bien. Ni vous ni moi :-)
http://fr.wikipedia.org/wiki/Vacuit%C3%A9


Vous savez, tout ce baratin des bouquins des methodes d'analyse est
assez approximatif. Ce n'est pas parce que c'est présenté à grands coups
de "définition" que ça tient debout quand on gratte un peu.

Prenez par exemple "une association perçue dans le monde réel entre
entités".

Si on veut jouer à "définition", il faut d'abord définir "entité". Et
qu'appelez-vous le monde réel ? Le premier janvier 12765376577868 av
JC est elle une date du monde réel ? Décrire une relation comme une
association, n'est-ce pas jouer avec les mots ? (je me rappelle,
quand j'étais petit un cours de 6ieme commençant par "def: un ensemble
est une classe d'objets ...", et là j'ai demandé "c'est quoi une
classe, exactement ?" :-)). Et "perçue", par qui ? percevons nous
tous la même chose en ce qui concerne le degré de réalité d'une
entité? Une entité existe-t-elle si elle n'est pas perçue ? Une date
a-t-elle une réalité, ou n'est ce finalement qu'une pure convention
pour le répérage d'évènements dans l'espace-temps ? etc.

bref, c'est du baratin pour dire : en gros, pour modéliser, vous
prenez les notations qui sont habituellement repérées dans le monde
réel comme des choses "concrètes" (client, facture, commande...), vous
leur donnez le statut d'entité, vous les dessinez dans des rectangles
puis pour le reste, vous dites que c'est des relations entre les
entités. Et quand ça va pas, vous vous débrouillez comme vous pouvez
en créant des entités au statut intermédiaire (notion de ligne de
facture, par exemple)


Un jeton modélise quelque chose aussi.



Quoi ? ( dans le mode réel, je rappelle ).


Dans le cas qui nous concerne, c'est une information qui permet
d'identifier une partie d'une interaction qui se concluera (peut être)
par un ajout dans une table, information employée de façon à éviter
que certaines parties de cette interaction soient "rejouées" (ce qui
conduirait à une tentative d'insertion d'un doublon).


Veuillez m'excuser, mais je ne connais pas la définition du jeton ( à
part dans les réseaux Token-ring ...).


Si définition il y a, ça doit se trouver dans les Tanenbaum consacrés
au réseau, du côté de la crypto. Désolé, j'ai prêté mon exemplaire.

Quand aux numéros de transaction bancaire que je prends en exemple, je
ne m'en sert que s'ils existent dans les règles de gestion de la
banque.
Il ne s'agit pas d'une astuce technique informatique pour différencier
2 transactions bancaires.


C'est une astuce technique pour différencier deux transactions,
introduite il y a longtemps par les banquiers. Ca revient au même.


Je n'ai pas dit, ce me semble, que ce genre de table était rejeté par
un SGBD relationnel; j'ai dit qu'une table devait toujours contenir
une clé, sinon l'analyse était mauvaise. Ce qui est différent.


Ah, vous voulez dire qu'il est souhaitable qu'à l'issue de la
conception d'un modèle relationnel, chaque table se trouve munie d'une
clé, fut-elle un auto-increment, pour pouvoir repérer les
enregistrements individuellement par leur contenu ? Dans mes bras !

MB

--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)



Avatar
Michel Billaud
erratum:

Michel Billaud writes:

bref, c'est du baratin pour dire : en gros, pour modéliser, vous
prenez les notations qui sont habituellement repérées dans le monde
.............notions


MB
--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)

Avatar
Larroque
Michel Billaud disait ceci en ce jour du 03.10.2006 12:05:
Larroque writes:

Pour reprendre les dires de M. Gardarin ( oui, c'est vrai, j'aime bien
ses ouvrages), l'algèbre relationnelle est l'outil formel
indispensable pour manipuler les relations.


ce n'est pas moi qui reprocherai à M. Gardarin de faire la promotion
de l'algèbre en général. Mais là vous tournez en rond, parce que
relations != tables. Il aurait parlé de l'algèbre tabulaire, ç'aurait
été différent.



Pourquoi tournerai-je en rond ?

Vous m'avez accusé de confondre l'algèbre relationnelle et les SGBD
relationnels. Je vous réponds en vous montrant que je sais que c'est
différent.

Quant aux relations != tables, je vous cite:
"
Il y a quelques différences, par exemple
d'une relation est un ensemble (non-ordonné, sans répétition) de
n-uplets, là om une table est une suite (plus ou moins ordonnée, avec
doublons éventuesl) de n-uplets.
"

à quoi je vous répondais que les 2 choses ne se situent pas au même
niveau ( voir plus bas ).

Les SGBD relationnels sont basés sur le modèle relationnel et
permettent de structurer les données sous forme de tables à 2
dimensions.

En ce qui concerne la relation, je ne suis pas d'accord avec vous: une
relation s'exprime sous forme de table dans un SGBD.


Elle s'implémente. Et à condition bien sur de ne vouloir considérer
que des relations finies, définies en extension.


Peut-on implémenter les autres ? Là, vous êtes, amah, au niveau de la
théorie mathématique et non de l'analyse ou de la programmation.

Exemple de relation dans le modèle relationnel:
r ={ (Dupont,Paris,2140), (Durand,Orsay,1128), ....} (cf Modélisation
dans la conception des systèmes d'information par Acsiome chez Masson )


Vous sautez de la théorie relationnelle, aux sgbd et maintenant à la
modélisation. Quelle confusion !


Quelle confusion ? Je vous donne un exemple de relation dans le modèle
relationnel dont on parle parce qu'en informatique et lors de l'analyse,
c'est là qu'on les définit.


D'ailleurs, il est dit, par le même auteur ( Gardarin ), que le
langage SQL permet de créer des relations sous forme de table.


Je vous rassure, Gardarin a parfaitement raison. Enfin, si il a dit
précisément que le langage SQL, dans sa partie LDD, permet d'exprimer
des ordres de création de *tables* dans une base. Si il a écrit que
SQL créait des *relations*, ce qui m'étonnerait, c'est le goudron et
les plumes.



Page 201 de "Maîtriser les bases de données" par Georges Gardarin,
édition Eyrolles (1994).

Dans ce modèle, la relation se situe au plan conceptuel et la table au
plan applicatif.


Comme quoi, déjà, ce n'est pas tout à fait la même chose, si on
distingue les deux.



Evidemment que je distingue les 2 et dit qu'ils ne sont pas sur le même
plan; la table est l'implémentation de la relation.

Je n'ai jamais dit que c'était la même chose.

Définition ( issue de Apprendre et pratiquer Merise chez Masson ): une
relation entre objets ( ou individus ) est une association perçue dans
le réel entre 2 ou plusieurs entités. Une relation est dépourvue
d'existence propre.


Manque de chance, les individus et les objets n'ont pas non plus
d'existence propre, si on y réfléchit bien. Ni vous ni moi :-)
http://fr.wikipedia.org/wiki/Vacuit%C3%A9



Ok :-) mais ce n'est pas ma religion :-) .


Vous savez, tout ce baratin des bouquins des methodes d'analyse est
assez approximatif. Ce n'est pas parce que c'est présenté à grands coups
de "définition" que ça tient debout quand on gratte un peu.



Je suis d'accord pour dire que toutes ces théories ne sont pas à
appliquer au pied de la lettre et, de plus, elles évoluent ou se font
'détrônées'. J'ai commencé par Warnier, c'est vous dire !

Mais il n'empêche qu'elles permettent d'éviter des erreurs grossières,
comme par exemple, l'absence de clé dans une relation ( je sais, je suis
lourd ).

Prenez par exemple "une association perçue dans le monde réel entre
entités".

Si on veut jouer à "définition", il faut d'abord définir "entité".


je cite:
"( Acsiome ) Une entité est une classe générique d'individus ou d'objets
ayant les mêmes caractéristiques par un modélisateur placé dans un
environnement donné"
"(Gardarin) Entité: Modèle d'objet identifié du monde réel dont le type
est défini par un nom et une liste de propriétés"

Je rappelle que nous parlons de conception de systèmes d'information et
non de philosophie.

Et
qu'appelez-vous le monde réel ? Le premier janvier 12765376577868 av
JC est elle une date du monde réel ? Décrire une relation comme une
association, n'est-ce pas jouer avec les mots ? (je me rappelle,
quand j'étais petit un cours de 6ieme commençant par "def: un ensemble
est une classe d'objets ...", et là j'ai demandé "c'est quoi une
classe, exactement ?" :-)). Et "perçue", par qui ? percevons nous
tous la même chose en ce qui concerne le degré de réalité d'une
entité? Une entité existe-t-elle si elle n'est pas perçue ? Une date
a-t-elle une réalité, ou n'est ce finalement qu'une pure convention
pour le répérage d'évènements dans l'espace-temps ? etc.



Au niveau de la conception d'un SI, la date est un objet.

bref, c'est du baratin pour dire : en gros, pour modéliser, vous
prenez les notations qui sont habituellement repérées dans le monde
réel comme des choses "concrètes" (client, facture, commande...), vous
leur donnez le statut d'entité, vous les dessinez dans des rectangles
puis pour le reste, vous dites que c'est des relations entre les
entités. Et quand ça va pas, vous vous débrouillez comme vous pouvez
en créant des entités au statut intermédiaire (notion de ligne de
facture, par exemple)




Bien résumé. Mais c'est ce à quoi amènent les théories de modélisation
de SI ( c'est pour ça qu'elles ont été faites, non ? ).

Un jeton modélise quelque chose aussi.

Quoi ? ( dans le mode réel, je rappelle ).



Dans le cas qui nous concerne, c'est une information qui permet
d'identifier une partie d'une interaction qui se concluera (peut être)
par un ajout dans une table, information employée de façon à éviter
que certaines parties de cette interaction soient "rejouées" (ce qui
conduirait à une tentative d'insertion d'un doublon).



Mais, un SGBD relationnel permet ceci sans jeton ( si j'ai bien compris
votre définition ) !! C'est justement le rôle des clés, des contraintes
et des transactions.

Pourquoi rajouter une information redondante ?


Veuillez m'excuser, mais je ne connais pas la définition du jeton ( à
part dans les réseaux Token-ring ...).


Si définition il y a, ça doit se trouver dans les Tanenbaum consacrés
au réseau, du côté de la crypto. Désolé, j'ai prêté mon exemplaire.



Je serais toutefois heureux d'avoir la définition de ce fameux jeton qui
me montre qu'il modélise un objet et non une astuce de programmation.

Quand aux numéros de transaction bancaire que je prends en exemple, je
ne m'en sert que s'ils existent dans les règles de gestion de la
banque.
Il ne s'agit pas d'une astuce technique informatique pour différencier
2 transactions bancaires.


C'est une astuce technique pour différencier deux transactions,
introduite il y a longtemps par les banquiers. Ca revient au même.




Ce n'est pas une astuce mais une nécessité de gestion qui a été résolue
comme ça dans notre exemple.

Pour moi, une astuce est de créer un champ non nécessaire mais qui
facilite la tache et qui est le résultat, amha, d'une erreur d'analyse (
à moins, bien sur, qu'on soit conscient de la chose et qu'on crée ce
champ pour faciliter le traitement, mais pas pour en faire une clé ).

Je n'ai pas dit, ce me semble, que ce genre de table était rejeté par
un SGBD relationnel; j'ai dit qu'une table devait toujours contenir
une clé, sinon l'analyse était mauvaise. Ce qui est différent.


Ah, vous voulez dire qu'il est souhaitable qu'à l'issue de la
conception d'un modèle relationnel, chaque table se trouve munie d'une
clé, fut-elle un auto-increment, pour pouvoir repérer les
enregistrements individuellement par leur contenu ? Dans mes bras !



Je dis qu'il est nécessaire que chaque table soit muni d'une clé et que
celle-ci doit être faite à partir d'entités du monde réel et non d'un
champ auto-incrémenté implémenté pour les besoins de l'informaticien.

Pas du tout la même chose.

Créer une séquence comme identifiant, c'est, amha, pour se faciliter la
tâche. Il est plus facile de travailler sur un champ que sur 2 ou plus
qui constituent la clé.

Mais, en aucun cas, ce champ ne doit remplacer la clé que j'appellerai
réelle.

Alors, bien sur, et pour revenir au sujet, lorsqu'on développe une
application web en php, il se trouve qu'on est souvent celui qui définit
les règles et celui qui les implémente.

Par exemple, pour les sessions, il est nécessaire d'avoir un identifiant
que l'on va stocker en base de données. Cet identifiant ( j'y associe
aussi la date ) est la clé de la table.

Soit on utilise celui que crée PHP soit on crée le sien propre sous
forme de séquence, par ex. Mais c'est une règle de gestion dans ce cas
là et non une astuce d'implémentation.


--
---- Pierre ----
Un banquier, c'est quelqu'un qui vous prête un parapluie
quand il fait beau et vous le reprend quand il pleut.
Anonyme



Avatar
Michel Billaud
Larroque writes:

D'ailleurs, il est dit, par le même auteur ( Gardarin ), que le
langage SQL permet de créer des relations sous forme de table.
Je vous rassure, Gardarin a parfaitement raison. Enfin, si il a dit

précisément que le langage SQL, dans sa partie LDD, permet d'exprimer
des ordres de création de *tables* dans une base. Si il a écrit que
SQL créait des *relations*, ce qui m'étonnerait, c'est le goudron et
les plumes.



Page 201 de "Maîtriser les bases de données" par Georges Gardarin,
édition Eyrolles (1994).


Et bien, ce n'est pas le premier à écrire une connerie dans un bouquin.

Prenez par exemple "une association perçue dans le monde réel entre
entités".
Si on veut jouer à "définition", il faut d'abord définir "entité".


je cite:
"( Acsiome ) Une entité est une classe générique d'individus ou
d'objets ayant les mêmes caractéristiques par un modélisateur placé
dans un environnement donné"


Super. On a un mot à définir, entité, et maintenant il faut définir
"objet", "individu", et "classe", qui plus est "générique". Et quel
est le modélisateur, quel est l'environnement auquel on se
réfère. Tout ça c'est nécessaire pour que deux modélisateurs voient à
peu près les mêmes entités dans une réalité qui est censée leur être
commune, histoire de pouvoir communiquer, voire collaborer.


"(Gardarin) Entité: Modèle d'objet identifié du monde réel dont le
type est défini par un nom et une liste de propriétés"


Là on n'est plus dans le monde réel, mais dans le modèle.

Je rappelle que nous parlons de conception de systèmes d'information
et non de philosophie.


La philosophie est une chose très sérieuse.


bref, c'est du baratin pour dire : en gros, pour modéliser, vous
prenez les notations qui sont habituellement repérées dans le monde
réel comme des choses "concrètes" (client, facture, commande...), vous
leur donnez le statut d'entité, vous les dessinez dans des rectangles
puis pour le reste, vous dites que c'est des relations entre les
entités. Et quand ça va pas, vous vous débrouillez comme vous pouvez
en créant des entités au statut intermédiaire (notion de ligne de
facture, par exemple)



Bien résumé. Mais c'est ce à quoi amènent les théories de modélisation
de SI ( c'est pour ça qu'elles ont été faites, non ? ).


En pratique, ce genre de théorie est faite

- au début, pour que l'inventeur fasse des tas de papiers qui lui
permettront d'assister à des conférences qui ont lieu dans des
endroits exotiques, et d'obtenir un poste plus élevé.
- ensuite, pour que ceux qui la promeuvent se fassent des c* en or en
vendant leurs salades dans des séminaires de formation
- et à la fin, pour les rares qui se sont bien vendues, parce qu'elles
constituent un langage commun qui permet de collaborer sur un projet.



Un jeton modélise quelque chose aussi.

Quoi ? ( dans le mode réel, je rappelle ).

Dans le cas qui nous concerne, c'est une information qui permet

d'identifier une partie d'une interaction qui se concluera (peut être)
par un ajout dans une table, information employée de façon à éviter
que certaines parties de cette interaction soient "rejouées" (ce qui
conduirait à une tentative d'insertion d'un doublon).



Mais, un SGBD relationnel permet ceci sans jeton ( si j'ai bien
compris votre définition ) !! C'est justement le rôle des clés, des
contraintes et des transactions.


Revenez à l'exemple, le jeton est un truc qui est dans le formulaire,
et qui revient au serveur pour controle. Le SGBD n'a rien a voir la
dedans, il ne s'occupe pas du conversationnel avec l'usager.

MB

--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)




Avatar
Larroque
Michel Billaud disait ceci en ce jour du 03.10.2006 21:51:

Et bien, ce n'est pas le premier à écrire une connerie dans un bouquin.
..............
Super. On a un mot à définir, entité, et maintenant il faut définir
"objet", "individu", et "classe", qui plus est "générique". Et quel
est le modélisateur, quel est l'environnement auquel on se
réfère. Tout ça c'est nécessaire pour que deux modélisateurs voient à
peu près les mêmes entités dans une réalité qui est censée leur être
commune, histoire de pouvoir communiquer, voire collaborer.

.....................
Là on n'est plus dans le monde réel, mais dans le modèle.
..................
La philosophie est une chose très sérieuse.

.............

En pratique, ce genre de théorie est faite

- au début, pour que l'inventeur fasse des tas de papiers qui lui
permettront d'assister à des conférences qui ont lieu dans des
endroits exotiques, et d'obtenir un poste plus élevé.
- ensuite, pour que ceux qui la promeuvent se fassent des c* en or en
vendant leurs salades dans des séminaires de formation
- et à la fin, pour les rares qui se sont bien vendues, parce qu'elles
constituent un langage commun qui permet de collaborer sur un projet.

.................


Puis-je quand même vous faire remarquer que sans ces théories dont
celles de Codd, vous n'auriez pas l'usage des SGBD relationnels.

Quant au reste de vos écrits .....


Mais, un SGBD relationnel permet ceci sans jeton ( si j'ai bien

compris votre définition ) !! C'est justement le rôle des clés, des
contraintes et des transactions.


Revenez à l'exemple, le jeton est un truc qui est dans le formulaire,
et qui revient au serveur pour controle. Le SGBD n'a rien a voir la
dedans, il ne s'occupe pas du conversationnel avec l'usager.



Quel exemple ?

En ce qui concerne l'objet initial du thread, je me permets de rappeler
la réponse de M. Gallet:
"
Tu as deux grands types de solutions, parfaitement combinables d'ailleurs.

1) le jeton unique, comme rappelé par exemple par D. Jourand dans ce
même thread. ............. Possède l'avantage de fonctionner sans SGBDR
par un système de sessions non stocké en SGBDR. Ne garantit pas
l'unicité en SGBDR quand on en a une derrière; mais filtre les erreurs
de bonne foi dans le processus d'enregistrement.


2) comprendre comment on doit utiliser une clef primaire ou une clef
unique dans la base de données : empêcher les doublons, c'est par
**définition** son boulot (ce que cette mode à la con des autoincrement
partout sans réflexion minimaliste fait oublier). A ce sujet, (re) lire
le cours que je diffuse sur saphirtech.com par exemple. Cette méthode
apporte beaucoup plus d'unicité, et la garantit même totalement dans
certains cas (ça dépend toujours des données qu'on traite).
"

Et bien, je suis tout à fait d'accord:
1) l'usage du jeton permet de fonctionner sans SGBD relationnel. On ne
fait donc plus forcement du relationnel.
2) C'est au SGBD d'empêcher les doublons par l'usage des clés,
contraintes et transactions. C'est ainsi que doit être utilisé un SGBD.

Donc, avec un SGBD, le jeton n'a pas lieu d'être. Les clés et les
contraintes définies par l'analyse du réel suffisent amplement.

Et dire qu'un SGBD relationnel n'a rien à voir dans ce que vous appelez
le conversationnel ( je présume qu'il s'agit des affichages des
formulaires de saisie et des résultats ) est vrai, mais en ce qui
concerne les traitements et la garantie d'unicité des saisies, il a tout
à voir et ça fait partie de son boulot ...... à quoi servent donc les
commit et rollback, les unique, primary key, foreign key ... on delete
..., les not null, les check ...... ?????

En plus des contraintes d'intégrité, les transactions sont implémentées
dans tous les SGBD relationnels dignes de ce nom.

Et je livre à votre sagacité et ironie cette introduction aux
transactions tirée de 'Client serveur' de Miranda et Ruols ( Eyrolles ):
"
2 - Les problèmes de contrôle de concurrence et de reprise sur panne: le
concept de transaction:

Un concept unique, celui de 'transaction', a été défini pour assurer
aussi bien:
- une exécution atomique ( tout ou rien ) de plusieurs opérations SQL de
mise à jour, quelle que soit la panne qui pourrait se produire;
- une bonne exécution de plusieurs opérations de mise à jour
concurrentes via un mécanisme de synchronisation basé sur le verrouillage.
"

Bon, maintenant,libre à vous d'y rajouter des jetons ou autres fantaisies.

Pour ma part, je tache de ne pas refaire ce qui a été déjà fait par
d'autres ( et que je referais mal ) et préfère utiliser les outils qu'on
met à ma disposition.

Et pour que ça fonctionne et que ce soit cohérent, eh bien, il est
nécessaire d'avoir une ( vrai ) clé par table ( je sais, je suis lourd ).


--
---- Pierre ----
On a toujours tort d'essayer d'avoir raison devant des gens qui ont
toutes les bonnes raisons de croire qu'ils n'ont pas tort.
Raymond Devos



Avatar
Michel Billaud
Larroque writes:


Puis-je quand même vous faire remarquer que sans ces théories dont
celles de Codd, vous n'auriez pas l'usage des SGBD relationnels.


Je ne vois pas ce que ça a de contradictoire. Les SGBD relationnels
n'ont pas été inventés pour que *je* m'en serve, ils ont été inventés
par des chercheurs qui avaient leurs motivations pour chercher et
publier, et vendus par des boites qui avaient intérêt à les vendre.

2) C'est au SGBD d'empêcher les doublons par l'usage des clés,
contraintes et transactions. C'est ainsi que doit être utilisé un SGBD.

Donc, avec un SGBD, le jeton n'a pas lieu d'être. Les clés et les
contraintes définies par l'analyse du réel suffisent amplement.

Et dire qu'un SGBD relationnel n'a rien à voir dans ce que vous
appelez le conversationnel ( je présume qu'il s'agit des affichages
des formulaires de saisie et des résultats )


et de la récupération des données saisies pour les enregistrer éventuellement.

est vrai,


Nous sommes d'accord.

mais en ce qui
concerne les traitements et la garantie d'unicité des saisies,
il a tout à voir et ça fait partie de son boulot ......


Si vous appelez "saisie" l'ajout dans les tables, nous sommes d'accord
sur le fond. Le tout est d'appeler les choses par leur nom, sinon on se
chamaille pour rien. Comme disait Confucius :
<<
Si les noms ne sont pas ajustés, le langage n'est pas adéquat. Si le
langage n'est pas adéquat, les choses ne peuvent être menées à
bien. Si les choses ne peuvent être menées à bien, les biensances et
l'harmonie ne s'épanouissent guère. Les bienséances et l'harmonie ne
s'épanouissant guère, les supplices et les autres châtiments ne sont
pas justes. Les supplices et les autres châtiments n'étant plus
justes, le peuple ne sait plus sur quel pied danser.

Voir entretiens de confucius, XII.2


http://www.afpc.asso.fr/wengu/Lunyu/Couvreur/Lunyu_13.htm


à quoi servent donc
les commit et rollback, les unique, primary key, foreign key ... on
delete ..., les not null, les check ...... ?????


C'est une question ?

Et je livre à votre sagacité et ironie cette introduction aux
transactions tirée de 'Client serveur' de Miranda et Ruols ( Eyrolles
):
"
2 - Les problèmes de contrôle de concurrence et de reprise sur panne:
le concept de transaction:
[...]


Sans vouloir trop m'avancer (je n'ai pas le bouquin sous la main mais
vous pourrez vérifier pour moi), il me semble que MM. Miranda et Ruol
parlent de transactions programme-sgbd, pas de conversation
programme-utilisateur, ce qui était le problème initial.

MB
--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)


Avatar
Larroque
Michel Billaud disait ceci en ce jour du 04.10.2006 17:38:
"
2 - Les problèmes de contrôle de concurrence et de reprise sur panne:
le concept de transaction:
[...]


Sans vouloir trop m'avancer (je n'ai pas le bouquin sous la main mais
vous pourrez vérifier pour moi), il me semble que MM. Miranda et Ruol
parlent de transactions programme-sgbd, pas de conversation
programme-utilisateur, ce qui était le problème initial.



Il s'agit des transactions sgbd mais c'est bien de ça dont nous
discutons avec l'utilité de vraies clés primaires, non ?

Je répondais, dans ce thread, aux allégations comme quoi une clé
primaire composé de d'objets naturels n'étaient pas obligatoires pour
les traitements utilisant les SGBD relationnels ( c'est vrai que je ne
répondais pas au message initial ).

Je vous cite:
"
Si c'est de l'INSERT, il suffit de choisir correctement ses clefs
uniques/primaires.



Quand y en a, et y en a pas toujours.
"

C'est cette dernière phrase qui a provoqué mon intervention: il doit
toujours y avoir des clés primaires en relationnel, composées d'objets
du monde réel.

Et les accès concurrentiels sont traités par le SGBD directement.

On enregistre la première soumission de données du formulaire x, les
autres provoquent une erreur retournée par le SGBD qui vous permet de
savoir que le formulaire x est déjà enregistré.

Les transactions évitent que les soumissions soient enregistrées en même
temps. Une seule pourra l'être à l'instant t, la transaction
garantissant le traitement séquentiel.

Vous pouvez aussi faire comme ceci: dans une transaction, vous vérifiez
qu'un tuple de la table ne correspond pas aux données à saisir et si
non, vous le créez, si oui, le SGBD renvoie un code d'erreur.

S'il y a une soumission multiple, les autres soumissions sont obligés
d'attendre la fin de la transaction pour être traitée par le SGBD et
vont donc sortir en erreur.

Je précise que tous ces traitements ( 2° exemple ) peuvent être
effectuer au sein de fonctions ou de procédures que vous définissez dans
le SGBD, allégeant d'autant votre code php.


--
---- Pierre ----
Si l'homme échoue à concilier la justice et la liberté, alors il échoue
à tout.
Albert Camus


1 2 3 4