[SQL] Problème de création de tables

Fermé
Le0n - 18 déc. 2006 à 20:14
 françois - 25 janv. 2007 à 12:23
Donc voici :

CREATE TABLE MEMBRE (
DateInscription date check (DateInscription <= CURRENT_DATE),
NomDiscussion char(40) NOT NULL,
NomStatut char(15) NOT NULL,
MotDePasse char(40) NOT NULL,
Htaccess char(40) NOT NULL,
Pseudo char(15) NOT NULL,
UNIQUE (Pseudo),
PRIMARY KEY (Pseudo, NomDiscussion, NomStatut),
FOREIGN KEY NomStatut REFERENCES STATUT(NomStatut),
FOREIGN KEY NomDiscussion REFERENCES DISCUSSION(NomDiscussion),
FOREIGN KEY NomDiscussion REFERENCES DONNEES(NomDiscussion),
FOREIGN KEY NomDiscussion REFERENCES STOCKAGE(NomDiscussion),
FOREIGN KEY Pseudo REFERENCES STATUT(Pseudo),
FOREIGN KEY Pseudo REFERENCES DISCUSSION(Pseudo) )



CREATE TABLE DISCUSSION (
Pseudo char(15) NOT NULL,
NomSection char(15) NOT NULL,
QuotaDiscussion integer check ( QuotaDiscussion >= 0),
NomDiscussion char(40) NOT NULL,
PRIMARY KEY (Pseudo, NomDiscussion, NomSection),
FOREIGN KEY NomSection REFERENCES STATUT(NomSection),
FOREIGN KEY NomDiscussion REFERENCES STOCKAGE(NomDiscussion),
FOREIGN KEY NomDiscussion REFERENCES MEMBRE(NomDiscussion),
FOREIGN KEY NomDiscussion REFERENCES DONNEES(NomDiscussion),
FOREIGN KEY Pseudo REFERENCES STATUT(Pseudo),
FOREIGN KEY Pseudo REFERENCES MEMBRE(Pseudo) )

CREATE TABLE STOCKAGE (
NomStcockage char(200) NOT NULL UNIQUE, check (NomStcockage LIKE "ftp://%"),
Type char(15) NOT NULL,
VitesseUp integer check ( VitesseUp > 40),
VitesseDl integer check ( VitesseDl > 100),
NbConnexions integer check ( NbConnexions > 0),
PlaceDD integer NOT check ( PlaceDD > 0),
Localisation char(15) check (Localisation <> RIPE NCC),
NomDiscussion char(40) NOT NULL,
PRIMARY KEY (NomStcockage, NomDiscussion),
FOREIGN KEY NomDiscussion REFERENCES DONNEES(NomDiscussion),
FOREIGN KEY NomDiscussion REFERENCES DISCUSSION(NomDiscussion),
FOREIGN KEY NomDiscussion REFERENCES MEMBRE(NomDiscussion) )



CREATE TABLE STATUT (
Pseudo char(15) NOT NULL,
NomStatut char(15) NOT NULL,
QuotaTotal integer check ( QuotaTotal >= QuotaCours)
QuotaMois integer check (QuotaMois >= 0),
QuotaCours integer check (QuotaMois >= 0),
NomSection char(15) NOT NULL,
UNIQUE (Pseudo),
PRIMARY KEY (Pseudo, NomStatut, NomSection),
FOREIGN KEY NomStatut REFERENCES MEMBRE(NomStatut),
FOREIGN KEY Pseudo REFERENCES DISCUSSION(Pseudo),
FOREIGN KEY Pseudo REFERENCES MEMBRE(Pseudo)
FOREIGN KEY NomSection REFERENCES DISCUSSION(NomSection) )




CREATE TABLE DONNEES (
Archivage char(40) NOT NULL,
Encodage char(40) NOT NULL,
TailleDonnee integer check ( TailleDonnee >= 0),
NomDiscussion char(40) NOT NULL,
NomDonnee char(40) NOT NULL,
TypeDonnee char(15) NOT NULL,
Langue char(40) NOT NULL,
PRIMARY KEY (NomDiscussion, NomDonnee),
FOREIGN KEY NomDiscussion REFERENCES STOCKAGE(NomDiscussion),
FOREIGN KEY NomDiscussion REFERENCES DISCUSSION(NomDiscussion),
FOREIGN KEY NomDiscussion REFERENCES MEMBRE(NomDiscussion) )


Voila ce que j'ai ecrit, mais ca marche pas vraiment, surement les clés primares / etrangeres qui deconnent, mais je sais pas (plus) pourquoi.

Merci de me filer un coup de main ;))

@+
A voir également:

3 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
19 déc. 2006 à 10:21
Bonjour,

Quelques questions, pour commencer...

1 - quel SGBD utilises-tu ?
2 - quel message d'erreur as-tu ?

Quand on aura ça, on pourra commencer à t'aider ;)

Xavier
0
Hello,

Tout d'abord, je te conseille de créer chaque table séparément. Comme ça si ça ne marche pas, tu as plus vite repéré l'erreur.

Ensuite, pour revenir à ta BD, plusieurs choses:

1° L'attribut CURRENT_DATE devrait être remplacé par CURDATE si tu utilises mysql.

2° Les noms des clés étrangères doivent être entre parenthèses

3°La contrainte CHECK devrait être placée à la fin, comme les définitions de clés.

4° l'attribut UNIQUE est inutile pour la clé primaire (la clé primaire est d'office unique, sans avoir besoin de le préciser)

5° Les contraintes doivent avoir un nom (par exemple CONSTRAINT nom_de_la_contrainte PRIMARY KEY (nom_de_l'attribut)

Ainsi, la 1ère table devient:

CREATE TABLE MEMBRE (
DateInscription date,
NomDiscussion char(40) NOT NULL,
NomStatut char(15) NOT NULL,
MotDePasse char(40) NOT NULL,
Htaccess char(40) NOT NULL,
Pseudo char(15) NOT NULL,
CONSTRAINT C1 PRIMARY KEY (Pseudo, NomDiscussion, NomStatut),
CONSTRAINT C2 FOREIGN KEY (NomStatut) REFERENCES STATUT(NomStatut),
CONSTRAINT C3 FOREIGN KEY (NomDiscussion) REFERENCES STATUT(NomDiscussion),
CONSTRAINT C4 FOREIGN KEY (NomDiscussion) REFERENCES DONNEES(NomDiscussion),
CONSTRAINT C5 FOREIGN KEY (NomDiscussion) REFERENCES STOCKAGE(NomDiscussion),
CONSTRAINT C6 FOREIGN KEY (Pseudo) REFERENCES STATUT(Pseudo),
CONSTRAINT C7 FOREIGN KEY (Pseudo) REFERENCES DISCUSSION(Pseudo))

Voilà, à toi de jouer pour le reste...


Maintenant, si je peux me permettre, et si tu peux l'éviter, je te déconseille une clé primaire à trois attributs. Deux sont en règle générale suffisantes (voir souvant une seule...)

Bonne chance
0
essaye de créér tes tables sans toute foi précisé la migration des clés. Mais rassure toi que les types et tailles des clés étrangère sont respectés.
0