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 24/01/2012, 22h18   #1
Invité de passage
 
Steve Alex ondoua
Inscription : juin 2010
Messages : 4
Détails du profil
Informations personnelles :
Nom : Steve Alex ondoua

Informations forums :
Inscription : juin 2010
Messages : 4
Points : 3
Points : 3
Par défaut Les contraintes

Bonjour je suis en train d'apprendre le php et pr moi ya pas plus efficace de se donner un objectif alors j'ai décidé de créer une application web pour la gestion d'un établissement et lors de l'analyse, en concevant ma bd grâce à JMerise que j'ai gracieusement trouvé sur ce site et qui est encore en développement, merci d’ailleurs à son auteur, j'ai deux tables:
utilisateurs et messages. entendu qu'un utilisateur du programme peut envoyer un message à un autres.
JMerise m'a généré le script sql suivant:

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
32
33
34
35
36
37
38
39
40
DROP TABLE IF EXISTS Utilisateurs;
CREATE TABLE Utilisateurs(
        id_utilisateur     AUTO_INCREMENT (6),
        Nom     Varchar (25),
        Prenom     Varchar (25),
        Matricule     Varchar (15),
        Pseudo     Varchar (20),
        Mdp     Varchar (100),
        Type_compte     Varchar (15),
        Date_inscription     TimeStamp (25),
        Etat     Varchar (6),
        Date_last_connection     Date (10),
        pourcentage_devenir2     Float (25),
        Numero_prof_Proffesseurs     AUTO_INCREMENT (3),
        id_inscription_Inscriptions     AUTO_INCREMENT (5),
        Numero_photo_Photos     AUTO_INCREMENT (6),
        PRIMARY KEY (id_utilisateur)
)ENGINE=InnoDB;
 
 
 
DROP TABLE IF EXISTS Messages;
CREATE TABLE Messages(
        id_message     AUTO_INCREMENT (6),
        id_utilisateur     Int (6),
        Titre_msg_emi     Text (100),
        Contenu_msg_emi     Text (300),
        Pj_emise     Varchar (50),
        Date_emmission     Date (10,2),
        Titre_msg_rcu     Text (100,2),
        Contenu_msg_rcu     Text (300),
        Pj_rcu     Varchar (50),
        Date_recption     Date (10),
        pseudo_emetteur     Varchar (25),
        Qte_Envoyer     Int (3),
        id_utilisateur_Utilisateurs     AUTO_INCREMENT (6),
        PRIMARY KEY (id_message)
)ENGINE=InnoDB;
 
ALTER TABLE Messages ADD CONSTRAINT () AUTO_INCREMENT FK_Messages_id_utilisateur_Utilisateurs FOREIGN KEY (id_utilisateur_Utilisateurs) REFERENCES Utilisateurs(id_utilisateur)
déjà pour ma part je constate que le logiciel génère des erreurs mais mon intérêt se trouve sur la contrainte: à ce niveau "ADD CONSTRAINT () AUTO_INCREMENT FK_Messages_id_utilisateur_Utilisateurs FOREIGN KEY "
je ne sais vraiment pas ce que ça veut dire et j'ai s'il vous plait besoin d’éclaircissement. merci à ceux qui voudrons bien m'aider.
stealon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 10h19   #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 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Il y a effectivement des erreurs !
1) AUTO_INCREMENT n'est pas un type de colonne mais une opération de séquençage ajouté à une colonne de type entier (généralement INT ou INTEGER).
Et il ne peut y avoir qu'un seul AUTO_INCREMENT par table.

2) TIMESTAMP se suffit à lui-même, il n'y a rien à préciser entre parenthèses.
MySQL étant très permissif, il accepterait peut-être la syntaxe mais elle ne veut rien dire !

3) Idem pour le type DATE
A fortiori un DATE(10,2) !

Voilà ce que tu devrais avoir avec ta structure :
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
32
33
34
35
36
37
38
39
40
DROP TABLE IF EXISTS Utilisateurs;
CREATE TABLE Utilisateurs(
        id_utilisateur  INTEGER NOT NULL AUTO_INCREMENT,
        Nom     Varchar (25),
        Prenom     Varchar (25),
        Matricule     Varchar (15),
        Pseudo     Varchar (20),
        Mdp     Varchar (100),
        Type_compte     Varchar (15),
        Date_inscription     TimeStamp,
        Etat     Varchar (6),
        Date_last_connection     Date,
        pourcentage_devenir2     Float (25), -- ici il manque le nombre de chiffres après la virgule
        Numero_prof_Proffesseurs   INTEGER,
        id_inscription_Inscriptions  INTEGER,
        Numero_photo_Photos  INTEGER,
        PRIMARY KEY (id_utilisateur)
)ENGINE=InnoDB;
 
 
 
DROP TABLE IF EXISTS Messages;
CREATE TABLE Messages(
        id_message   INTEGER NOT NULL AUTO_INCREMENT,
        id_utilisateur  INTEGER,
        Titre_msg_emi     Text (100),
        Contenu_msg_emi     Text (300),
        Pj_emise     Varchar (50),
        Date_emmission     Date,
        Titre_msg_rcu     Text (100),
        Contenu_msg_rcu     Text (300),
        Pj_rcu     Varchar (50),
        Date_recption     Date,
        pseudo_emetteur     Varchar (25),
        Qte_Envoyer     INTEGER,
        id_utilisateur_Utilisateurs INTEGER,
        PRIMARY KEY (id_message)
)ENGINE=InnoDB;
 
ALTER TABLE Messages ADD CONSTRAINT (FK_Messages_id_utilisateur_Utilisateurs) FOREIGN KEY (id_utilisateur_Utilisateurs) REFERENCES Utilisateurs(id_utilisateur)
Mais on peut aussi discuter du choix de ta structure...
4) Un mot de passe en VARCHAR(100) ?
Jamais il ne me viendrait l'idée d'inventer un mot de passe aussi long !

5) Le type de compte devrait être externalisé dans une table de référence.
Utilisateur -1,1----avoir----0,n- type_compte

type_compte (tcp_id, tcp_libelle)
utilisateur (id_utilisateur, id_type_compte...)

Idem pour Etat.

6) Pourquoi y a t-il id_inscription_Inscriptions dans Utilisateurs ?
Il semble déjà que ce devrait être une clé étrangère mais puisque la date d'inscription figure dans la table Utilisateurs, n'y a t-il pas redondance de données ?
Quelles autres propriétés contient la table Inscriptions ?

7) Au passage, tu devrais nommer les tables au singulier.
id_inscription_Inscriptions est l'identifiant d'une seule inscription, pas de plusieurs ; du moins j'espère !

8) Pourquoi y at-il dans Messages une distinction entre ce qui est émis et ce qui est reçu ?
Pourquoi y a t-il le pseudo de l'émetteur alors qu'il y a l'id_utilisateur ?

Tu devrais avoir l'id_utilisateur_emetteur et l'id_utilisateur_destinataire.

9) Que représente la quantité envoyée pour un message ?

Bref, je pense que tu devrais vérifier ton modèle de données, en le soumettant dans le forum Schéma.

Profites-en aussi pour remonter les problèmes de syntaxe à l'auteur de JMerise. Il appréciera ton aide dans l'amélioration de son outil.
__________________
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 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 23h56.


 
 
 
 
Partenaires

Hébergement Web