Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/08/2005, 12h09   #1
Futur Membre du Club
 
Inscription : janvier 2004
Messages : 26
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 26
Points : 16
Points : 16
Envoyer un message via MSN à Vincent BONNAL
Par défaut [Firebird] Création de clé étrangère - FOREIGN KEY

Bonjour,

J'ai une petite question sans importance, mais qui me turlupine (sur FB 1.5). Je souhaite créer deux tables contenent les continents et les pays (rattachés aux continent).
J'ai donc créé ma table continent sans problème:
Code :
1
2
3
CREATE TABLE CONTINENT (
	CODE SMALLINT NOT NULL CONSTRAINT CT_PK_CONTINENT PRIMARY KEY, 
	NOM D_NOM );
Trop facile lol... En revanche, lorsque je souhaite crée ma table des pays j'ai un message d'erreur au niveau du mot FOREIGN avec ce code:
Code :
1
2
3
4
5
CREATE TABLE PAYS (	 
	CODE SMALLINT NOT NULL,
	CODE_CONTINENT SMALLINT NOT NULL CONSTRAINT CT_FK_CODECONTINENT FOREIGN KEY REFERENCES CONTINENT(CODE),
	NOM D_NOM,
	CONSTRAINT CT_PK_PAYS PRIMARY KEY (CODE,CODE_CONTINENT)	);
alors qu'avec celui là, ça passe parfaitement...
Code :
1
2
3
4
5
6
CREATE TABLE PAYS (	 
	CODE SMALLINT NOT NULL,
	CODE_CONTINENT SMALLINT NOT NULL,
	NOM D_NOM,
	CONSTRAINT CT_PK_PAYS PRIMARY KEY (CODE,CODE_CONTINENT)	);
ALTER TABLE PAYS ADD CONSTRAINT CT_FK_CODECONTINENT FOREIGN KEY (CODE_CONTINENT) REFERENCES CONTINENT(CODE);
Ma question est donc la suivante (je ne trouve pas ma réponse dans la référence SQL de FB...):

: Doit t'on sous FB impérativement crée les clés étrangères à l'extérieur de la déclaration de la table (comme le fait les métadata) ou à la suive de la déclaration des champs dans la déclaration même?
En gros, pourquoi ne peut-on pas faire la déclaration des clés étrangères comme je l'ai fais pour la clé primaire de ma table Continent?

Merci pour vos réponses.

NB: ma question exclue la problématique de la Turquie
Vincent BONNAL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2005, 12h52   #2
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Après une recherche rapide sur la partie SQL de ce site, j'ai trouvé cet article sur les clés étrangères (FK) qui semble indiquer que ta syntaxe est correcte mais si ça peut ta rassurer l'insertion donnée en exemple ne fonctionne pas chez moi, pas plus que la tienne

Cela dit je n'ai pas lu le document et il est peut être spécifié dans quel(s) cas / SGBDR cette syntaxe ne fonctionne pas ?
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2005, 15h19   #3
Futur Membre du Club
 
Inscription : janvier 2004
Messages : 26
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 26
Points : 16
Points : 16
Envoyer un message via MSN à Vincent BONNAL
Bon, je ne trouve pas là non plus ma réponse... donc en théorie, ça marche.. en pratique, c'est une autre question.

Ceci dit, ne nous traumatisons pas, y'a deux méthodes différentes qui fonctionnent, donc, c'est déjà bien
Vincent BONNAL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2005, 16h49   #4
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Je pensais que ça pouvait être dû au SGBD (on est tous les 2 sous IB) donc j'ai testé sous ORACLE :
Code :
1
2
3
4
5
CREATE TABLE PAYS (    
   CODE SMALLINT NOT NULL, 
   CODE_CONTINENT SMALLINT FOREIGN KEY REFERENCES CONTINENT(CODE), 
   NOM VARCHAR(30), 
   CONSTRAINT CT_PK_PAYS PRIMARY KEY (CODE,CODE_CONTINENT)   );
RESULTAT : pas mieux car j'ai alors le message d'erreur suivant :
CODE_CONTINENT SMALLINT FOREIGN KEY REFERENCES CONTINENT(CODE),
*
ERREUR à la ligne 3 :
ORA-00907: missing right parenthesis
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h58.


 
 
 
 
Partenaires

Hébergement Web