Manuel NAUDIN a écrit :
2006/12/25, Henri Boyet <[EMAIL PROTECTED]>:
Manuel NAUDIN a écrit :
> 2006/12/25, Henri Boyet <[EMAIL PROTECTED]>:
>> Manuel NAUDIN a écrit :
>> > Bonjour,
>> >
>> > 2006/12/25, Henri Boyet <[EMAIL PROTECTED]>:
>> >> Bonjour et Joyeux Noël à tous !
>> >>
>> >> J'ai créé plusieurs tables de données et j'essaie maintenant de
les
>> >> relier mais j'obtiens le message d'erreur suivant :
>> >> primary or unique constraint required on main table : "T_TYPE" in
>> >> statement [ALTER TABLE "T_CORRESP" ADD FOREIGN KEY ("nom_type")
>> >> REFERENCES "T_TYPE" ("nom_type")].
>> >> Le champ nom_type est une chaîne de caractères (en fait un seul
>> >> caractère) défini et rempli dans la table T_TYPE ; je voudrais que
>> dans
>> >> la table T_CORRESP, le champ nom_type ne puisse prendre qu'une
valeur
>> >> définie dans le champ de même nom de l'autre table.
>> >> Quelqu'un pourrait-il me dire où je me trompe ?
>> > il manque une clé primaire dans la table T_TYPE.
>> > Donc soit rajouter une champ INTEGER IDENTITY et le désigner
comme clé
>> > primaire, soit désigner nom_type comme clé primaire.
>> Si si, j'ai bien une clé primaire "id_type" définie comme INTEGER en
>> autovaleur.
> alors c'est ce champ id_type que tu dois mettre en référence dans la
> relation
> (voir
>
http://fr.openoffice.org/Documentation/How-to/Bdd/Debuter_avec_Base.pdf
> chap 8)
C'est bien ce que j'avais voulu faire d'abord, justement en suivant le
how-to sus-mentionné, mais j'obtenais alors l'erreur :
column types do no match in statement [ALTER TABLE "T_CORRESP" ADD
FOREIGN KEY ("nom_type") REFERENCES "T_TYPE" ("nom_type")].
Je pense que ça ne va pas parce que id_type est INTEGER alors que
nom_type est une chaîne de caractères.
en fait il y a deux choix possibles :
- c'est le champ nom_type qui sert de référence. Il doit être désigné
comme clé primaire dans T_TYPE et mis en relation avec un champ de
type varchar. Dans ce cas, id_type dans T_TYPE ne sert plus à rien
(d'ailleurs il n'est pas possible d'avoir deux clés primaires dans une
table).
- c'est le champ id_type qui sert de référence. Il doit être désigné
comme clé primaire dans T_TYPE et mis en relation avec un champ de
type INTEGER.
Bon courage
Merci, c'était ça : j'ai viré id_type et pris nom_type comme clé
primaire. Ce que je ne comprends pas, c'est pourquoi on recommande un
id_machin ...
Henri
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]