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 :

Héritage et entité faible [MCD]


Sujet :

Schéma

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut Héritage et entité faible
    Bonjour,

    Est-il possible de mettre en oeuvre l'héritage avec une entité faible ?

    Je m'explique. Je dois modéliser la gestion des réparations effectuées sur des maisons. Certaines de ces maisons possèdent des dépendances. Maisons et dépendances peuvent donc être considérées comme des bâtiments sur lesquels sont effectuées les réparations. Mon problème est que les fameuses dépendances sont des entités faibles par rapport aux maisons (une dépendance ne peut exister sans la maison à laquelle elle est rattachée).

    Donc, si je crée un surtype Bâtiment duquel découlent les sous-types Maison et Dépendance, j'enlève les redondances mais je ne sais pas s'il est possible que l'un des sous-types soit une entité faible de l'autre.

    Quelqu'un pourrait-il me renseigner svp ?
    Merci.

  2. #2
    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
    Citation Envoyé par Shankara Voir le message
    Bonjour,

    Est-il possible de mettre en oeuvre l'héritage avec une entité faible ?
    Oui, sans problème. Dependance et Maison peuvent considérées comme sous-types de Batiment, et Dependance être mise en relation avec Maison.
    (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.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    Je vais essayer comme ça et si je rencontre un souci, je reviendrai vous demander conseil. Merci beaucoup.

  4. #4
    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
    Si vous utilisez un AGL (Win'Design, Power AMC, etc.), le MLD produit vous réservera peut-être des surprises et vous aurez alors à le corriger. Si d'un point de vue sémantique, il n'y a pas de problème à ce que d'une part Dependance soit une entité-type faible par rapport à l'entité-type spécialisée Maison d'autre part, techniquement vous aurez peut-être à considérer Dependance comme entité-type non faible.

    Au niveau du MLD, il faudra quand même veiller à ce que la suppression d'une maison entraîne celle des dépendances.

    Exemple de MLD (Power AMC) :

    (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.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    Je me demandais comment faire pour le MLD (bien que je ne me sois pas encore penchée dessus vu que j'en suis encore au MCD). Je vais utiliser Windev 14 pour développer l'application, et je suis novice donc je crois que ça risque d'être un peu compliqué par la suite. Il faudra que je sois très vigilante. En tous cas, merci pour l'info.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 148
    Points : 69
    Points
    69
    Par défaut
    J'ai un peu de mal avec les identifiants. Est-il possible que l'entité Bâtiment n'ait pas d'identifiant propre, sachant qu'elle ne possède aucune occurrence propre (un bâtiment est forcément une maison ou une dépendance) ? En fait, mon souci est que chaque bâtiment fait partie d'un lotissement (Bâtiment est elle-même une entité faible !).
    En gros, est-il possible que :
    Bâtiment ait pour propriété :
    - #Id_Lotissement#;
    Maison ait pour propriétés :
    - Id_Maison (identifiant artificiel)
    - Numéro_Maison (dans le lotissement physique)
    - Type_Maison
    Dépendance ait pour propriétés :
    - #Id_Maison#
    - Id_Dépendance
    - Type_Dépendance

    Au niveau des associations du MCD, certaines seront construites sur Bâtiment, d'autres sur Maison et Dépendance. Je ne regroupe pas uniquement pour éviter la redondance des propriétés.

  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
    Bonjour Shankara,

    Effectivement, les questions se bousculent. Essayons d'y mettre un peu d'ordre.
    Citation Envoyé par Shankara Voir le message
    Est-il possible que l'entité Bâtiment n'ait pas d'identifiant propre, sachant qu'elle ne possède aucune occurrence propre (un bâtiment est forcément une maison ou une dépendance) ?
    Non, ce n'est pas possible que Batiment n'ait pas d'identifiant propre. Il faut considérer que Batiment est un ensemble (au sens mathématique des ensembles, comme on l'a appris à l'école). Batiment contient deux sous-ensembles, Maison et Dépendance, ayant chacun des éléments. Croire que Batiment est vide parce que tout Batiment est soit une Maison, soit une Dépendance, est un leurre. Batiment est constitué de l'union des ensembles Maison et Dépendance, il n'est donc pas vide. Par contre, c'est l'intersection entre Maison et Dépendance qui est vide (une Maison n'est pas une Dépendance et réciproquement).

    Le principe de la généralisation-spécialisation (ou sur-type / sous-type) est que toute Maison est un Batiment et toute Dependance est un Batiment. Par conséquent, c'est le même identifiant qui identifie les Maisons et les Dépendances : celui de Batiment. C'est une nécessité afin de ne pas confondre les maisons et les dépendances : chaque batiment est unique.

    Citation Envoyé par Shankara Voir le message
    En fait, mon souci est que chaque bâtiment fait partie d'un lotissement (Bâtiment est elle-même une entité faible !).
    Le fait que Batiment soit une entité faible ne change rien à ce qui est dit au-dessus. Seulement l'identifiant de Batiment, au lieu d'être absolu est composé de l'identifiant du Lotissement + le numéro d'ordre du batiment dans le lotissement.


    Par contre, attention à la mise en entité faible de Dépendance par rapport à Maison. En effet, Dependance va alors subir une double identification :
    - une identification absolue en tant que Batiment (une dépendance est un batiment) --> id_batiment
    - une identification relative par rapport à la maison --> id_batiment + no_dependance
    et les deux id_batiment d'une même dépendance ne seront, bien évidemment pas les mêmes.

    La table Dependance du MLD contiendra :
    - id_batiment (héritage de Batiment)
    - id_batiment_M (identification relative par rapport à Maison)
    - no_dépendance (identifiant propre de Dependance dans le cadre de l'identification relative)
    - propriétés spécifiques à Dépendance

    Une double identification n'est jamais bonne. Une entité doit toujours être identifiée de façon unique, soit de manière absolue, soit de manière relative par rapport à une autre entité. Sinon, il y a de gros risques pour l'intégrité de la base de données.


    Il y a donc 2 scénarios pour Dépendance :
    1) identification relative par rapport à Maison mais, dans ce cas, Dépendance ne doit plus être un sous-type de Batiment ce qui implique une redondance des données. Comme l'entité Batiment n'a plus qu'un sous-type et qu'elle ne contient pas d'occurence autre que les Maisons, elle devient inutile et doit être supprimée.
    2) identification absolue en tant que batiment et, dans ce cas, Dependance ne peut pas être entité faible par rapport à Maison. Mais ceci n'interdit nullement sa mise en relation avec Maison de la manière suivante :

    [ Dépendance ]--1,1----(appartient à)----0,n->[ Maison ]

    (voir aussi le MLD de fsmrel)


    Je recommande vivement d'opter pour ce 2e scénario.
    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

  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
    Bonsoir,

    Edit : j'ai envoyé ce message sans voir que JPhi33 avait pris part à la discussion, mais je pense que nos observations se complètent.


    Citation Envoyé par Shankara Voir le message
    Est-il possible que l'entité Bâtiment n'ait pas d'identifiant propre, sachant qu'elle ne possède aucune occurrence propre (un bâtiment est forcément une maison ou une dépendance) ?
    Batiment a forcément un identifiant, mais celui-ci peut être relatif (cf. ci-dessous). Par ailleurs, cette entité-type possède comme attributs non identifiants les attributs communs à Maison et Dependance (ça m’étonnerait fort qu’on n’en trouve pas...) Au niveau logique, la table Batiment comportera autant de lignes qu’il y aura de maisons et de dépendances, ni plus, ni moins.


    Si Lotissement est une entité-type forte ayant pour identifiant (artificiel) LotissementId, et si Batiment est une entité-type faible par rapport à Lotissement, alors Batiment a pour identifiant la paire {LotissementId, BatimentId}, BatimentId étant un entier prenant les valeurs 1, 2, 3, ..., n, tel que n représente le nombre de bâtiments pour un lotissement (BatimentId est un séquenceur permettant de distinguer chaque bâtiment dans un lotissement donné). Batiment regroupe les attributs communs aux maisons et aux dépendances et permet de définir leurs relations communes avec d’autres entités-types.

    L’entité-type Maison étant une spécialisation de l’entité-type Batiment, elle hérite de l’identifiant de cette dernière, à savoir {LotissementId, BatimentId}. Pour plus de clarté, au niveau du MLD vous pouvez renommez l’attribut BatimentId en MaisonNo, mais ça reste un séquenceur permettant de distinguer chaque maison dans un lotissement. C’est ce que je fais à titre d’exemple dans le MLD ci-dessous (MLD - 1).

    L’entité-type Dependance étant elle aussi une spécialisation de l’entité-type Batiment, elle hérite de l’identifiant de cette dernière, à savoir {LotissementId, BatimentId}. Pour plus de clarté, au niveau du MLD vous pouvez renommez l’attribut BatimentId en DependanceId, mais ça reste un séquenceur permettant de distinguer chaque dépendance dans un lotissement.

    A noter que, pour marquer la différence entre un identifiant artificiel (invariant, maîtrisé par le système) et un identifiant naturel (maîtrisé par l’utilisateur, donc sujet à fluctuations...), j’ai fait figurer dans l’entité-type Lotissement un tel attribut naturel (LotissementNumero) dans l’entité-type Lotissement (au niveau MLD, <ak> est l’abréviation de alternate key, clé alternative). Ceci vaut pour toute entité-type, quand le besoin s’en fait ressentir.


    MLD - 1



    Maintenant, on a le sentiment que vous voulez identifier l’entité-type Maison au moyen d’un nouvel attribut (artificiel), disons MaisonId : c’est possible, auquel cas la paire {LotissementId, MaisonNo} devient identifiant alternatif, c'est-à-dire clé alternative (<ak>) au niveau du MLD :


    MLD - 2

    Mais vous devrez alors vous-même garantir la contrainte qui veut que le lotissement dont fait partie une dépendance est celui dont fait partie la maison correspondante. Cette contrainte est garantie de facto dans le cas de MLD - 1, mais pas dans le cas de MLD - 2, modèle dont, je ne vois du reste pas la valeur ajoutée.


    On peut essayer de simplifier les choses en considérant Batiment comme entité-type forte, mais le problème de la contrainte d’égalité de lotissement ne disparaît pas pour autant :

    MLD - 3
    (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.

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

Discussions similaires

  1. Access et entités faibles et spécifiques ?
    Par maph1 dans le forum Modélisation
    Réponses: 6
    Dernier message: 20/02/2008, 18h33
  2. PB! entité faible sous MySQL
    Par Bugger24 dans le forum Requêtes
    Réponses: 0
    Dernier message: 10/10/2007, 20h50
  3. entité faible en sql
    Par MeKesTudi dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/12/2005, 17h23
  4. Générer un identifiant relatif > l'entité faible en prati
    Par vmolines dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 19/08/2005, 15h59
  5. ENTITE FAIBLE
    Par Whismeril dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/01/2005, 22h53

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