Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Windev11] Clef primaire sur plusieurs champs

7 réponses
Avatar
Loko
Bonjour

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.

Merci

7 réponses

Avatar
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
Avatar
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" ...
Avatar
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 ?
Avatar
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
Avatar
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
Avatar
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 ...
Avatar
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)