Posez votre question Signaler

Clé étrangere sous oracle [Résolu]

Low - Dernière réponse le 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!!
Lire la suite 

Clé étrangere sous oracle »

16 réponses
Réponse
+0
moins plus
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
Low - 13 avril 2008 à 20:43
Possible en effet...
Je test ça demain et je te tiens au courant :)

Encore merci.
jee pee- 13 avril 2008 à 20:55
et il faut aussi penser qu'une FK doit faire réference dans la table cible à une PK unique
Low - 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 !
Ajouter un commentaire
Réponse
+0
moins plus
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 : http://oracle.developpez.com/cours/
Low - 15 avril 2008 à 14:09
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+
jee pee- 15 avril 2008 à 14:32
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 ?
Low - 15 avril 2008 à 15:05
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 ?
Ajouter un commentaire
Ce document intitulé « Clé étrangere sous oracle » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?