Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
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 26/12/2011, 19h33   #1
Invité régulier
 
Inscription : février 2009
Messages : 51
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : février 2009
Messages : 51
Points : 8
Points : 8
Envoyer un message via MSN à neeoo11
Par défaut PROBLEME FOREIGN KEY

Bonjour, je suis un débutant en language SQL, je m'y connais en théorique par contre la pratique je bloque voila mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
DROP TABLE FOURNISSEURS;
DROP TABLE PRIX;
DROP TABLE COMMANDES;
DROP TABLE CLIENTS;
 
CREATE TABLE FOURNISSEURS (
  Nomf VARCHAR(20) PRIMARY KEY,
  Adressf VARCHAR(40)
);
 
CREATE TABLE PRIX (
  Nomf VARCHAR(20) ,
  Nomp VARCHAR(20) ,
  Cout FLOAT NOT NULL ,
  PRIMARY KEY (Nomf,Nomp)
  -- CONSTRAINT fk_Nomf_Nomf FOREIGN KEY Nomf REFERENCES FOURNISSEURS(Nomf)
);
 
CREATE TABLE CLIENTS (
  IdC VARCHAR(20) PRIMARY KEY,
  Adrsc VARCHAR(20) ,
  Solde FLOAT
);
 
CREATE TABLE COMMANDES (
  Ncom SMALLINT PRIMARY KEY,
  Nomc VARCHAR(20) ,
  Nomp VARCHAR(20) ,
  Qte SMALLINT NOT NULL,
  CONSTRAINT fk_Nomc_IdC FOREIGN KEY Nomc REFERENCES CLIENTS(IdC)
);
Quand je compile ça avec Mysql, il me sort l'erreur suivante :
Citation:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REFERENCES CLIENTS(IdC)
)' at line 6
j'imagine que c'est une erreur de syntaxe mais j'arrive pas à la trouver !! aidez moi svp
neeoo11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 10h56   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
1) En principe, on écrit les noms des tables au singulier.
Un idC est l'identifiant d'un seul client, pas de plusieurs !
=> Change le nom des tables FOURNISSEUR, CLIENT, COMMANDE.

2) Une clé primaire basée sur une colonne signifiante en VARCHAR est une mauvaise clé.
=> Ajoute un identifiant anonyme de type entier et auto-incrémenté dans les tables FOURNISSEUR et CLIENT.

3) Les colonnes porteuses de clés étrangères doivent être indexées.
=> Ajoute un index sur les colonnes PRIX.NomP (ou plutôt idP quand tu auras changé la clé primaire de la table des produits) et COMMANDE.NomC (ou plutôt idC quand tu auras changé la clé primaire de la table des clients).

4) C'est la clé primaire qui doit servir de clé étrangère dans les autres tables.
=> Change les clés étrangères dans les tables PRIX et COMMANDE.

4) Il faut mettre le nom de la colonne portant la clé étrangère entre parenthèses.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement 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 18h50.


 
 
 
 
Partenaires

Hébergement Web