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 :

Clé étrangère chat, chien, ou aligator


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 18
    Points
    18
    Par défaut Clé étrangère chat, chien, ou aligator
    Bonjour,
    j'imagine que la réponse se trouve quelque part, mais je ne pense pas trouver la bonne formulation pour la trouver.

    J'aimerai savoir comment réaliser proprement l'association (binaire dans le principe), en bénéficiant de la cohérence assurée par les clés étrangères.
    J'ai :
    - une table "propriétaires"
    - une table "chiens"
    - une table "chats"
    - une table "alligators"
    Les 3 dernières ne pouvant pas être fusionnées, ni reliées par une héritage.

    Imaginons l'association "dresser", à savoir :
    Un propriétaire - dresse - un chat, un chien ou un alligators

    Pas de soucis pour le propriétaire on intègre son id en clé étrangère.
    Mais pour le deuxième élément, comment indiquer que la clé étrangère dépend de la nature de l'animal : c'est à dire id du chat, id du chien, ou id de l'alligator.

    Pour le moment, je crée un champ nature de l'animal (chat, chien ou alligator) et un autre champ pour l'id, et je recherche dans la table correspondante. Mais je n'intègre pas de clé étrangère et je suis obligé de faire un contrôle à priori (liste fermée) ou à postériori (vérification de l'existence de l'enregistrement).
    Je me dis qu'il doit y avoir une manière plus propre de faire : au niveau modèle ? au niveau contraintes ? ou selon le SGBD (en l'occurrence, je travaille sur du postgres) ?

    Je suis preneur de vos conseils, pratiques ou renvois vers "la question déjà posée".

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    En effet votre modèle est erroné, il vous manque une table animaux dont les tables chiens chats et alligator hériteraient (soit avec l'héritage de postgresql, soit à la mano).

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Cette question concerne la modélisation, or pour bien modéliser il faut connaitre les règles de gestion.
    Il faut les rédiger sous la forme (exemple)

    R001 : un propriétaire possède un ou plusieurs animaux
    R002 : un animal est possédé par un et un seul propriétaire
    R003 : un animal est d'un et un seul type
    R004 etc...

    Questions à poser ici : forum MCD/MLD/MPD

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Waldar Voir le message
    En effet votre modèle est erroné, il vous manque une table animaux dont les tables chiens chats et alligator hériteraient (soit avec l'héritage de postgresql, soit à la mano).
    Je ne souhaite pas faire appel à l'héritage, sauf si pas d'autres solutions (en tout cas pour le moment...)
    Bonjour,

    Cette question concerne la modélisation, or pour bien modéliser il faut connaitre les règles de gestion.
    Il faut les rédiger sous la forme (exemple)

    R001 : un propriétaire possède un ou plusieurs animaux
    R002 : un animal est possédé par un et un seul propriétaire
    R003 : un animal est d'un et un seul type
    R004 etc...

    Questions à poser ici : forum MCD/MLD/MPD
    Pour les règles de gestion, en voici :
    Un animal ne peut être dressé que par un propriétaire
    Un propriétaire peut dresser 1 ou plusieurs animaux (du même type ou de types différents)
    Et un animal est d'un seul type

    Mon message a été déplacé ici par un modérateur...

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Si les attributs des chiens, chats, aligators et autres animaux sont strictement identiques (ce qui est peu probable), inutile d'utiliser l'héritage, dans le cas contraire c'est fortement recommandé

    Dans le 1er cas
    PROPRIO 1,n --- dresser --- 1,1 ANIMAL 1,1 --- typer --- 0,n TYPE

    Ce qui donne 3 tables : PROPRIO, ANIMAL (avec une FK vers l'id proprio et une FK vers le type) et TYPE

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Si les attributs des chiens, chats, aligators et autres animaux sont strictement identiques (ce qui est peu probable), inutile d'utiliser l'héritage, dans le cas contraire c'est fortement recommandé

    Dans le 1er cas
    PROPRIO 1,n --- dresser --- 1,1 ANIMAL 1,1 --- typer --- 0,n TYPE
    Merci pour la réponse, mais en effet les attributs sont différents (ici les animaux ne sont qu'un exemple pour la question), on ne peut fusionner en une seule table.

    Et donc l'héritage est la seule alternative ?
    Va falloir que je me repenche sur la question, je l'avais un peut éludée, parce qu'il me semblait que cela entraînait des complications (contrôle d'unicité, suppression en cascade, ... je ne sais plus...)

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par cryptom Voir le message
    Merci pour la réponse, mais en effet les attributs sont différents (ici les animaux ne sont qu'un exemple pour la question), on ne peut fusionner en une seule table.

    Et donc l'héritage est la seule alternative ?
    Va falloir que je me repenche sur la question, je l'avais un peut éludée, parce qu'il me semblait que cela entraînait des complications (contrôle d'unicité, suppression en cascade, ... je ne sais plus...)
    Pas du tout, aucune complication : avec l'héritage, les sous-types héritent de l'identifiant du sur-type l'unicité est donc implicite (fort heureusement du reste )

    Il y a des infos sur l'héritage dans ce forum, par exemple ici

  8. #8
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut Spécialisation
    cryptom,

    Comme l’écrivent Waldar et escartefigue, la spécialisation du type ANIMAL en CHIEN, CHAT, ALLIGATOR ne pose pas de problème particulier. En passant, notez l’emploi au singulier du nom de chaque type.

    Puisque vous vous situez au niveau tabulaire, vous pouvez vous reporter à l’article consacré à la modélisation avec MySQL Workbench, plus précisément ici.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  9. #9
    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
    Merci pour la réponse, mais en effet les attributs sont différents (ici les animaux ne sont qu'un exemple pour la question), on ne peut fusionner en une seule table.
    Alors expliquez-nous votre cas concret !
    Sinon c'est difficile de vous aider.
    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 !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Les réponses sont très claires merci.

    Je cherchais une réponse pour le cas général.

    En l'occurrence, actuellement ce sera pour de l'affectation de matériel (équipement de chantier, chacun avec des caractéristiques très spécifiques). En définitive, peu importe le type d'objet, au pire on fait une table mère "CHOSES", avec juste un ID et on crée les enfants qu'on veut.

    N'ayant pas encore implémenté de l'héritage dans mes bases de données, j'en étais resté à ce que j'ai décrit plus haut. Et pour le moment je ne peux aller plus loin dans l'échange. Je tague le post comme résolu et je travaille mon héritage.

    Merci encore pour les réponses données.

  11. #11
    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
    En l'occurrence, actuellement ce sera pour de l'affectation de matériel (équipement de chantier, chacun avec des caractéristiques très spécifiques).
    Donc vous pouvez avoir par exemple ce type d'héritages :
    grue -(1,1)----être----0,1- equipement_chantier
    bungalow -(1,1)----être----0,1------|
    container -(1,1)----être----0,1-------|

    Ensuite, vous pouvez avoir des héritages multiples, par exemple :
    vestiaire -(1,1)----être----0,1- bungalow
    sanitaire -(1,1)----être----0,1--------|
    bureau -(1,1)----être----0,1----------|

    Et du coup vous pouvez faire des associations générales à tous les équipements de chantier (livrer, installer...) ou spécifiques à des entités-types filles (vérifier une grue, raccorder le vestiaire au réseau d'eau propre et d'eaux usées...).
    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 !

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

Discussions similaires

  1. Découper un lien .php?champ-texte=chien+chat
    Par djo007 dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2011, 13h53
  2. [Flash] Chat irc ?
    Par Skorps dans le forum Flash
    Réponses: 9
    Dernier message: 13/10/2008, 00h55
  3. [Script]prob de clés étrangères
    Par Seb7 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 08/07/2003, 17h37
  4. [TP]Création d'un Chat en Pascal!
    Par Sub0 dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 12/06/2003, 19h58

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