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

Développement SQL Server Discussion :

Requête insert into et les clés étrangères


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut Requête insert into et les clés étrangères
    Bonjour,

    ça fait quelques jours que je débute avec MS sql-server2008. et je commence à avoir des problemes. En effet, j'essaye d'implementer un exemple simple dont voici le MCD:

    [ville]---0,1---(est capitale de)----1,1----[pays]
    [ville]---1,1---(fait partie de)------1,n----[pays]
    -un pays a une seule capitale et une ville est soit une capitale soit non.
    -un pays a plusieurs villes, une ville appartient a un seul pays.
    avec:
    ville(IDv,nomVille)
    pays(IDp,nomPays)
    en passant au relationel on aura:
    ville(IDv,nomVille,#IDp)
    pays(IDp,nomPays,#IDv)

    j'ai créé la petite bdd sous sql, j'ai mis les relations entre les tables. Mais quand j'essaye de "remplir" les tables avec la requette suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO ville
    VALUES (13,'merseillle',15)
    il m'affiche le message d'erreur suivant:
    "Msg 547, Niveau 16, État 0, Ligne 1
    The INSERT statement conflicted with the FOREIGN KEY constraint "FK_ville_pays". The conflict occurred in database "poire", table "dbo.pays", column 'idP'."

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Je pense comprendre ton problème (référence circulaire), mais ton exemple m'interpelle :

    Tu veux inserer la ville de Marseille (merseille ?) dans la table Ville, rattachée au pays ayant l'ID 15. Je suppose donc que ta table Pays est déjà peuplée avec la France, ID=15 ? (en fait, c'est pour insérer la France, que tu aurais dû avoir un problème, tant que Paris n'existe pas dans la table des villes, et pour insérer Paris dans la table des Villes, tant que La France n'existe pas dans la table des pays...)

    Donc :
    As-tu dans ta table "Pays" une ligne avec un ID=15 ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    Marseille oui désolé
    Vous avez compris mon problème! mais maintenant la bdd est vide ...! même si je commence par insérer France dans pays, j'ai le même problème vu que (comme vs avez mentionné) paris n'existe pas dans ville .....

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    Je voit pas le problème, sauf que vous devez "ouvrir" la cardinalité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE pays
    (IDp       INT PRIMARY KEY,
    nomPays    VARCHAR(64) NOT NULL,
    IDv        INT)
    GO
     
    CREATE TABLE ville
    (IDv       INT PRIMARY KEY,
     nomVille  VARCHAR(32) NOT NULL,
     IDp       INT NOT NULL 
               FOREIGN KEY REFERENCES pays(IDp));
     GO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO pays VALUES (1, 'France', NULL);
    INSERT INTO ville VALUES (111, 'Paris', 1);
    UPDATE pays SET IDv = 111 WHERE IDp = 1;
    A +
    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/ * * * * *

  5. #5
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    A partir du moment où une ville n'appartient qu'à un pays, pourquoi ne pas changer la structure des tables ville en ajoutant une colonne "estcapitale bit default(0)" à ville et enlevant la relation le fk de pays sur ville?
    On me dira pourquoi ne pas mettre le tout dans une seule table?

  6. #6
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    On me dira pourquoi ne pas mettre le tout dans une seule table?
    Mais encore?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    Citation Envoyé par alassanediakite Voir le message
    Salut
    A partir du moment où une ville n'appartient qu'à un pays, pourquoi ne pas changer la structure des tables ville en ajoutant une colonne "estcapitale bit default(0)" à ville et enlevant la relation le fk de pays sur ville?
    On me dira pourquoi ne pas mettre le tout dans une seule table?
    merci, je pense que je vais opter pr cette solution.

    merci aux autres réponses ^^

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/07/2007, 11h48
  2. probléme avec insert into et les jontures
    Par belakhdarbts10 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/05/2007, 11h35
  3. Requête INSERT INTO SELECT
    Par unix27 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/02/2007, 00h36
  4. Réponses: 3
    Dernier message: 05/03/2006, 23h38
  5. Lister toutes les clés étrangères de toutes le tables
    Par Samish dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2005, 10h15

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