1. #1
    Membre régulier
    Profil pro
    Inscrit en
    septembre 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : septembre 2009
    Messages : 205
    Points : 88
    Points
    88

    Par défaut Clef étrangère dans une table intermédiaire

    Bonsoir,
    Je suis confronté à un petit soucis dans un dernier exercice, j'ai en fait 3 tables:

    1er table s'intitule Film avec 4 colonnes


    2ème table se nomme Acteur avec 5 colonnes


    3ème table s'appelle CoAuteur avec 1 colonne
    Elle regroupe le CodeF de la table Film , dans l'énoncé c'est écrit que c'est l'identifiant du film


    Je vais maintenant dans la vue relationnelle de la table coauteur pour relier la table film à la table coauteur.

    Et là ça ne fonctionne pas...
    Avez-vous une idée ?

    Voici déjà un petit aperçu de mes tables/relations

  2. #2
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    3 449
    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 : 3 449
    Points : 7 691
    Points
    7 691
    Billets dans le blog
    1

    Par défaut

    Dans la table film, la colonne CodeF est de type char(6) et dans la table coauteur elle est de type integer, c'est incohérent

    De plus
    - cette table coauteur porte un nom sans rapport avec son contenu puisqu'elle ne contient pas d'information sur l'auteur mais seulement un identifiant (de type erroné) du film
    - cette table coauteur n'a aucun intérêt en l'état, je suppose que le but était de faire le lien entre acteur et film, auquel cas il faut a minima que cette table contienne l'identifiant du film, c'est à dire CodeF de type char(6) et l'identifiant de l'acteur, soit la colonne IdentA de type integer. Si c'est bien la vocation de cette table, choisissez lui un nom ad'hoc, par exemple "TR_acteur_film" (comme table de relation acteur film)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    septembre 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : septembre 2009
    Messages : 205
    Points : 88
    Points
    88

    Par défaut

    Bonsoir Escartefigue,

    Merci pour votre aide

    Citation Envoyé par escartefigue Voir le message
    De plus
    - cette table coauteur porte un nom sans rapport avec son contenu puisqu'elle ne contient pas d'information sur l'auteur mais seulement un identifiant (de type erroné) du film
    Elle devrait plutôt s'appeler collaborateur (je modifie toute de suite)

    Citation Envoyé par escartefigue Voir le message
    Dans la table film, la colonne CodeF est de type char(6) et dans la table coauteur elle est de type integer, c'est incohérent
    Ok, donc j'ai modifié le type du CodeF de la table collaborateur en type char.

    Malgré cela, ça ne fonctionne toujours pas... J'ai été dans la table collaborateur => vue relationnelle

    Mais ça ne va toujours pas...
    "#1215 - Impossible d'ajouter des contraintes d'index externe"
    Je comprends pas ce qui cloche ???

    Citation Envoyé par escartefigue Voir le message
    - cette table coauteur n'a aucun intérêt en l'état, je suppose que le but était de faire le lien entre acteur et film, auquel cas il faut a minima que cette table contienne l'identifiant du film, c'est à dire CodeF de type char(6) et l'identifiant de l'acteur, soit la colonne IdentA de type integer. Si c'est bien la vocation de cette table, choisissez lui un nom ad'hoc, par exemple "TR_acteur_film" (comme table de relation acteur film)
    Non, j'ai vraiment besoin de cette table car je dois créer un système CRUD après pour la table Film et Collaborateur.

    Merci pour votre aide

  4. #4
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    15 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 15 488
    Points : 30 216
    Points
    30 216
    Billets dans le blog
    4

    Par défaut

    Sémantiquement, votre structure est incompréhensible !

    Vous avez une table "film" qui contiendra donc des informations sur les films.
    1) Plutôt que CodeF, choisissez plutôt IdentF comme clé primaire et, si ce n'est pas déjà fait, faites-en une colonne autoincrémentée.

    2) 50 caractères pour un titre de film, ce n'est peut-être pas assez.

    Ensuite, vous nous présentez une table "acteur" qui contiendra donc des informations sur les acteurs.
    3) Là, contre, 50 caractères pour le sexe, c'est largement surdimensionné ! Pour le prénom aussi, peut-être.

    Puis vous nous présentez une table "coauteur". Ce terme semble vouloir dire que vous souhaitez y stocker les informations sur les auteurs des films. Réalisateurs ? Scénaristes ? Rien que le terme auteur est imprécis pour un film.
    En tout cas, il n'y a sémantiquement pas de rapport entre les acteurs et les auteurs, même si un acteur peut parfois être également scénariste et/ou réalisateur d'un film, comme ce fut le cas souvent de Charlie Chaplin, par exemple. Donc, pourquoi vouloir établir une relation entre les trois tables ? Est-ce le nom de votre table coauteur qui est inapproprié ?

    Dans l'image suivante, vous nous présentez une autre table indépendante nommée "instru". C'est pour des instruments ? De musique ? Quel rapport avec les films et les acteurs ?

    Suite à la réponse d'escartefigue, vous dites que la table coauteur devrait en fait s'appeler collaborateur. Je trouve ce nom aussi mal choisi que le premier ! Il n'y a pas que les acteurs qui collaborent à un film mais aussi tous ceux qui apparaissent au générique du film.

    Concentrez vous sur la conception de votre base de données avant de vous lancer de but en blanc dans la création des tables. Écrivez les règles de gestion de vos données puis faites un modèle conceptuel de données (MCD).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    3 449
    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 : 3 449
    Points : 7 691
    Points
    7 691
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par Tamzoro Voir le message
    Non, j'ai vraiment besoin de cette table car je dois créer un système CRUD après pour la table Film et Collaborateur.
    Si le but est de créer un ou plusieurs accesseur(s) pour centraliser les accès aux tables film et acteur, il ne faut pas créer une autre table

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    septembre 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : septembre 2009
    Messages : 205
    Points : 88
    Points
    88

    Par défaut

    Bonjour,

    Mon problème est désormais résolu, merci encore pour votre aide.
    Bonne soirée

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/07/2007, 18h06
  2. Clé étrangéres dans une table Oracle
    Par Flipmode dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 18/05/2007, 21h48
  3. Definir une clé étrangère dans une table existante?
    Par gui38 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/12/2006, 13h54
  4. Réponses: 5
    Dernier message: 28/04/2006, 11h55
  5. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 21h06

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