Comment d=E9finir une clef primaire compos=E9e de plusieurs champs ? Par
exemple dans ma table ligne_de_commande je voudrais que la clef soit n
=B0_commande+n=B0ligne.
Lorsque je le d=E9finis dans ma BD Oracle et que je synchronise mon
analyse il me cr=E9=E9 en fait 2 clefs primaires (1 sur chaque champ) au
lieu d'1 seule sur les 2 champs.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
paratge
Loko a écrit :
Bonjour
Comment définir une clef primaire composée de plusieurs champs ? Par exemple dans ma table ligne_de_commande je voudrais que la clef soit n °_commande+n°ligne.
Lorsque je le définis dans ma BD Oracle et que je synchronise mon analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au lieu d'1 seule sur les 2 champs.
Merci
Bonjour,
As-tu essayé les indirections :
MaClé est une chaine MaClé = n°_commande+n°ligne. {MonChamp} = {Val(MaClé)}
si j'ai bien compris ton problème :)
Bon dev
Loko a écrit :
Bonjour
Comment définir une clef primaire composée de plusieurs champs ? Par
exemple dans ma table ligne_de_commande je voudrais que la clef soit n
°_commande+n°ligne.
Lorsque je le définis dans ma BD Oracle et que je synchronise mon
analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au
lieu d'1 seule sur les 2 champs.
Merci
Bonjour,
As-tu essayé les indirections :
MaClé est une chaine
MaClé = n°_commande+n°ligne.
{MonChamp} = {Val(MaClé)}
Comment définir une clef primaire composée de plusieurs champs ? Par exemple dans ma table ligne_de_commande je voudrais que la clef soit n °_commande+n°ligne.
Lorsque je le définis dans ma BD Oracle et que je synchronise mon analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au lieu d'1 seule sur les 2 champs.
Merci
Bonjour,
As-tu essayé les indirections :
MaClé est une chaine MaClé = n°_commande+n°ligne. {MonChamp} = {Val(MaClé)}
si j'ai bien compris ton problème :)
Bon dev
Loko
On 27 nov, 09:46, paratge wrote:
Loko a écrit :
> Bonjour
> Comment définir une clef primaire composée de plusieurs champs ? Par > exemple dans ma table ligne_de_commande je voudrais que la clef soit n > °_commande+n°ligne.
> Lorsque je le définis dans ma BD Oracle et que je synchronise mon > analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au > lieu d'1 seule sur les 2 champs.
> Merci
Bonjour,
As-tu essayé les indirections :
MaClé est une chaine MaClé = n°_commande+n°ligne. {MonChamp} = {Val(MaClé)}
si j'ai bien compris ton problème :)
Bon dev
Bonjour
Je ne pense pas qu'une solution par programmation soit souhaitable. Les clefs primaires composées sont qqchose de standard (du moins chez Oracle), cad que la clef primaire porte sur 2 champs. Il ne faut pas de programmation pour controler cela il faut que ce soit gérer au niveau "système" avec des erreurs sytemes aussi de clef non respectée, etc ...
Concretement, dans l'analyse, on ne peut pas selectionenr 2 champs d'une table en meme temps puis cliquer sur "clef unique" ...
On 27 nov, 09:46, paratge <j...@2jbconcepts.fr> wrote:
Loko a écrit :
> Bonjour
> Comment définir une clef primaire composée de plusieurs champs ? Par
> exemple dans ma table ligne_de_commande je voudrais que la clef soit n
> °_commande+n°ligne.
> Lorsque je le définis dans ma BD Oracle et que je synchronise mon
> analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au
> lieu d'1 seule sur les 2 champs.
> Merci
Bonjour,
As-tu essayé les indirections :
MaClé est une chaine
MaClé = n°_commande+n°ligne.
{MonChamp} = {Val(MaClé)}
si j'ai bien compris ton problème :)
Bon dev
Bonjour
Je ne pense pas qu'une solution par programmation soit souhaitable.
Les clefs primaires composées sont qqchose de standard (du moins chez
Oracle), cad que la clef primaire porte sur 2 champs. Il ne faut pas
de programmation pour controler cela il faut que ce soit gérer au
niveau "système" avec des erreurs sytemes aussi de clef non respectée,
etc ...
Concretement, dans l'analyse, on ne peut pas selectionenr 2 champs
d'une table en meme temps puis cliquer sur "clef unique" ...
> Comment définir une clef primaire composée de plusieurs champs ? Par > exemple dans ma table ligne_de_commande je voudrais que la clef soit n > °_commande+n°ligne.
> Lorsque je le définis dans ma BD Oracle et que je synchronise mon > analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au > lieu d'1 seule sur les 2 champs.
> Merci
Bonjour,
As-tu essayé les indirections :
MaClé est une chaine MaClé = n°_commande+n°ligne. {MonChamp} = {Val(MaClé)}
si j'ai bien compris ton problème :)
Bon dev
Bonjour
Je ne pense pas qu'une solution par programmation soit souhaitable. Les clefs primaires composées sont qqchose de standard (du moins chez Oracle), cad que la clef primaire porte sur 2 champs. Il ne faut pas de programmation pour controler cela il faut que ce soit gérer au niveau "système" avec des erreurs sytemes aussi de clef non respectée, etc ...
Concretement, dans l'analyse, on ne peut pas selectionenr 2 champs d'une table en meme temps puis cliquer sur "clef unique" ...
paratge
Loko a écrit :
On 27 nov, 09:46, paratge wrote:
Loko a écrit :
Bonjour Comment définir une clef primaire composée de plusieurs champs ? Par exemple dans ma table ligne_de_commande je voudrais que la clef soit n °_commande+n°ligne. Lorsque je le définis dans ma BD Oracle et que je synchronise mon analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au lieu d'1 seule sur les 2 champs. Merci
Bonjour,
As-tu essayé les indirections :
MaClé est une chaine MaClé = n°_commande+n°ligne. {MonChamp} = {Val(MaClé)}
si j'ai bien compris ton problème :)
Bon dev
Bonjour
Je ne pense pas qu'une solution par programmation soit souhaitable. Les clefs primaires composées sont qqchose de standard (du moins chez Oracle), cad que la clef primaire porte sur 2 champs. Il ne faut pas de programmation pour controler cela il faut que ce soit gérer au niveau "système" avec des erreurs sytemes aussi de clef non respectée, etc ...
Concretement, dans l'analyse, on ne peut pas selectionenr 2 champs d'une table en meme temps puis cliquer sur "clef unique" ...
Et une clé composée ?
Loko a écrit :
On 27 nov, 09:46, paratge <j...@2jbconcepts.fr> wrote:
Loko a écrit :
Bonjour
Comment définir une clef primaire composée de plusieurs champs ? Par
exemple dans ma table ligne_de_commande je voudrais que la clef soit n
°_commande+n°ligne.
Lorsque je le définis dans ma BD Oracle et que je synchronise mon
analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au
lieu d'1 seule sur les 2 champs.
Merci
Bonjour,
As-tu essayé les indirections :
MaClé est une chaine
MaClé = n°_commande+n°ligne.
{MonChamp} = {Val(MaClé)}
si j'ai bien compris ton problème :)
Bon dev
Bonjour
Je ne pense pas qu'une solution par programmation soit souhaitable.
Les clefs primaires composées sont qqchose de standard (du moins chez
Oracle), cad que la clef primaire porte sur 2 champs. Il ne faut pas
de programmation pour controler cela il faut que ce soit gérer au
niveau "système" avec des erreurs sytemes aussi de clef non respectée,
etc ...
Concretement, dans l'analyse, on ne peut pas selectionenr 2 champs
d'une table en meme temps puis cliquer sur "clef unique" ...
Bonjour Comment définir une clef primaire composée de plusieurs champs ? Par exemple dans ma table ligne_de_commande je voudrais que la clef soit n °_commande+n°ligne. Lorsque je le définis dans ma BD Oracle et que je synchronise mon analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au lieu d'1 seule sur les 2 champs. Merci
Bonjour,
As-tu essayé les indirections :
MaClé est une chaine MaClé = n°_commande+n°ligne. {MonChamp} = {Val(MaClé)}
si j'ai bien compris ton problème :)
Bon dev
Bonjour
Je ne pense pas qu'une solution par programmation soit souhaitable. Les clefs primaires composées sont qqchose de standard (du moins chez Oracle), cad que la clef primaire porte sur 2 champs. Il ne faut pas de programmation pour controler cela il faut que ce soit gérer au niveau "système" avec des erreurs sytemes aussi de clef non respectée, etc ...
Concretement, dans l'analyse, on ne peut pas selectionenr 2 champs d'une table en meme temps puis cliquer sur "clef unique" ...
Et une clé composée ?
patrice
y'a pas de clé primaire sous windev juste des clé, uniques ou non. les clés composées sont autorisées donc en théorie, ca devrait le faire. le cas échéant, mail au st
"Loko" a écrit dans le message de news: Bonjour
Comment définir une clef primaire composée de plusieurs champs ? Par exemple dans ma table ligne_de_commande je voudrais que la clef soit n °_commande+n°ligne.
Lorsque je le définis dans ma BD Oracle et que je synchronise mon analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au lieu d'1 seule sur les 2 champs.
Merci
y'a pas de clé primaire sous windev
juste des clé, uniques ou non.
les clés composées sont autorisées
donc en théorie, ca devrait le faire.
le cas échéant, mail au st
"Loko" <arnaudgeslin@gmail.com> a écrit dans le message de
news:14c3614e-fcf6-4178-bc8c-5023d1757eaa@j44g2000hsj.googlegroups.com...
Bonjour
Comment définir une clef primaire composée de plusieurs champs ? Par
exemple dans ma table ligne_de_commande je voudrais que la clef soit n
°_commande+n°ligne.
Lorsque je le définis dans ma BD Oracle et que je synchronise mon
analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au
lieu d'1 seule sur les 2 champs.
y'a pas de clé primaire sous windev juste des clé, uniques ou non. les clés composées sont autorisées donc en théorie, ca devrait le faire. le cas échéant, mail au st
"Loko" a écrit dans le message de news: Bonjour
Comment définir une clef primaire composée de plusieurs champs ? Par exemple dans ma table ligne_de_commande je voudrais que la clef soit n °_commande+n°ligne.
Lorsque je le définis dans ma BD Oracle et que je synchronise mon analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au lieu d'1 seule sur les 2 champs.
Merci
Loko
On 27 nov, 09:55, paratge wrote:
Loko a écrit :
> On 27 nov, 09:46, paratge wrote: >> Loko a écrit :
>>> Bonjour >>> Comment définir une clef primaire composée de plusieurs champs ? P ar >>> exemple dans ma table ligne_de_commande je voudrais que la clef soit n >>> °_commande+n°ligne. >>> Lorsque je le définis dans ma BD Oracle et que je synchronise mon >>> analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au >>> lieu d'1 seule sur les 2 champs. >>> Merci >> Bonjour,
>> As-tu essayé les indirections :
>> MaClé est une chaine >> MaClé = n°_commande+n°ligne. >> {MonChamp} = {Val(MaClé)}
>> si j'ai bien compris ton problème :)
>> Bon dev
> Bonjour
> Je ne pense pas qu'une solution par programmation soit souhaitable. > Les clefs primaires composées sont qqchose de standard (du moins chez > Oracle), cad que la clef primaire porte sur 2 champs. Il ne faut pas > de programmation pour controler cela il faut que ce soit gérer au > niveau "système" avec des erreurs sytemes aussi de clef non respecté e, > etc ...
> Concretement, dans l'analyse, on ne peut pas selectionenr 2 champs > d'une table en meme temps puis cliquer sur "clef unique" ...
Et une clé composée ?
merci pour le tuyau, je viens effectivement de trouver ! J'ai cherché clé composée dans l'aide et ai réussi à la définir. Avant ca ne marchait pas car j'avais deja défini une liaison entre ma table mere et ma table fille, j'ai supprimé temporairement ma liaison, ai créé ma clef composée puis remis ma liaison.
Merci bcp
On 27 nov, 09:55, paratge <j...@2jbconcepts.fr> wrote:
Loko a écrit :
> On 27 nov, 09:46, paratge <j...@2jbconcepts.fr> wrote:
>> Loko a écrit :
>>> Bonjour
>>> Comment définir une clef primaire composée de plusieurs champs ? P ar
>>> exemple dans ma table ligne_de_commande je voudrais que la clef soit n
>>> °_commande+n°ligne.
>>> Lorsque je le définis dans ma BD Oracle et que je synchronise mon
>>> analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au
>>> lieu d'1 seule sur les 2 champs.
>>> Merci
>> Bonjour,
>> As-tu essayé les indirections :
>> MaClé est une chaine
>> MaClé = n°_commande+n°ligne.
>> {MonChamp} = {Val(MaClé)}
>> si j'ai bien compris ton problème :)
>> Bon dev
> Bonjour
> Je ne pense pas qu'une solution par programmation soit souhaitable.
> Les clefs primaires composées sont qqchose de standard (du moins chez
> Oracle), cad que la clef primaire porte sur 2 champs. Il ne faut pas
> de programmation pour controler cela il faut que ce soit gérer au
> niveau "système" avec des erreurs sytemes aussi de clef non respecté e,
> etc ...
> Concretement, dans l'analyse, on ne peut pas selectionenr 2 champs
> d'une table en meme temps puis cliquer sur "clef unique" ...
Et une clé composée ?
merci pour le tuyau, je viens effectivement de trouver ! J'ai cherché
clé composée dans l'aide et ai réussi à la définir. Avant ca ne
marchait pas car j'avais deja défini une liaison entre ma table mere
et ma table fille, j'ai supprimé temporairement ma liaison, ai créé ma
clef composée puis remis ma liaison.
> On 27 nov, 09:46, paratge wrote: >> Loko a écrit :
>>> Bonjour >>> Comment définir une clef primaire composée de plusieurs champs ? P ar >>> exemple dans ma table ligne_de_commande je voudrais que la clef soit n >>> °_commande+n°ligne. >>> Lorsque je le définis dans ma BD Oracle et que je synchronise mon >>> analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au >>> lieu d'1 seule sur les 2 champs. >>> Merci >> Bonjour,
>> As-tu essayé les indirections :
>> MaClé est une chaine >> MaClé = n°_commande+n°ligne. >> {MonChamp} = {Val(MaClé)}
>> si j'ai bien compris ton problème :)
>> Bon dev
> Bonjour
> Je ne pense pas qu'une solution par programmation soit souhaitable. > Les clefs primaires composées sont qqchose de standard (du moins chez > Oracle), cad que la clef primaire porte sur 2 champs. Il ne faut pas > de programmation pour controler cela il faut que ce soit gérer au > niveau "système" avec des erreurs sytemes aussi de clef non respecté e, > etc ...
> Concretement, dans l'analyse, on ne peut pas selectionenr 2 champs > d'une table en meme temps puis cliquer sur "clef unique" ...
Et une clé composée ?
merci pour le tuyau, je viens effectivement de trouver ! J'ai cherché clé composée dans l'aide et ai réussi à la définir. Avant ca ne marchait pas car j'avais deja défini une liaison entre ma table mere et ma table fille, j'ai supprimé temporairement ma liaison, ai créé ma clef composée puis remis ma liaison.
Merci bcp
Loko
On 27 nov, 20:41, Gilles wrote:
Loko avait énoncé :
> Bonjour
> Comment définir une clef primaire composée de plusieurs champs ? Par > exemple dans ma table ligne_de_commande je voudrais que la clef soit n > °_commande+n°ligne.
> Lorsque je le définis dans ma BD Oracle et que je synchronise mon > analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au > lieu d'1 seule sur les 2 champs.
Que ça soit sous Oracle ou autre, ce n'est pas judicieux de faire ça.
Il faut un identifiant simple et unique pour la clé primaire, qui servira pour les clés étrangères. (un int, un guid à la rigueur si fusions de bases)
Et éventuellement des index uniques pour les différentes colonnes définissant l'unicité.
Faire des clés primaire sur N colonnes, c'est juste se tirer une balle dans le pied quand on veut faire des requêtes avec quelques jointures simples... Sans parler des performances déplorables.
Gilles.
ben vois-tu, dans ma carriere j'ai toujours vu cela, que ce soit moi ou ailleurs. Quand tu as une relation commande <--> ligne de commande, dans ma table ligne_de_commande je mets une clef composé du numéro de commande et du numéro de ligne. Et ca pose pas de problème pour faire des jointures ou quoi que ce soit ...
On 27 nov, 20:41, Gilles <boulot_SANSPOURRI...@neogie.com> wrote:
Loko avait énoncé :
> Bonjour
> Comment définir une clef primaire composée de plusieurs champs ? Par
> exemple dans ma table ligne_de_commande je voudrais que la clef soit n
> °_commande+n°ligne.
> Lorsque je le définis dans ma BD Oracle et que je synchronise mon
> analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au
> lieu d'1 seule sur les 2 champs.
Que ça soit sous Oracle ou autre, ce n'est pas judicieux de faire ça.
Il faut un identifiant simple et unique pour la clé primaire, qui
servira pour les clés étrangères. (un int, un guid à la rigueur si
fusions de bases)
Et éventuellement des index uniques pour les différentes colonnes
définissant l'unicité.
Faire des clés primaire sur N colonnes, c'est juste se tirer une balle
dans le pied quand on veut faire des requêtes avec quelques jointures
simples... Sans parler des performances déplorables.
Gilles.
ben vois-tu, dans ma carriere j'ai toujours vu cela, que ce soit moi
ou ailleurs. Quand tu as une relation commande <--> ligne de commande,
dans ma table ligne_de_commande je mets une clef composé du numéro de
commande et du numéro de ligne. Et ca pose pas de problème pour faire
des jointures ou quoi que ce soit ...
> Comment définir une clef primaire composée de plusieurs champs ? Par > exemple dans ma table ligne_de_commande je voudrais que la clef soit n > °_commande+n°ligne.
> Lorsque je le définis dans ma BD Oracle et que je synchronise mon > analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au > lieu d'1 seule sur les 2 champs.
Que ça soit sous Oracle ou autre, ce n'est pas judicieux de faire ça.
Il faut un identifiant simple et unique pour la clé primaire, qui servira pour les clés étrangères. (un int, un guid à la rigueur si fusions de bases)
Et éventuellement des index uniques pour les différentes colonnes définissant l'unicité.
Faire des clés primaire sur N colonnes, c'est juste se tirer une balle dans le pied quand on veut faire des requêtes avec quelques jointures simples... Sans parler des performances déplorables.
Gilles.
ben vois-tu, dans ma carriere j'ai toujours vu cela, que ce soit moi ou ailleurs. Quand tu as une relation commande <--> ligne de commande, dans ma table ligne_de_commande je mets une clef composé du numéro de commande et du numéro de ligne. Et ca pose pas de problème pour faire des jointures ou quoi que ce soit ...
Roumegou Eric
Loko a écrit :
On 27 nov, 20:41, Gilles wrote:
Loko avait énoncé :
Bonjour
Comment définir une clef primaire composée de plusieurs champs ? Par exemple dans ma table ligne_de_commande je voudrais que la clef soit n °_commande+n°ligne.
Lorsque je le définis dans ma BD Oracle et que je synchronise mon analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au lieu d'1 seule sur les 2 champs.
Que ça soit sous Oracle ou autre, ce n'est pas judicieux de faire ça.
Il faut un identifiant simple et unique pour la clé primaire, qui servira pour les clés étrangères. (un int, un guid à la rigueur si fusions de bases)
Et éventuellement des index uniques pour les différentes colonnes définissant l'unicité.
Faire des clés primaire sur N colonnes, c'est juste se tirer une balle dans le pied quand on veut faire des requêtes avec quelques jointures simples... Sans parler des performances déplorables.
Gilles.
ben vois-tu, dans ma carriere j'ai toujours vu cela, que ce soit moi ou ailleurs. Quand tu as une relation commande <--> ligne de commande, dans ma table ligne_de_commande je mets une clef composé du numéro de commande et du numéro de ligne. Et ca pose pas de problème pour faire des jointures ou quoi que ce soit ...
Je suis entièrement d'accord avec Gilles. Un identifiant primaire doit être une clé unique bien sur, numérique, pas de signifiant dans l'identifiant, et une colonne unique.
Ensuite les foreigns Key se feront sur une seule clé. Effectivement l'organisation clé composée, je l'ai pratiquée aussi très longtemps. C'était le principe meme des bases sur Ibm 3x, puis confirmé de fait par le sgbd de l'as400. Et hyper file a toujours eu aussi cette approche mais je suis persuadé depuis 10 ans que pour des bases mysql qui vont être manipulées à coup de requêtes, l'approche de Gilles est meilleure.
Et surtout on a une vraie différence entre la clé technique qui n'est qu'un id informatique et l'information elle meme. Par exemple pour moi un code client comptable ne peut être une clé primaire. C'est une colonne de la table sur laquelle on a un index (peut être unique) mais jamais cela me servira à relier mes tables. Car on n'est pas à l'abri d'une réorganisation des codes clients par ex (fusion, nouvelle compta ...) et là les incidences sont fortes.
voilà ...
-- Eric Roumégou Webmaster des Wtablettes http://cerbermail.com/?qE7t4Qvilo (cliquez sur le lien ci-dessus pour m'écrire)
Loko a écrit :
On 27 nov, 20:41, Gilles <boulot_SANSPOURRI...@neogie.com> wrote:
Loko avait énoncé :
Bonjour
Comment définir une clef primaire composée de plusieurs champs ? Par
exemple dans ma table ligne_de_commande je voudrais que la clef soit n
°_commande+n°ligne.
Lorsque je le définis dans ma BD Oracle et que je synchronise mon
analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au
lieu d'1 seule sur les 2 champs.
Que ça soit sous Oracle ou autre, ce n'est pas judicieux de faire ça.
Il faut un identifiant simple et unique pour la clé primaire, qui
servira pour les clés étrangères. (un int, un guid à la rigueur si
fusions de bases)
Et éventuellement des index uniques pour les différentes colonnes
définissant l'unicité.
Faire des clés primaire sur N colonnes, c'est juste se tirer une balle
dans le pied quand on veut faire des requêtes avec quelques jointures
simples... Sans parler des performances déplorables.
Gilles.
ben vois-tu, dans ma carriere j'ai toujours vu cela, que ce soit moi
ou ailleurs. Quand tu as une relation commande <--> ligne de commande,
dans ma table ligne_de_commande je mets une clef composé du numéro de
commande et du numéro de ligne. Et ca pose pas de problème pour faire
des jointures ou quoi que ce soit ...
Je suis entièrement d'accord avec Gilles. Un identifiant primaire doit
être une clé unique bien sur, numérique, pas de signifiant dans
l'identifiant, et une colonne unique.
Ensuite les foreigns Key se feront sur une seule clé.
Effectivement l'organisation clé composée, je l'ai pratiquée aussi très
longtemps. C'était le principe meme des bases sur Ibm 3x, puis confirmé
de fait par le sgbd de l'as400. Et hyper file a toujours eu aussi cette
approche mais je suis persuadé depuis 10 ans que pour des bases mysql
qui vont être manipulées à coup de requêtes, l'approche de Gilles est
meilleure.
Et surtout on a une vraie différence entre la clé technique qui n'est
qu'un id informatique et l'information elle meme. Par exemple pour moi
un code client comptable ne peut être une clé primaire. C'est une
colonne de la table sur laquelle on a un index (peut être unique) mais
jamais cela me servira à relier mes tables. Car on n'est pas à l'abri
d'une réorganisation des codes clients par ex (fusion, nouvelle compta
...) et là les incidences sont fortes.
voilà ...
--
Eric Roumégou
Webmaster des Wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour m'écrire)
Comment définir une clef primaire composée de plusieurs champs ? Par exemple dans ma table ligne_de_commande je voudrais que la clef soit n °_commande+n°ligne.
Lorsque je le définis dans ma BD Oracle et que je synchronise mon analyse il me créé en fait 2 clefs primaires (1 sur chaque champ) au lieu d'1 seule sur les 2 champs.
Que ça soit sous Oracle ou autre, ce n'est pas judicieux de faire ça.
Il faut un identifiant simple et unique pour la clé primaire, qui servira pour les clés étrangères. (un int, un guid à la rigueur si fusions de bases)
Et éventuellement des index uniques pour les différentes colonnes définissant l'unicité.
Faire des clés primaire sur N colonnes, c'est juste se tirer une balle dans le pied quand on veut faire des requêtes avec quelques jointures simples... Sans parler des performances déplorables.
Gilles.
ben vois-tu, dans ma carriere j'ai toujours vu cela, que ce soit moi ou ailleurs. Quand tu as une relation commande <--> ligne de commande, dans ma table ligne_de_commande je mets une clef composé du numéro de commande et du numéro de ligne. Et ca pose pas de problème pour faire des jointures ou quoi que ce soit ...
Je suis entièrement d'accord avec Gilles. Un identifiant primaire doit être une clé unique bien sur, numérique, pas de signifiant dans l'identifiant, et une colonne unique.
Ensuite les foreigns Key se feront sur une seule clé. Effectivement l'organisation clé composée, je l'ai pratiquée aussi très longtemps. C'était le principe meme des bases sur Ibm 3x, puis confirmé de fait par le sgbd de l'as400. Et hyper file a toujours eu aussi cette approche mais je suis persuadé depuis 10 ans que pour des bases mysql qui vont être manipulées à coup de requêtes, l'approche de Gilles est meilleure.
Et surtout on a une vraie différence entre la clé technique qui n'est qu'un id informatique et l'information elle meme. Par exemple pour moi un code client comptable ne peut être une clé primaire. C'est une colonne de la table sur laquelle on a un index (peut être unique) mais jamais cela me servira à relier mes tables. Car on n'est pas à l'abri d'une réorganisation des codes clients par ex (fusion, nouvelle compta ...) et là les incidences sont fortes.
voilà ...
-- Eric Roumégou Webmaster des Wtablettes http://cerbermail.com/?qE7t4Qvilo (cliquez sur le lien ci-dessus pour m'écrire)