IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

Les contraintes


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 16 818
    Billets dans le blog
    14
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

Discussions similaires

  1. Desactiver temporairement les contraintes
    Par maitrebn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/10/2006, 17h58
  2. connaitre les contraintes d'une table??
    Par sali dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/11/2004, 11h46
  3. désactiver les contraintes
    Par romainw dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 15/07/2004, 10h46
  4. Question sur les contraintes d'intégrités
    Par eGGyyS dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 27/04/2004, 13h51
  5. Les contraintes OCL
    Par bart64 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 19/12/2003, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo