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 :

[Débutant] au risque d'être ridicule + foreign Key


Sujet :

Langage SQL

  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut [Débutant] au risque d'être ridicule + foreign Key
    Bonjour,

    Je ne comprend pas bien le principe du foreign key, si j'ai les tables suivantes.

    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
    CREATE TABLE nom (idnom serial NOT NULL, nom varchar, prenom varchar);
     
     
     
    CREATE TABLE adresse (idadresse serial NOT NULL, rue text, commune text, idnom int);
     
     
     
    ALTER TABLE nom ADD CONSTRAINT PK_nom PRIMARY KEY (idnom);
     
     
     
    ALTER TABLE adresse ADD CONSTRAINT PK_adresse PRIMARY KEY (idadresse);
     
     
     
    ALTER TABLE adresse ADD CONSTRAINT FK_adresse_idnom FOREIGN KEY (idnom) REFERENCES nom (idnom);
    quand je rempli les table, je voudrais savoir comment remplir cette foreign key pour qu'elle fasse référence a la table nom .

    ou si vosu avez un tuto qui explique clairement cela, je vous en serais reconnaissant merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 759
    Points : 52 538
    Points
    52 538
    Billets dans le blog
    5
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 83
    Points
    83
    Par défaut
    Hello,
    En faite, ta table adresse dépend de ta table nom.
    Tu ne peux pas remplir ta table adresse, s'il n'existe pas un nom dans la table nom :

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    insert into nom (idnom , nom, prenom) values (1,'Hugo','Victor')
     
    insert into adresse (idadresse,rue,commune,idnom) values (1,'rue des tournesols','Paris',1)
    Ici, dans l'insertion d'une adresse, le 1 de idnom fait référence au 1 de la table nom.
    Si tu n'avais pas rempli ta table nom avant d'insérer ta ligne pour la table adresse, il y aurait eu une erreur d'intégrité référentielle, car pour le sgbd, il ne voit pas de lien existant et il ne sait pas ce que 1 veut dire.

    Tu as du remarquer que dans les insert, j'ai mis le nom des colonnes. Cela est très important, car si tu ne les mets pas et que tu rajoutes une colonne en not null , tous tes inserts ne sont plus bons.
    De plus , en faisant cela, tu n'est pas contraint de l'ordre de tes colonnes dans ta table.

    Allez bon courage



  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Merci pour les liens, mais je les avais déja lus et cela ne m'aide pas beaucoup, ou plutôt si.

    Mais voila avec vos deux exemples j'ai bien compris que la foreign key doit faire référence au "idnom" de la table "nom"

    Je voudrais savoir si je peux faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into nom (idnom , nom, prenom) values (1,'Hugo','Victor')
     
    insert into adresse (idadresse,rue,commune,idnom) values (1,'rue des tournesols','Paris',nom.idnom)
    Plusieurs utilsateurs vont devoir remplir un formulaire et il faut que la foreign key se remplisse automatiquement en fonction de l'insertion de la table 'nom'.

    Je ne sais pas si je suis clair??

    merci de votre aide.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 83
    Points
    83
    Par défaut
    Quel est ton SGBDR ?
    Tu fais cela avec quel langage de haut niveau pour la saisi de ton formulaire ?
    Pour la syntaxe ce n'est pas ca.
    Dis nous en plus stp

    Merci


  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Citation Envoyé par romano21
    Quel est ton SGBDR ?

    Tu fais cela avec quel langage de haut niveau pour la saisi de ton formulaire ?
    PostGresql
    Php



    En fait j'ai un formulaire sur plusieurs pages, avec +/- une centaines de données à insérer dans postgres, que j'ai divisé en 15 tables, mon problème est sur les updates et insert.

    Il faut savoir que l'encodage des données se fais simultanément par plusieurs utilisateurs.

    Merci

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 83
    Points
    83
    Par défaut
    tu ouvre une connection avec pg_connect(chaine host,chaine port,chaine base de données) puis quand tu insères tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //tu récupère dans ton formulaire le nom de la personne via une variable $nom puis tu fais
     
    $Connection = pg_connect(....);
    $slq = "insert into adresse (idadresse,rue,commune,idnom) values (1,'rue des tournesols','Paris','$nom')";
    $Result = pg_exec($Connection,$sql);
    pg_close($Connection);
    Voili voilou, je ne sais pas si c etait ca que tu voulais



  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Presque, ce n'est pas le nom que je met dans ma foreign key c'est le "idnom", mais j'imagine que si je fais ceci c'est bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql = "Select idnom from nom where nom = $_POST[Keyword]"
    $result = pg_query($sql)
     
    $sql2= "Insert Into adresse (idadresse,rue,commune,idnom) values (1,'rue des tournesols','Paris','$result')";
    $result2 = pg_query($sql2);
    Merci de ton aide

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 83
    Points
    83
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "Select idnom from nom where nom = $_POST[Keyword]";
    Perso, ca doit pas marcher car nom est une chaine de caractère et ca serait plutot '$_POST[keyword]' entre cote simple.
    Ciao


  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Merci, je fais mes essais, et je vous tiens au courrant, mais je marque quand même résolu.

    Merci de votre attention et de l'aide


    MaitrePylos

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

Discussions similaires

  1. Jointure avec Foreign Key pouvant être null
    Par neo932rcl dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/03/2011, 16h16
  2. [Débutant] Hibernate + Foreign key
    Par g.greg45 dans le forum Hibernate
    Réponses: 6
    Dernier message: 07/02/2007, 14h15
  3. Une Foreign Key peut-elle être null ?
    Par bassim dans le forum Firebird
    Réponses: 9
    Dernier message: 21/11/2006, 20h20
  4. [débutant] Aide pour mettre une FOREIGN KEY sur une table
    Par cauldron dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/11/2004, 17h16
  5. [Foreign Key] Besoin d'explication.
    Par Andry dans le forum Débuter
    Réponses: 4
    Dernier message: 28/05/2003, 11h34

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