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

Schéma Discussion :

Problème clé primaire/clé secondaire


Sujet :

Schéma

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Problème clé primaire/clé secondaire
    Bonsoir, j'ai un petit soucis au niveaux de mes clés:
    Voici l'énoncé du problème:

    un bien immobilier est défini par:
    - disponible ou pas
    - adresse
    - ...
    une classe standard est définie par un code, un type de biens, un prix min, un prix max et une superficie min.
    Un bien appartient toujours à une classe unique.
    Une classe peut ne contenir aucun bien.
    Un numéro permet d'identifier un bien parmi tous ceux qui font partie de la même classe.

    Je n'ai donc pas d'identifiant direct pour l'entité bien, puisque j'ai mis son numero en attribut de la relation et que code classe fait partie d'une autre entité.
    ce que j'ai fait c'est lors du passage en base de données, j'ai mis code de classe et num bien en clés étrangères et aussi en identifiant de la table bien.

    mais je ne pense pas que cela soit autorisé.

    En gros, ma question est: peut on avoir une clé primaire d'une table x qui passe en clé étrangère dans une table y et qui en plus devient son identifiant.

    merci d'avance pour vos réponses.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    C'est au départ un problème de modélisation des données.
    Tu prendras bien une rasade de Merise ?

    une classe standard est définie par un code, un type de biens, un prix min, un prix max et une superficie min.
    Tu as donc une entité "Classe". Comme parmi ses attributs figure le type de bien, il y a aussi une entité "Type_bien" qui lui est associée selon ce morceau de MCD :
    Classe -1,1----Concerner----0,n- Type_bien

    Ce morceau de MCD donne les tables suivantes :
    Type_bien (tbn_id, tbn_libelle)
    Classe (cls_id, cls_id_type_bien, cls_code, cls_prix_min, cls_prix_max, cls_superficie_min)

    un bien immobilier est défini par:
    - disponible ou pas
    - adresse
    ...
    Un bien appartient toujours à une classe unique.
    Une classe peut ne contenir aucun bien.
    Tu as donc une entité "Bien" qui est associée à l'entité "Classe" selon le morceau de MCD suivant qui complète le premier :
    Bien -1,1----Classer----0,n- Classe -1,1----Concerner----0,n- Type_bien

    Un numéro permet d'identifier un bien parmi tous ceux qui font partie de la même classe.

    Je n'ai donc pas d'identifiant direct pour l'entité bien
    Si, puisqu'il s'agit d'une entité, la table qui en découle doit avoir une clé primaire propre. Il est donc préférable de définir cet identifiant dès la création du MCD.
    Nous aurons donc la table "Bien" suivante :
    Bien (bn_id, bn_id_classe, bn_disponible, bn_adresse...)

    Ce point de modélisation étant fait, voyons ta question :
    peut on avoir une clé primaire d'une table x qui passe en clé étrangère dans une table y et qui en plus devient son identifiant.
    Oui. 2 exemples :
    1) Héritage de tables
    Appartement -(1,1)----Etre----0,1- Bien
    Maison -(1,1)----Etre----0,1-------------|

    Bien (bn_id, bn_id_classe, bn_disponible, bn_adresse...)
    Appartement (app_id_bien, app_etage, app_exposition, app_balcon...)
    Maison (msn_id_bien, msn_garage, msn_jardin, msn_piscine...)

    Dans un héritage de table, les tables filles ont pour clé primaire l'identifiant de la table mère et ne contiennent que les attributs qui leurs sont propres.

    2) Association de type (0,1 - 0,n)
    Considérons qu'un bien immobilier puisse faire partie d'une opération immobilière (construction d'immeuble, lotissement). Tous n'en font pas obligatoirement partie (vente de particulier).
    Operation -1,n----Comprendre----0,1- Bien

    Bien
    (bn_id, bn_id_classe, bn_disponible, bn_adresse...)
    Operation (opr_id, opr_libelle...)
    Comprendre (cpr_id_bien, cpr_id_operation...)

    Comme il ne peut y avoir au maximum qu'une seule fois un bien dans la table associative, l'identifiant de ce bien devient seul la clé primaire de la table associative.
    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 !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    ok merci pour ta réponse, mais il ya toujours quelque chose que je ne comprends pas: "Un numéro permet d'identifier un bien parmi tous ceux qui font partie de la même classe." --> donc deux biens de classe différente peuvent avoir le même numéro --> donc bien_id ne peut pas être seule clé primaire car il ne garantit pas l'unicité !

    ce que je voulais faire c'est mettre à la fois bien_id et code_classe comme clé primaires mais le soucis c'est que code_classe arrive seulement dans la table lors du passage au modèle relationnel et en plus en temps que clé étrangère, or nous ne sommes dans aucun des deux cas que tu as décrit puisque c'est ici une relation (1,1) (0,n).

    Merci

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    il y a toujours quelque chose que je ne comprends pas: "Un numéro permet d'identifier un bien parmi tous ceux qui font partie de la même classe." --> donc deux biens de classe différente peuvent avoir le même numéro --> donc bien_id ne peut pas être seule clé primaire car il ne garantit pas l'unicité !
    Si ce "numero" est un attribut significatif, une référence, au même titre que "code" pour la "classe", ajoute la colonne "bn_numero" à "Bien" dans mon modèle.
    Mais ceci dit, par définition, une clé primaire étant unique, bn_id sera forcément unique pour tous les biens donc il pourrait identifier de manière unique un bien dans une classe.

    Il faut différencier les attributs signifiants pour l'utilisateur et qui lui seront donc montrés (code, numéro, référence...) des identifiants qui ne sont utilisés que par le SGBD (clés primaires, clés étrangères) et sans signification pour l'utilisateur donc en principe qui ne lui sont jamais montrés.

    ce que je voulais faire c'est mettre à la fois bien_id et code_classe
    C'est inutile. Tu penses table (MPD) avant de penser entité (MCD). Tu fais donc l'implémentation avant la conception : tu mets la charrue avant les boeufs !

    Tu en découvres d'ailleurs le grain de sable qui va enrailler la machine que tu souhaitais mettre en oeuvre :
    mais le soucis c'est que code_classe arrive seulement dans la table lors du passage au modèle relationnel et en plus en temps que clé étrangère
    nous ne sommes dans aucun des deux cas que tu as décrit puisque c'est ici une relation (1,1) (0,n).
    Effectivement. Je répondais à ta question en te donnant deux exemples de modélisation possibles adaptés à ton contexte de biens immobiliers mais l'association (1,1 - 0,n), je l'avais décrite précédemment :
    Citation Envoyé par CinePhil
    Bien -1,1----Classer----0,n- Classe
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    encore un tout grand merci je commence à y voir beaucoup plus clair, je viens de merendre compte que je dois ajouter un attribut référence_photo dans mon entité bien, cet attribut pourrait-il servir de clé? Ou est que je dois malgré tout ajouter bien_id?

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    reference_photo est je suppose, comme son nom l'indique, la référence d'une photo du bien immobilier. Ce n'est pas un identifiant et surtout, ça constituerait une mauvaise clé primaire.

    Encore une fois : oui, il faut que tu mettes un identifiant du genre bn_id de type entier auto-incrémenté dans la table des biens et qui sera la clé primaire de celle-ci !
    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 !

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    ok un tout grand merci pour votre aide.
    Je mets ça en résolu

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

Discussions similaires

  1. Problème clé primaire et clé étrangere
    Par kapucine dans le forum Modélisation
    Réponses: 8
    Dernier message: 04/05/2009, 17h15
  2. Problème de controleur ide secondaire?
    Par steeves5 dans le forum Composants
    Réponses: 2
    Dernier message: 26/09/2006, 18h09
  3. [Gadfly]Clef primaire et secondaire
    Par anthyme dans le forum Bibliothèques tierces
    Réponses: 3
    Dernier message: 23/08/2006, 20h35
  4. Groupes primaires et secondaires
    Par melmouj dans le forum Administration système
    Réponses: 6
    Dernier message: 21/06/2006, 08h14
  5. Réponses: 4
    Dernier message: 14/06/2006, 13h52

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