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 :

Type et sous-type d'objet [MCD]


Sujet :

Schéma

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut Type et sous-type d'objet
    Bonjour,

    Voici mon problème, tout d'abord illustré par le MCD, puis le MPD associé
    Nom : MCD_exemple.png
Affichages : 1192
Taille : 28,1 Ko

    Nom : MPD_exemple.png
Affichages : 996
Taille : 36,3 Ko

    La problématique est la suivante : J'ai un objet qui est rattaché à un sous-type, lui même rattaché à un type. Le souci c'est que le sous-type n'est pas obligatoire, l'objet peut être uniquement rattaché à un type. C'est pourquoi les tables LIST_TYPE et OBJET sont également en relation

    Au vu de la modélisation actuelle, il est possible que dans la table soient renseignés un code_sous-type et un code_type n'ayant rien à faire ensemble, et il ne faut pas!

    Ma question c'est donc, comment faire pour conserver l'intégrité de cette relation entre les 2 tables LIST_ lors de l'ajout de données dans la table OBJET?


    Je vous remercie d'avance pour les pistes que vous pourrez m'apporter

    Cécile

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


    Ce type de règle de gestion se résout au moyen de Contrainte d'Intégrité Fonctionnelle (CIF)

    Dans le MCD, il faut positionner une flèche entre les relations "type de objet" et "sous type de type" pour matérialiser la contrainte

    Selon le logiciel de modélisation, la façon de procéder est différente (voire impossible avec Power AMC)

    Il s'agit d'une contrainte d'inclusion (I cerclé positionné sur cette flèche) qui mentionne que toute occurrence de la relation "sous type de objet" fait référence à une occurrence de la relation "sous type de type"


    Le DDL généré avec le MPD contiendra une contrainte de type REFERENCE qui permettra de vérifier cette inclusion. Si vous modélisez avec Power AMC ou un logiciel qui ne permet pas d'ajouter les contraintes dans le MCD, il faudra alors ajouter la contrainte manuellement dans le DDL du CREATE TABLE

    DDL de la table OBJET :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [. . .]
    CONSTRAINT ma_Contrainte_FK1 
               FOREIGN KEY (code_sous_type, code_type) 
               REFERENCES LIST_SOUS_TYPE (code_sous_type, code_type)
    PS : ne vous inquiétez pas, c'est moi qui ai supprimé le message pour le reformuler, j'ai souvent tendance à poster un peu vite

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Merci beaucoup! Je regarde tout ça de trés prés

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 168
    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 168
    Points : 38 987
    Points
    38 987
    Billets dans le blog
    9
    Par défaut
    Attention, il faut que la contrainte de type REFERENCE pointe sur une clef UNIQUE

    Le plus simple et le plus efficace est d'identifier le sous type relativement au type, comme ça, la clef primaire (et donc unique) de la table LIST_SOUS_TYPE sera CODE_TYPE + CODE_SOUS_TYPE.

    L'avantage est que tous vos sous-types seront naturellement classés selon le type, d'où temps d'accès optimisés aux types d'un sous-type si votre index cluster est sur le type

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Magnifique, c'est exactement ce que je voulais!

    Et en plus j'aurai appris quelque chose.

    J'ai fait comme vous le suggériez, une double clé primaire sur les champs code_type et code_sous_type de la table LIST_SOUS_TYPE
    Aprés l'avoir testé je peux dire que ça fonctionne parfaitement.

    Un grand merci pour votre aide, je vais regarder de plus prés les possibilités offertes par l'utilisation des CIF


    Cécile


    PS : je viens à l'instant de voir que c'était vous qui aviez supprimé le message précédent, et non pas moi qui avait fait une bêtise!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/08/2013, 04h56
  2. Relation N-N et insertion dans une 3éme tables.
    Par naou18 dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2012, 09h19
  3. Réponses: 12
    Dernier message: 06/08/2010, 15h00
  4. [AC-2003] comparer 2 tables et inserer des valeurs dans une des tables
    Par sanaab dans le forum VBA Access
    Réponses: 0
    Dernier message: 08/06/2010, 14h55
  5. Requete SQL sur une table dont le nom est dans une autre table
    Par orangepresse dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/09/2007, 13h32

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