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

PostgreSQL Discussion :

Newbie PgSQL->Probleme Creation de table avec FOREIGN KEY


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Newbie PgSQL->Probleme Creation de table avec FOREIGN KEY
    Voila je veux créer deux table : une ville et l'autre client et voila l'erreur ke j'obtiens :

    CREATE TABLE VILLE(
    projet(> IdCP INTEGER,
    projet(> CP VARCHAR(5),
    projet(> Departement VARCHAR(2),
    projet(> Pays VARCHAR(30),
    projet(> PRIMARY KEY(IdCP)
    projet(> );
    NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite «ville_pkey» pour la table «ville»
    CREATE TABLE
    projet=> CREATE TABLE Client(
    projet(> NoClient INTEGER,
    projet(> Nom VARCHAR(32),
    projet(> Prenom VARCHAR(32),
    projet(> TelPort VARCHAR(10),
    projet(> TelDomicile VARCHAR(10),
    projet(> TelBureau VARCHAR(10),
    projet(> DateNaissance Date,
    projet(> Login VARCHAR(32),
    projet(> Password VARCHAR(32),
    projet(> Civilite INTEGER,
    projet(> Adresse VARCHAR(200),
    projet(> Mail VARCHAR(100),
    projet(> Id_CP INTEGER,
    projet(> PRIMARY KEY(NoClient),
    projet(> FOREIGN KEY(IdCP) references Ville(IdCP)
    projet(> );
    NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite «client_pkey» pour la table «client»
    ERREUR: la colonne «idcp» référencée dans la contrainte de clé étrangère n'existe pas

    Je comprends pas parcque j'ai bien défini IdCP en PRIMARY KEY dans la table Ville...Et je ne comprends pas bien non plus le NOTICE lors de la création de la première table...

    Merci de votre aide !

  2. #2
    Membre averti

    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 338
    Points : 404
    Points
    404
    Par défaut
    Bonjour

    Vous avez écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOREIGN KEY(IdCP) references Ville(IdCP)
    Alors qu'il aurait fallu ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOREIGN KEY(Id_CP) references Ville(IdCP)
    Votre champ s'appelle id_CP et non idCP

    Ensuite le NOTICE indique qu'un index a été positionné automatiquement sur les champs de la clé primaire.
    Christophe Chauvet
    Consultant Odoo
    Python / PostgreSQL

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Gloups effectivement !
    Merci !

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 374
    Points : 1 403
    Points
    1 403
    Par défaut
    Je profite de ce sujet pour poser une question qui me turlupine: faut-il mettre un index sur les colonnes où on a déjà posé une contrainte de clef étrangère ?

    En gros faut-il mettre la clef étrangère ET l'index ou seulement la clef étrangère ?

    D'avance merci

  5. #5
    Membre actif
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Points : 220
    Points
    220
    Par défaut
    Salut Shepard,
    te kestion est difficile à cerné.peut être mon post est une réponse qui pourra t'aider à reformuler ta kestion!!!!!!
    les index se creent pour faciliter la recherche du sgbdr
    La plupart du temps lorsqu'on crée une contrainte de clef primaire, étrangère ou une contrainte d'unicité, le SGBDR implante automatiquement un index pour assurer la mécanisme de contrainte avec des performances correctes. de ce fait le tri par exple sur les colonn est très vite exécuté.
    un colonne s'il elle possede des contraintes aura toujours d'index.

    la succession d'évènement que nous subissons toute notre vie n'est qu'un phénomène de compensation dont la nature en est l'arbitre.[Inéluctabilité de la nature ] Polace

  6. #6
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    Citation Envoyé par Shepard
    Je profite de ce sujet pour poser une question qui me turlupine: faut-il mettre un index sur les colonnes où on a déjà posé une contrainte de clef étrangère ?
    Je ne vois aucune utilité à placer un index sur une clé étrangère, si ce n'est pour accélerer une requête dans laquelle le champ en question est utilisé dans une clause WHERE, mais ça n'a rien à voir avec la clé étrangère. Quant au champ de la table référencée par la clé étrangère (je ne me souviens plus de la dénomination SQL exacte de ce type de champ), il s'agit en principe d'une clé primaire donc il est implicitement indexé.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 374
    Points : 1 403
    Points
    1 403
    Par défaut
    Ouioui la clef primaire est implicitement indexée, ca je le sait, mais la doc de PostGreSQL reste assez obscure quant au cas des clefs étrangères, c'est pour ça que je me posais la question ^^

    Par exemple deux tables:

    pays
    • pays_id
    • pays_nom


    Villes
    • vill_id
    • pays_id <= Faut-il mettre un index supplémentaire ici en plus de la contrainte de clef étrangère ?
    • vill_nom



  8. #8
    Membre actif
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Points : 220
    Points
    220
    Par défaut
    pourkoi veux-tu mettre obsolument un index.lequel penses tu mettre ?
    sincerement je ne vois pas .
    la succession d'évènement que nous subissons toute notre vie n'est qu'un phénomène de compensation dont la nature en est l'arbitre.[Inéluctabilité de la nature ] Polace

  9. #9
    Membre averti

    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 338
    Points : 404
    Points
    404
    Par défaut
    Tu peux mettre un index seulement si lorsque tu veux rechercher toutes les ville appartenant au pays (pays_id dans la tables villes) et que tu trouve que c'est pas rapide.
    Christophe Chauvet
    Consultant Odoo
    Python / PostgreSQL

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 374
    Points : 1 403
    Points
    1 403
    Par défaut
    ok, donc ca peut servir à quelque chose quand même ( en fait ca servira presque toujours à ça: afficher ce que contient le conteneur ... grâce à une jointure évidemment )

    Merci pour la réponse et désolé pour mon manque de clarté

Discussions similaires

  1. [MySQL-5.5] probleme de creation de table avec foreign key
    Par wided22 dans le forum Requêtes
    Réponses: 1
    Dernier message: 19/04/2013, 16h47
  2. creation de tables avec foreign key
    Par fasyr dans le forum Débuter
    Réponses: 9
    Dernier message: 25/04/2009, 18h50
  3. Création d'une table avec foreign key.
    Par Paulinho dans le forum Débuter
    Réponses: 6
    Dernier message: 01/12/2005, 18h47
  4. [mysql]table avec foreign key
    Par samjung dans le forum Langage SQL
    Réponses: 24
    Dernier message: 24/11/2005, 14h42
  5. Création d'une table avec foreign key
    Par lepierre dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/09/2004, 14h20

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