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 :

Contrainte sur une table vers deux autres tables [9.6]


Sujet :

PostgreSQL

  1. #1
    Membre actif Avatar de Narann
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 211
    Points
    211
    Par défaut Contrainte sur une table vers deux autres tables
    Bonjour,

    J’essaie de modéliser ceci:

    • Table A
    • Table B
    • Table C


    Table C a deux clefs: type et id. type est soit 0 soit 1.

    • Si type est a 0, id représente l’id de la Table A.
    • Si type est a 1, id représente l’id de la Table B.


    Par quels mécanismes (contraintes) puis-je m'assurer que l’intégrité des données?

    En plus concret: J'ai des objets très différents (exemple: Arbres dans la table A et voiture dans la table B) et j'aimerais pouvoir lier chacun des objets une tache (table C), tout en m'assurant de l’intégrité de mes données.

    Comment gérer ça?

    Je vous remercie d'avance,

    Narann

  2. #2
    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 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Un contrainte n'est pas applicable ici puisque l'identifiant sera soit dans la table des arbres, soit dans celles des véhicules
    Seul un trigger permettrait de faire ce contrôle

    Mais quel est l'intérêt de cette construction ? décrivez clairement votre besoin plutôt que la solution envisagée qui me semble scabreuse, il y a certainement d'autres solutions que celle que vous proposez

  3. #3
    Membre actif Avatar de Narann
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 211
    Points
    211
    Par défaut
    Merci pour les infos !

    J’ai également posé cette question sur stack overflow qui me propose de passer par une table associative mais ça ne me garantit pas qu’une task est lié soit a A, soit a B.

    Pour l’explication concrète. J’ai deux objets de type très différent que je stocke donc dans deux tables.

    • Asset (Table A), qui porte un nom.
    • AssetInstance (Table B), qui pointe vers un asset et porte un numéro.
    • Task (Table C), qui défini un travail a faire, qui peut être lie soit a un Asset soit a un AssetInstance.


    Dans mon exemple il n’y a que Asset et AssetInstance, mais en pratique, il y a d’autres objets qui peuvent se voir assigner une (ou plusieurs) tache(s).

    Si vous avez des idées pour modéliser ça et assurer l’intégrité des données, je suis preneur.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Je viens rarement ici. Et donc peut-être un peu tard (3 mois après) mais sait-on jamais...

    Je pense que ton modèle est "soit j'ai un asset qui est relié à un assetInstance, soit j'ai un asset seul" (style asset relié à [0, 1] assetInstance).
    Ensuite, ton Task est soit relié à l'originel "asset", soit relié à son dérivé "assetInstance".
    Moi, j'aurais dit "tout asset a obligatoirement un assetInstance". Ainsi, j'aurais relié "Task" à "assetInstance" lui-même relié à "asset" et l'intégrité de mes données serait protégée...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre actif Avatar de Narann
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 211
    Points
    211
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Moi, j'aurais dit "tout asset a obligatoirement un assetInstance". Ainsi, j'aurais relié "Task" à "assetInstance" lui-même relié à "asset" et l'intégrité de mes données serait protégée...
    On est presque parti la dessus. En fait, un asset et un asset instance sont tous deux des entités et les taches sont relie a l’entité. Ceci permet de fabriquer d’autres type d’entité qui ont, elle aussi, des taches.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Exactement. Moi avec ma vision réduite de ton souci je voyais le "assetInstance" comme grand chef mais toi qui a une meilleure vision tu as un truc "entité qui est lui le vrai "grand chef" et "asset" et "assetInstance" y sont tous deux reliés mais c'est la même chose. L'important pour l'intégrité c'est que "Task" en soit lié qu'à un seul truc unique (et non tantôt un truc tantôt l'autre)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/11/2008, 08h07
  2. Update d'une table à partir de deux autres tables
    Par Peewee766 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 04/05/2008, 19h08
  3. Réponses: 4
    Dernier message: 25/08/2006, 00h25
  4. Modifier une contrainte sur une table InnoDb
    Par DomZZZ dans le forum Outils
    Réponses: 1
    Dernier message: 13/03/2006, 14h40
  5. Ajout & modif d'une table vers l'autre
    Par BOTIGUA dans le forum Access
    Réponses: 1
    Dernier message: 17/02/2006, 18h00

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