Clé étrangere sous oracle [Résolu/Fermé]

Signaler
-
 Low -
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!!

2 réponses

Messages postés
32528
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juillet 2021
7 829
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
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.
Messages postés
32528
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juillet 2021
7 829 > Low
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)
>
Messages postés
32528
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juillet 2021

Possible en effet...
Je test ça demain et je te tiens au courant :)

Encore merci.
Messages postés
32528
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juillet 2021
7 829 > Low
et il faut aussi penser qu'une FK doit faire réference dans la table cible à une PK unique
>
Messages postés
32528
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juillet 2021

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 !
Messages postés
32528
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juillet 2021
7 829
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/
Messages postés
32528
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juillet 2021
7 829 > Low
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
>
Messages postés
32528
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juillet 2021

Ok, ce n'est pas grave, tu m'as déjà beaucoup aidé :)
Encore merci !

A+
Au cas ou tu serais pas loin ...
J'ai une question (la dernière je pense, je touche à la fin de mon projet ^^) :

Table Enfant
IdEnfant (clé primaire)
NomEnfant
etc...

Table Appartient
IdEnfant (clé primaire)
IdGroupe (clé primaire)


Table Groupe
IdGroupe (clé primaire)
IntituléGroupe
...

Quand j'essaye de mettre IdGroupe en clé étrangère faisant référence à IdGroupe de Appartient, il me sort :
Pas de correspondance de clé primaire ou unique pour cette liste de colonne.

As tu une idée ?
Si je veux faire ca, c'est parce que je veux mettre "On Delete Casacade" sur cette clé étrangère car quand je supprime un groupe, ce dernier n'est pas supprimé dans Appartient.

Peut être il y a aussi une autre solution, je suis preneur :)

Merci encore et A+
Messages postés
32528
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juillet 2021
7 829 > Low
c'est dans Appartient qu'il faut une FK sur idgroupe de la table Groupe

dans ce que je comprends tu as fait l'inverse non ?
>
Messages postés
32528
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
25 juillet 2021

Cool, ça marche impec, et avec le ON DELETE CASCADE aussi ... :D

Pourquoi c'était l'inverse au final ? j'ai pas très bien compris pourquoi dans mon sens, cela ne pouvait pas marcher ?