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

PHP & Base de données Discussion :

renseigner une clé étrangère vers aucun enregistrement [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut renseigner une clé étrangère vers aucun enregistrement
    Bonjour,

    j'ai la structure de bdd suivante :

    Nom : app.png
Affichages : 83
Taille : 12,2 Ko

    donc 2 entités qui donnent 2 classes SQL :

    Code sql : 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
    CREATE TABLE PL_platform(
       PL_ident INT UNSIGNED  AUTO_INCREMENT,
       PL_platform VARCHAR(30) NOT NULL,
       PL_platformowner VARCHAR(30) NOT NULL,
       PL_publisher VARCHAR(30),
       PRIMARY KEY(PL_ident),
       UNIQUE(PL_platform)
    );
     
    CREATE TABLE AP_application(
       AP_ident INT UNSIGNED AUTO_INCREMENT,
       AP_application_name VARCHAR(30) NOT NULL,
       AP_product_name VARCHAR(30) NOT NULL,
       PL_ident INT UNSIGNED,
       PRIMARY KEY(AP_ident),
       UNIQUE(AP_application_name),
       UNIQUE(AP_product_name),
       FOREIGN KEY(PL_ident) REFERENCES PL_platform(PL_ident)
    );
    Les règles de gestion sont :
    R001 : une application appartient à 0 ou 1 plateforme
    R002 : une plateforme contient 0 à N applications
    R003 : une application possède 2 noms (application_name et product_name (une table de correspondance est prévue)).

    Dans certains cas, la plateforme à laquelle appartient l'application est connue donc là aucun souci pour renseigner la colonne PL_ident, mais dans d'autres cas, elle est inconnue. Dans ce cas, que faire ? Est-ce que je crée dans la table PL_platform un enregistrement "inconnu" ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 221
    Points : 15 512
    Points
    15 512
    Par défaut
    vous pouvez par exemple mettre NULL comme valeur dans PL_ident.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    Merci pour la réponse.

    NULL dans une clé étrangère, c'est possible ? Je croyais qu'il fallait pas (d'où l'idée de l'enregistrement "inconnu")
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    J'ai fait un test et c'est bon...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 043
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 043
    Points : 8 075
    Points
    8 075
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    NULL dans une clé étrangère, c'est possible ? Je croyais qu'il fallait pas (d'où l'idée de l'enregistrement "inconnu")
    Oui on peut utiliser NULL en tant que valeur de clef étrangère.
    L'enregistrement "Inconnu" permet, par exemple, de faciliter l'écriture des requêtes en n'ayant pas à jongler entre les INNER JOIN et les OUTER JOIN.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Séb. Voir le message
    en n'ayant pas à jongler entre les INNER JOIN et les OUTER JOIN.
    Tu peux préciser ? Je suppose que si on a NULL dans la colonne de la clé étrangère, alors il faut faire une jointure externe. On peut aussi faire ce que je viens de faire pour mon test :

    Code php : 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
    $SQL = "SELECT PL_ident FROM ap_application WHERE AP_application_name='appli4'";
    $PL_ident = $ppp->select($SQL)[0]['PL_ident'];
    if ( $PL_ident !=  NULL )
    {
       $sql = <<<SQL
    SELECT AP.AP_application_name,AP.AP_product_name, PL.PL_ident FROM ap_application AS AP
    INNER JOIN PL_platform AS PL ON PL.PL_ident = AP.PL_ident
    WHERE AP_application_name='appli4'
    SQL;
     
    }
     
    else
    {
       $sql = <<<SQL
    SELECT AP.AP_application_name,AP.AP_product_name FROM ap_application AS AP
    WHERE AP_application_name='appli4'
    SQL;
    }
    $appli1= $ppp->select($sql)[0];
    $appli = $appli1['AP_application_name'];
    $PL_ident =  $appli1['PL_ident']??NULL;
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/03/2018, 17h49
  2. Copier des enregistrement d'une base Acces vers une base HF
    Par reitsab dans le forum HyperFileSQL
    Réponses: 14
    Dernier message: 12/03/2014, 15h35
  3. [1.x] enregistrer une clé étrangère
    Par Ontolingua dans le forum Symfony
    Réponses: 1
    Dernier message: 01/09/2010, 18h45
  4. enregistrer une impression quickreport vers un fichier *.apf
    Par Poisson Rouge dans le forum Composants VCL
    Réponses: 1
    Dernier message: 07/11/2009, 16h05
  5. Comment vérifier qu'une table ne contient aucun enregistrement ?
    Par makaphrodite dans le forum Bases de données
    Réponses: 5
    Dernier message: 13/10/2008, 15h50

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