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 :

Création d'un catalogue - Références circulaires [MCD]


Sujet :

Schéma

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Création d'un catalogue - Références circulaires
    Bonjour à tous.

    Je modélise un catalogue qui doit répondre aux critères suivants:
    - Les produits sont organisés en familles
    - Chaque famille de produits peut avoir des caractéristiques qui lui sont propres.
    - Chaque "caractéristique" peut prendre un jeu de valeurs définies (ensemble fini et entré par un administrateur)
    - Chaque produit est décrit par une valeur pour chaque "caractéristique" de la famille à laquelle il appartient.

    Le soucis majeur est que je ne trouve pas vraiment comment modéliser ça sans référence circulaire (j'ignore si c'est le terme exact, mais en gros, Produit est liée à Famille qui est liée à Caracteristique qui est liée à ValeursCaracteristique qui est liée à Produit, les noms en majuscules réprésentant les tables).
    Je me rappelle de mes cours de BDD où on me disait "Référence Circulaire = pas bien! mauvais! 4/20"

    Connaissez vous une autre manière de résoudre le problème? Les références circulaires sont elles si mauvaises que ça? (j'imagine qu'elles posent des problèmes sur les opérations de type DELETE CASCADE mais en dehors de ça??).

    Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour,

    Il ne suffit pas de dire qu'il y a un lien entre produit et famille (par exemple), encore faut-il préciser le sens du lien. Schématiquement, il faut choisir entre deux assertions :
    - un produit "a une" famille
    - une famille "a un" produit

    Dans le premier cas, le lien est représenté par produit -> famille ; dans le second par famille -> produit. Dans le cas présent, le lien correct est produit -> famille : un produit n'est rattaché qu'à une famille (alors qu'une famille regroupe plusieurs produits).

    Fais ce travail avec chaque lien et tu constateras qu'il n'y a pas de référence circulaire. Attention, il y a un lien associatif.

    Lis la discussion Dépendance circulaire qui traite du même sujet et dont le MCD est identique.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    Merci pour ta réponse.
    Désolé de ne pas avoir été très rigoreux dans la description de mes relations. J'ai supposé que les règles métier exprimées dans mon message permettraient de rétablir les cardinalités naturellement.
    Le schéma présenté dans la discussion que tu donnes en référence est à peu de choses près le schéma que j'obtiens. Ca me rassure
    Par contre, tu dis qu'il n'y a pas de référence circulaire. J'en conclus donc que je n'ai pas compris ce que c'est :/ (je sais, le boulet
    Pourrais tu éventuellement éclairer ma lanterne? Est-ce qu'il y a référence circulaire seulement si le sens des relations permet de "revenir à la case départ"?
    quid des relations 1-1 et n-n?

    Merci d'avance!

  4. #4
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour dbNewbie,

    Citation Envoyé par dbNewbie Voir le message
    Est-ce qu'il y a référence circulaire seulement si le sens des relations permet de "revenir à la case départ"?
    Oui, c'est exactement ça.

    Voici un exemple inspiré de tes règles de gestion.
    - les produits sont regroupés en familles
    - chaque famille a une seule caractéristique mais plusieurs familles peuvent avoir la même
    - une caractéristique dépend d'un seul produit et un produit peut en avoir plusieurs

    On a :
    produit -> famille
    famille -> caractéristique
    caractéristique -> produit

    C'est-à-dire :
    produit -> famille -> caractéristique -> produit

    Ce sont des références circulaires ("ça boucle"). Inconvénient : elles mènent à des paradoxes. Exemple :
    1. il n'existe qu'une seule caractéristique pour un produit donné. Vrai car :
      produit -> famille -> caractéristique
    2. il peut exister plusieurs caractéristiques pour un produit donné. Vrai car :
      produit <- caractéristique

    Le produit p1 a 2 caractéristiques (autorisé par b), alors a est faux.
    Conclusion : a est vrai et faux tout à la fois !

    Citation Envoyé par dbNewbie Voir le message
    quid des relations 1-1 et n-n?
    Les associations de type n-n ne mènent pas à des références circulaires. Exemple :

    MCD Merise :
    [ A ]--0,n----( X )----0,n--[ B ]

    MLD dérivé :
    X ---> A
    X ---> B
    (si la clé de A est a et celle de B est b, alors la clé de X est {a, b})

    Modèle relationnel correspondant :
    A(a)
    B(b)
    X(a, b)


    Les associations de type 1-1 ne mènent pas à des références circulaires à condition de bien les modéliser. Exemple :

    MCD Merise :
    [ A ]--1,1----( X )----1,1--[ B ]

    MLD dérivé :
    Choisir entre A ---> B et B ---> A. Certains AGL de modélisation génèrent automatiquement :
    A ---> B
    B ---> A

    C'est-à-dire, en représentation relationnelle (# = clé étrangère) :
    A(a, #b)
    B(b, #a)

    A référence B et B référence A, ce qui est une référence circulaire. C'est pourquoi il faut choisir entre les deux modes de référenciation.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Waw! Réponse parfaite!!
    Merci pour ton aide précieuse et pour ce cours particulier (hop! Bookmark)
    Mon schéma est maintenant sur la bonne voie...

    A+

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    J'arrive un peu tard, mais j'ai rédigé quelque chose qui va dans le sens de ce qu'écrit JPhi33. Voici donc.


    Je ne me souviens pas d’avoir rencontré la définition de ce qu’est une référence circulaire en Merise. En revanche, dans la théorie relationnelle, au chapitre « Intégrité » , il y a bien une définition en ce sens. Je paraphrase et traduis Chris Date (cf. An Introduction to Database Systems, « Integrity ») :

    Cycle rérérentiel

    Les tables Rn, R(n-1), R(n-2), ..., R2, R1 forment un cycle référentiel si Rn comporte une clé étrangère faisant référence à R(n-1), à son tour R(n-1) comporte une clé étrangère faisant référence à R(n-2), ..., etc., et au final R1 comporte une clé étrangère faisant référence à Rn :
    Rn --> R(n-1) --> R(n-2) --> ... --> R2 --> R1 --> Rn
    Une table qui s’auto-référence est un cas particulier de cette situation.


    En remontant au niveau Merise :



    Si l’on soumet un tel MCD à validation par l’AGL (en l’occurrence Power AMC V11), on a droit à un message d’avertissement (non bloquant) :
    « Circularité formée de liens obligatoires »
    Conclusion : il est prudent d’interrompre le cycle par une cardinalité 0,1 quelque part.


    Une association-type réflexive est un cas particulier :



    En observant que, du fait de la cardinalité minimale 1 (côté Subordonné), toute personne a un chef. Donc le général en chef a un chef qui ne peut être que lui-même, donc dans un processus récursif, on apprendra que le général en chef a pour subordonné lui-même et ses subordonnés directs, donc qu’il est hiérarchiquement au même niveau que ces derniers.

    Conclusion :

    Le général en chef demandera que la cardinalité 1,1 soit transformée en 0,1. Non mais...
    M’frez 4 jours.

    Ceci correspond à une histoire que j'ai vécue, à ceci près que c'est le colonel qui a demandé le passage à 0,1...
    (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.

  7. #7
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Je ne me souviens pas d’avoir rencontré la définition de ce qu’est une référence circulaire en Merise.
    Moi non plus. Aucune trace dans la littérature que j'ai parcouru -- mais je n'ai pas tout lu sur Merise, loin s'en faut !
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/06/2006, 17h02
  2. [SQL 2K5] Pb : ON DELETE CASCADE : référence circulaire
    Par n00bi dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 29/05/2006, 08h48
  3. Référence circulaire
    Par Mvu dans le forum ASP
    Réponses: 3
    Dernier message: 27/04/2006, 14h38
  4. [EXCEL] : référence circulaire à cause d'une macro
    Par repié dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/01/2006, 10h41
  5. [DEB] DBdesigner 4 et référence circulaire
    Par Ranbaz dans le forum DBDesigner
    Réponses: 1
    Dernier message: 13/07/2005, 17h32

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