Forum Clubic

2 Clés étrangères sur une table

bonjour je dois réalisé une base de données j’ai une table qui relie deux autre tables donc elle contient deux clés étrangère voici mon code je travaille sous sql server les deux premières tables marche j’ai juste un problème avec la troisième je sais pas comment faire références au deux autres tables. et j’ai aussi un souci avec la contrainte de la valeur note qui doit etre comprise entre 0et 20 avec une valeur par défaut de 0 merci de votre aide

go
create table etudiant
(mat char (10)primary key,
nom char (20)not null,
prénom char (20),
datenaiss datetime,
unique (nom,prénom))

go
create table cours
(ccode char(10) primary key,
cnom char(20),
enseignant char(20),
dimplome char(10))

go
create table examen
(ccode char (10),
mat char (10),
note int default 0 check (value between 0 and 20),
edate datetime,
primary key (ccode,mat)),
INDEX (mat),
FOREIGN KEY (mat),
REFERENCES etudiant(mat),
INDEX (ccode),
FOREIGN KEY (ccode),
REFERENCES examen(ccode)
)

C’est quoi le souci exactement?

Via l’outil graphique de SQL Server, tu peux les faire facilement ces références, sinon?

C’est à l’insertion que ça merde?

le souci c’est qu’il y a uen erreur au niveau
note int default 0 check (value between 0 and 20),

et pour index il me demande de mettre with je comprend pas ce qu 'il faut faire au juste

le but est de créer la table examen qui contient deux clés étrangère une de la table étudiant et l’autre de la table cours merci

Je pense que tu donne toi même la réponse dans ta question :


create table INDEX(
mat char (10),ccode char (10),
FOREIGN KEY (mat),
REFERENCES etudiant(mat),
FOREIGN KEY (ccode),
REFERENCES examen(ccode))

Essaie ça :slight_smile:

voici l’erreur que je reçoit en exécutant ton code

Msg 1018, Niveau 15, État 1, Ligne 1
Syntaxe incorrecte vers ‘INDEX’. Si cette syntaxe fait partie d’un indicateur de table, un mot clé WITH et des parenthèses sont requis. Reportez-vous à la documentation en ligne de SQL Server pour connaître la syntaxe correcte.

note int default 0 check (value between 0 and 20),

ça ne devrait pas être note?

Sinon lit la doc sur Transact SQL et les clef étrangères.

INDEX doit être un nom “réservé”, essaie avec un autre nom