Tu ne précises pas le SGBD utilisé donc je pars du principe que c'est MySQL.
Normalement lorsque tu exécutes ta requête et qu'une erreur survient, le serveur te donne un mesage d'erreur qui est censé t'aider à résoudre le problème (on y va pas à l'aveugle, « vous voyez une erreur quelque part ? »).
En l'occurrence, en exécutant ton code sur un serveur MySQL, tu as l'erreur suivante :
```
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 'FOREIGN KEY REFERENCES utilisateur(id_user))' at line 5
```
Ta syntaxe est erronnée, et ça pine vers `FOREIGN KEY`. Soit, regardons le manuel de MySQL (adapte ça à ton SGBD si c'est pas MySQL, mais ça devrait être sensiblement pareil) : http://dev.mysql.com/doc/refman/5.1/en/create-table.html
On est dans la partie `column_definition`, et en effet ton code ne match pas la spécification ; il n'y a nulle part le mot clé `FOREIGN KEY` dans la définition d'une colonne.
En revanche tu as `reference_definition` qui peut être ajouté à la fin de la définition d'une colonne, ce qui est peut-être ce que tu voulais faire. En adaptant le code, on a alors :
```
CREATE TABLE discussion (
id_discussion INT PRIMARY KEY,
nom VARCHAR(50),
id_user INT REFERENCES utilisateur (id_user)
);
```
Ça marche, néanmoins même en ayant la table `utilisateur` de créée, aucune contrainte de clé n'est créée (du moins chez-moi).
Tu as donc la deuxième méthode qui consiste (toujours d'après la documentation) à définir la contrainte de clé après les colonnes, ce qui donne :
```
CREATE TABLE discussion (
id_discussion INT PRIMARY KEY,
nom VARCHAR(50),
id_user INT,
FOREIGN KEY (id_user) REFERENCES utilisateur (id_user)
);
```
Ce qui marche à merveille chez-moi (un `SHOW KEYS FROM discussion` révèle bien la clé étrangère contrairement à la version « inline » qui ignorait simplement la contrainte).
Au passage ton nommage manque de consistance (table en français mais colonnes en anglais).