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

Langage SQL Discussion :

Entité faible SQL


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 25
    Points : 24
    Points
    24
    Par défaut Entité faible SQL
    Bonjour à tous, je souhaiterai avoir votre avis sur une requette sql concernant une entité faible

    Voici le mcd :

    Nom : Capture.PNG
Affichages : 598
Taille : 13,5 Ko

    Si je comprend bien configrando peut avoir plusieurs enregistrement avec le CodeRandonnee de la table FicheRandonnee ?
    Dans le mcd la table configrando à codeconfigrando qui est auto_incrément pourtant à la génération des tables l'auto_increment disparait,
    c'est a ce niveau que je suis perdu comment je doit faire pour que lorsque je fait un INSERT INTO dans configrando le CodeConfigRando s'auto incrémente.

    Actuellement lors d'un INSERT INTO dans configrando je rentre l'identifiant CodeRandonnee de ficherandonnee dans les champs `CodeRandonnee` et `CodeConfigRando` requette $sql2 plus bas

    Pourriez vous me dire si c'est la bonne methode.

    Voici le script pour la création des tables :

    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
    41
     
    #------------------------------------------------------------
    # Table: FicheRandonnee
    #------------------------------------------------------------
     
    CREATE TABLE FicheRandonnee(
            CodeRandonnee Int  Auto_increment  NOT NULL ,
            Distance      Decimal ,
            Denivele      Int ,
            Difficulte    Varchar (50) NOT NULL ,
            Lieu          Varchar (150) NOT NULL ,
            Latitude      Float NOT NULL ,
            Longitude     Float NOT NULL ,
            CodePostal    Char (5) NOT NULL ,
            Duree         Time ,
            AltMin        Int ,
            AltMax        Int ,
            CodeActivite  Int NOT NULL
    	,CONSTRAINT FicheRandonnee_PK PRIMARY KEY (CodeRandonnee)
     
    	,CONSTRAINT FicheRandonnee_Activiter_FK FOREIGN KEY (CodeActivite) REFERENCES Activiter(CodeActivite)
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: ConfigRando
    #------------------------------------------------------------
     
    CREATE TABLE ConfigRando(
            CodeRandonnee   Int NOT NULL ,
            CodeConfigRando Int NOT NULL ,
            NbrMaxi         Int NOT NULL ,
            Familliale      Bool NOT NULL ,
            Description     Varchar (255) NOT NULL ,
            RdvDepart       Varchar (150) NOT NULL ,
            NomRandonnee    Varchar (150) NOT NULL ,
            PhotoRandonnee  Varchar (150) NOT NULL
    	,CONSTRAINT ConfigRando_PK PRIMARY KEY (CodeRandonnee,CodeConfigRando)
     
    	,CONSTRAINT ConfigRando_FicheRandonnee_FK FOREIGN KEY (CodeRandonnee) REFERENCES FicheRandonnee(CodeRandonnee)
    )ENGINE=InnoDB;
    La requette que j'envoi pour l'insertion dans la table ficherandonnee :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $sql1 = "INSERT INTO ficherandonnee (`Distance`, `Denivele`, `Difficulte`, `Lieu`, `Latitude`, `Longitude`, `CodePostal`, `Duree`, `AltMin`, `AltMax`, `CodeActivite`) 
     
    VALUES ('".$valueClean['distance']."', '".$valueClean['denivele']."', '".$valueClean['var_niveau']."', '".$valueClean['lieu_rando']."', '".$valueClean['latitude']."', '".$valueClean['longitude']."', '".$valueClean['codePostal']."', '".$valueClean['duree']."', '".$valueClean['alt_min']."', '".$valueClean['alt_max']."', $id_activite)";
    et la requette pour l'insertion dans configrando :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    $sql2 = "INSERT INTO configrando (`CodeRandonnee`, `CodeConfigRando`, `NbrMaxi`, `Familliale`, `Description`, `RdvDepart`, `NomRandonnee`, `PhotoRandonnee`) 
    VALUES ('$codeRandonnee', '$codeRandonnee', '".$valueClean['nbr_participant']."', '".$valueClean['familiale']."', '".$valueClean['description_rando']."', '".$valueClean['RdvDepart']."', '".$valueClean['titre_rando']."', '".$valueClean['photo_Rando']."')";
    Je récupère $codeRandonnee après l'insertion dans ficherandonnee grace a une requette :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $row = "SELECT CodeRandonnee FROM pratiquer, activiter, ficherandonnee
    WHERE pratiquer.CodeActivite = activiter.CodeActivite
    and activiter.CodeActivite = ficherandonnee.CodeActivite
    and pratiquer.CodeUtilisateur =  '$this->id_utilisateur'
    and ficherandonnee.CodeActivite = '$id_activite'
    and ficherandonnee.Lieu = '$lieu'";

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    il faut

    -1- insérer dans la table issue de l'entité-type forte "FicheRandonnee"
    -2- récupérer la valeur de l'indentifiant ainsi créé grâce à la fonction LAST_INSERT_ID()
    -3- insérer ensuite dans la table issue d'entité-type faible "ConfigRando" en alimentant la colonne FK avec la valeur issue de LAST_INSERT_ID() et la colonne CodeConfigRando avec une variable dont la valeur vaut initialement 1 et qui est incrémentée à chaque insertion. Cette colonne CodeConfigRando ne sera pas de type auto_incrément, ça n'a aucun intérêt puisqu'il faut recommencer la numérotation à 1 à chaque nouvelle rando

    Note : c'est curieux de nommer les colonnes identifiants techniques en "code". Les codes sont des valeurs signifiantes (codes devises, codes pays, codes langues etc...) ce que ne sont pas les identifiants techniques

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 25
    Points : 24
    Points
    24
    Par défaut merci
    merci de votre réponse je débute en sql et merise j'ai bien compris votre démarche, j'ai quand même 2 questions
    j'avais déjà essayé avec LAST_INSERT_ID() mais je n'est pas réussi a l’insérer dans la requette, peut être que je me suis mal pris, comment vous ferriez pour l’insérer dans la requette.

    C'est bon j'ai reussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $codeRandonnee = ManagerBdd::getInstance()->connectBDD->insert_id;
    Par contre c'est pas dangereux si jamais deux personnes font une requettes au meme moment le resultat risque de ne pas etre le bon...

    la colonne CodeConfigRando avec une variable dont la valeur vaut initialement 1 et qui est incrémentée à chaque insertion... je comprend ce que vous voulez dire mais comment s'y prendre ... une fonction directement dans la table

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par best01 Voir le message
    Par contre c'est pas dangereux si jamais deux personnes font une requettes au meme moment le resultat risque de ne pas etre le bon...
    Non, fort heureusement, on récupère bien l'identifiant liée à l'insertion de votre thread, une application concurrente ne risque donc pas de récupérer par erreur la valeur liée à votre connexion

    Citation Envoyé par best01 Voir le message
    la colonne CodeConfigRando avec une variable dont la valeur vaut initialement 1 et qui est incrémentée à chaque insertion... je comprend ce que vous voulez dire mais comment s'y prendre ... une fonction directement dans la table
    Tout simplement, vous incrémentez le chrono à chaque insertion depuis l'application. Dans le cas où la rando existe déjà, il faut préalablement récupérer la valeur de la dernière ligne pour l'incrémenter.

Discussions similaires

  1. Access et entités faibles et spécifiques ?
    Par maph1 dans le forum Modélisation
    Réponses: 6
    Dernier message: 20/02/2008, 18h33
  2. PB! entité faible sous MySQL
    Par Bugger24 dans le forum Requêtes
    Réponses: 0
    Dernier message: 10/10/2007, 20h50
  3. entité faible en sql
    Par MeKesTudi dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/12/2005, 17h23
  4. Générer un identifiant relatif > l'entité faible en prati
    Par vmolines dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 19/08/2005, 15h59
  5. ENTITE FAIBLE
    Par Whismeril dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/01/2005, 22h53

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