[Windev11] Clef primaire sur plusieurs champs

Le
Loko
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
paratge
Le #14576731
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
Le #14576721
On 27 nov, 09:46, 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



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
Le #14576711
Loko a écrit :
On 27 nov, 09:46, 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



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
Le #14576681
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" 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
Le #14576671
On 27 nov, 09:55, paratge
Loko a écrit :



> On 27 nov, 09:46, paratge >> 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
Le #14573251
On 27 nov, 20:41, Gilles
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 ...
Roumegou Eric
Le #14573231
Loko a écrit :
On 27 nov, 20:41, Gilles
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)
Publicité
Poster une réponse
Anonyme