Clé étrangere sous oracle

Résolu/Fermé
Low - 13 avril 2008 à 11:58
 Low - 15 avril 2008 à 15:05
Salut tout le monde,

Je voudrais savoir comment mettre deux clés étrangères sur une même table.

Autant pour les clés primaires, c'est simple, par exemple :

CREATE table Associer
( IdActivité Integer NOT NULL,
IdTypeAct Integer NOT NULL,
CONSTRAINT PK_Ass PRIMARY KEY (IdActivité,IdTypeAct)
);

Autant pour la clé étrangère, j'ai essayé pas mal de petit truc mais rien ne marche!
A noter que j'arrive à en mettre une seule sans problème, exemple :

CONSTRAINT FK_LIG FOREIGN KEY (NoLig) REFERENCES ligue (NoLig)

Merci d'avance!!
A voir également:

2 réponses

jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460
13 avril 2008 à 14:23
bonjour,

normalement la syntaxe serait :

CREATE table Associer
( IdActivité Integer NOT NULL,
IdTypeAct Integer NOT NULL,
CONSTRAINT PK_Ass PRIMARY KEY (IdActivité,IdTypeAct) ,
CONSTRAINT FK_LIG FOREIGN KEY (NoLig) REFERENCES ligue (NoLig) ,
CONSTRAINT FK_XXX FOREIGN KEY (NoXxx) REFERENCES Xxx (NoXxx)
);

il faut au moment de la creation que la/les table/s référencées existent

cdt
0
Merci pour ta réponse,
Je vais essayer comme ça, mais il me semble que j'avais déjà essayé et qu'il me sortait alors un message d'erreur genre "Il ne peut pas y avoir plus d'une clé étrangère" ou je ne sais plus trop exactement...

Je te tiens au courant.
0
jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460 > Low
13 avril 2008 à 19:51
ce doit être 2 clé étrangères sur la même table cible l'erreur ?

cela s'écrit normalement :

CONSTRAINT FK_LIG FOREIGN KEY (NoLig,NoXXX) REFERENCES ligue (NoLig,NoXXX)
0
Low > jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024
13 avril 2008 à 20:43
Possible en effet...
Je test ça demain et je te tiens au courant :)

Encore merci.
0
jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460 > Low
13 avril 2008 à 20:55
et il faut aussi penser qu'une FK doit faire réference dans la table cible à une PK unique
0
Low > jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024
14 avril 2008 à 20:45
Hop la !
Ça marche impec, merci des conseils et de tes réponses :)

J'en profite pour te poser une autre question, vu que tu as l'air de t'y connaitre sous oracle :
- Est ce que tu sais comment faire une incrémentation automatique d'une clé primaire sur une table ?

Par exemple, sous access, ça se fait facilement sur les clés primaires...je sais pas si je t'explique bien, en gros :

Imaginons une table Activité :
IdActivité
NomActivité

Je n'aurais pas besoin de m'occuper de IdActivité, car celui ci serait incrémenter tout seul (de 0 à l'infini ...) et donc j'aurais juste à m'occuper de NomActivité. Est ce que tu vois ce que je veux faire ?

Merci d''avoir pris le temps de me lire !
0
jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460
14 avril 2008 à 20:54
c'est prévu aussi sous oracle :

Prenons l'exemple d'une table "Article" tout ce qu'il y a de plus classique : 
Une clé (PK) 
une référence
un libellé 
un prix 
La clé primaire est renseignée à l'aide d'une séquence. 

CREATE Table Article (
Id Number (10),
Refe VARCHAR2 (16),
Libe VARCHAR2 (64),
Prix NUMBER (12,2));

CREATE SEQUENCE Seq_Id_Article START WITH 1 INCREMENT BY 1;

INSERT INTO Article VALUES (Seq_Id_Article.NextVal, '001', 'Marteau',   7.46);
INSERT INTO Article VALUES (Seq_Id_Article.NextVal, '002', 'Tournevis', 3.83);
INSERT INTO Article VALUES (Seq_Id_Article.NextVal, '004', 'Lime',      5.09);

COMMIT;
 
exemple tiré d'une site qui fait référence et que tu devrais garder dans tes tablettes : https://oracle.developpez.com/cours/
0
Oui, en effet j'avais plus ou moins lu ça mais je pensais pas que ca pouvait être utile dans mon cas, je m'explique :
C'est une application access avec une BDD sous oracle avec un lien ODBC.

Du coup, le "Seq_xxxxxx.NextVal", je ne sais pas ou le mettre pour que dans les formulaires sous access, tout soit fait automatiquement... :/

Si tu as une idée, je suis preneur :)

A+
0
jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460 > Low
14 avril 2008 à 21:59
dans ton insert, le seq_xxx.nextval, c'est un champ fixe en "dur" comme si tu mettais 'ABC'

ou tu peux faire avant un select pour le récupérer dans une variable :
select seq_xxx.netval from sys.dual;
0
Low > jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024
14 avril 2008 à 22:04
Access, c'est spéicla, j'ai pas de insert si tu veux dans mon code VBA, donc impossible de le mettre en dur...
Je vais tenter un truc à base de select comme tu proposes :)
0
Low > jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024
14 avril 2008 à 22:23
Bon, il n'y a aucun moyen avec le select, enfin je sais pas comment expliquer mais c'est pas possible :D
Faut que je trouve une autre solution...
On ne peut pas mettre la séquence incrémenté dans le type de donnée, sur la table créé sous oracle ?
0
jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460 > Low
14 avril 2008 à 22:31
non je crois que le nextval n'est pas autorisé en default value sur une colonne du create table

et comme je ne connais pas du tout access je ne peux pas d'aider plus
0