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 :

Association n-aire, date et cardinalité [MCD]


Sujet :

Schéma

  1. #1
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 138
    Points : 64
    Points
    64
    Par défaut Association n-aire, date et cardinalité
    Bonjour

    J'ai du mal à comprendre les association n-aires, en fait voilà les questions dont je trouve pas la réponse:

    - Quelle est la signification exacte des cardinalités présents dans les pattes d'une association ternaire?

    - Peut-on avoir dans l'une des n pattes une cardinalité maximale égale à 1?

    - Quelles sont les conditions qui doivent être vérifiées pour pouvoir juger si une association n-aire est correctement utilisé ou non?

    - J'ai lu dans plusieurs cours que les associations n-aire peuvent être remplacées par plusieurs associations binaire, laquelle des 2 solutions convient le mieu et pourquoi?

    En fait les notions que j'ai reçue sur les associations n-aire, dans des cours que j'ai télécharger sur internet, sont très floux et certaines corrections d'exemples me paraissent contradctoires ... je compte sur vos réponses alors pour m'éclaircir la dessus.

    voilà merci d'avance

    bon pour entrer directement dans la difficulté voici l'exemple dans lequel je bloque dans l'image jointe.

    en fait dans un exemple presque identique à celui ci dans un cours, une telle solution a été refusé pour la raison suivante:

    une telle modélisation accepte le fait qu'à une date donnée, une vache peut être inséminée par plusieur taureaux alors qu'en réalité (cad dans la ferme pour laquelle je modelise une base de donnée) c'est pas possible.

    Ma solution est-elle correcte? sinon pouvez vous m'aider à trouver une solution convenable?
    Images attachées Images attachées  

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    - Quelle est la signification exacte des cardinalités présents dans les pattes d'une association ternaire?
    Elles peuvent être 0,n ou 1,n sans importance car la clef e la table étant l'ensemble des FK se cera toujours l'équivalent d'un 1:n

    - Peut-on avoir dans l'une des n pattes une cardinalité maximale égale à 1?
    Non, cela n'a pas de sens. Si vous avez une ternaire avec
    A 0,1 vers B et C
    B 0,n vers A et C
    C 0,n vers A et B
    La question pour A est : du fait de la cardinalité maximale 1, A est-elle liée à B ou (exlusif) à C ?

    - Quelles sont les conditions qui doivent être vérifiées pour pouvoir juger si une association n-aire est correctement utilisé ou non?
    C'est de la sémantique dont dépendant des DF

    - J'ai lu dans plusieurs cours que les associations n-aire peuvent être remplacées par plusieurs associations binaire, laquelle des 2 solutions convient le mieu et pourquoi?
    Vrai, mais cela introduit alors un cycle, est c'est généralement moins facile à gérer !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    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
    Citation Envoyé par master_och Voir le message
    bon pour entrer directement dans la difficulté voici l'exemple dans lequel je bloque dans l'image jointe.

    en fait dans un exemple presque identique à celui ci dans un cours, une telle solution a été refusé pour la raison suivante:

    une telle modélisation accepte le fait qu'à une date donnée, une vache peut être inséminée par plusieur taureaux alors qu'en réalité (cad dans la ferme pour laquelle je modelise une base de donnée) c'est pas possible.

    Ma solution est-elle correcte? sinon pouvez vous m'aider à trouver une solution convenable?
    L'entité Date est-elle vraiment utile ici ?

    Règles de gestion :
    1) Un taureau peut inséminer plusieurs vaches à une date donnée
    2) Une vache ne peut-être inséminée au plus que par un taureau à une date donnée
    3) Un taureau peut inséminer la même vache à des dates différentes
    4) Une vache peut être inséminée par le même taureau à des dates différentes

    MCD :
    Taureau -0,n----Inséminer à telle date----0,n- Vache

    Tables :
    Taureaux (T_Id, T_Num_Nat, T_DateNaissance...)
    Vaches (V_id, V_Num_Nat, V_DateNaissance...)
    Inseminations (I_Id_Taureau, I_Id_Vache, I_DateInsemination)

    Pas besoin de ternaire ici.
    Dans la pratique, on a rarement besoin d'une entité 'date'. Il est plus facile de considérer que c'est une donnée portée par des associations ou des entités.
    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 !

  4. #4
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 138
    Points : 64
    Points
    64
    Par défaut
    Bonjour

    Tout Dabord merci bien pour votre aide, qui m'est très précieux

    Sinon à propos de l'utilité de l'entité date, l'exemple que j'ai mis n'est qu'une très petite partie de mon MCD, qui a besoin d'utiliser la date dans 7 "endroits" (entité ou association) différents, c'est pour ca qu'on m'a dit que la répétition de l'attribut date plusieurs fois pourrait être considéré comme une sorte de redondance, et on m'a fortement recommandé de créer une entité date.

    Je tiens à noter que toutes les associations binaire reliées à l'entité date ont pour cardinalité maximale dans l'une des pattes (autre que celle reliée à la date) égale à 1, cad que l'entité date a toujours une clé étrangère.

    Pour les associations ternaires ils sont similaires à l'exemple que j'ai mis, ca peut se transformer en association binaire et je peux utiliser la date comme étant attribut dans l'association obtenue.

    Je suis donc entre 2 solutions: supprimer l'entité date et la transformer en attribut à chaque fois que j'en ai besoin, cela rendra mon MCD plus simple et plus facile à lire, mais en contre partie y aura de la redondance.L'autre solution sera de garder l'entité date, cela rendra le schema beaucoup plus compliqué, mais sans redondance.
    Laquelle des deux solutions me recommandez-vous?

  5. #5
    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
    mon MCD, qui a besoin d'utiliser la date dans 7 "endroits" (entité ou association) différents, c'est pour ca qu'on m'a dit que la répétition de l'attribut date plusieurs fois pourrait être considéré comme une sorte de redondance, et on m'a fortement recommandé de créer une entité date.
    Ce qui serait redondant, ce serait de répéter une date d'insémination dans plusieurs tables, soit disant pour faciliter l'écriture des requêtes.
    Mais une date de naissance, d'insémination, d'achat, de vente, d'abattage sont des concepts différents, même s'ils ce sont tous des dates. Il n'y a donc pas redondance.

    Je suis donc entre 2 solutions: supprimer l'entité date et la transformer en attribut à chaque fois que j'en ai besoin, cela rendra mon MCD plus simple et plus facile à lire, mais en contre partie y aura de la redondance.L'autre solution sera de garder l'entité date, cela rendra le schema beaucoup plus compliqué, mais sans redondance.
    Laquelle des deux solutions me recommandez-vous?
    Ben moi je ne mets jamais d'entité Date. Je n'en ai jamais trouvé l'utilité.
    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 !

  6. #6
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 138
    Points : 64
    Points
    64
    Par défaut
    Tout à fait logique, merci bien pour ton soutient, je vais suivre ton conseil

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Ben moi je ne mets jamais d'entité Date. Je n'en ai jamais trouvé l'utilité.
    Eh ben ça c'est une erreur !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 138
    Points : 64
    Points
    64
    Par défaut
    En fait, dans mon MCD, l'entité date me parait très utile, et dans d'autres endroits je trouve qu'il est suffisant et beaucoup plus simple de l'utiliser comme attribut.

    ma question est donc, est-il convenale d'utiliser dans certains entités un attribut date, alors qu'on a déjà définit une entité date?

  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
    Citation Envoyé par SQLpro Voir le message
    Eh ben ça c'est une erreur !

    A +
    Ce serait bien que tu développes cette erreur ! Je ne demande qu'à apprendre !
    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
    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
    Citation Envoyé par CinePhil Voir le message
    Ben moi je ne mets jamais d'entité Date. Je n'en ai jamais trouvé l'utilité.
    Citation Envoyé par SQLpro Voir le message
    Eh ben ça c'est une erreur !
    Si je puis m’immiscer : tout dépend du mode de représentation graphique utilisé.

    Si l’on utilise Merise et si la date participe à l’identification d’une association-type, on est conduit à mettre en œuvre une entité-type DATE, puisque l’identifiant de l’association-type est implicitement constitué des identifiants des entités-types connectées.

    En conséquence, à partir du MCD qui suit, et à condition de pouvoir demander que la génération d’une table DATE ne soit pas effectuée (Ce qui est le cas, par exemple, avec Power AMC) :


    On produit alors le MLD suivant :


    Mais si l’AGL orienté Merise ne permet pas d’éviter la génération d’une table DATE, vous ferez comme on faisait à la fin des années quatre-vingts (c'est-à-dire quand l’intégrité référentielle a enfin était prise en compte (par DB2), à savoir en 1988) : au niveau du MLD, supprimer manuellement chaque clé étrangère faisant référence à la table DATE, pour enfin pouvoir supprimer celle-ci. A l’époque, je dus le faire, des nuits durant, à la nausée...

    Maintenant, si au lieu du mode de représentation graphique de Merise, on utilise celui de IEF (Information Engineering Facility de James Martin) ou équivalent (mode Entité/Relation de Power AMC par exemple, comme ci-dessous) :



    Alors on produit exactement le même MLD.

    Bien sûr, dans tout ce qui précède, j’ai considéré que la date n’est jamais qu’un type et non pas un objet de gestion en tant que tel.
    (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.

  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
    Serait-il faut de faire un MCD Merise de la sorte (désolé, je n'ai pas de modeleur au point sous la main) ?

    EntiteA
    A_Id
    ...
    |
    0,n
    |
    |
    Associer
    DateAB
    |
    |
    0,n
    |
    EntiteB
    B_Id
    ...

    Ce qui donnerait bien également :
    EntiteA(A_Id, ...)
    EntitéB(B_Id, ...)
    Associer(A_Id, B_ID, DateAB)
    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 !

  12. #12
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 138
    Points : 64
    Points
    64
    Par défaut
    Si l’on utilise Merise et si la date participe à l’identification d’une association-type, on est conduit à mettre en œuvre une entité-type DATE, puisque l’identifiant de l’association-type est implicitement constitué des identifiants des entités-types connectées.
    Serait-il faut de faire un MCD Merise de la sorte (désolé, je n'ai pas de modeleur au point sous la main) ?

    EntiteA
    A_Id
    ...
    |
    0,n
    |
    |
    Associer
    DateAB
    |
    |
    0,n
    |
    EntiteB
    B_Id
    ...

    Ce qui donnerait bien également :
    EntiteA(A_Id, ...)
    EntitéB(B_Id, ...)
    Associer(A_Id, B_ID, DateAB)
    logiquement je croix que c'est faut, puisque en utilisant une association binaire, deux occurences des entité A et B n'auront le droit d'être associées qu'une seule fois, et par suite un couple d'occurences (A,B) n'aura pas la possibilité de se répéter dans plusieurs dates.

    cad en prenant l'exemple que j'ai mis au début, si on fait une association binaire entre vache et taureau et on met la date comme attribut dans cet association, alors une vache n'aura la possibilité d'etre insiminé par un taureau qu'une seule fois, dans une et une seule date.

  13. #13
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 138
    Points : 64
    Points
    64
    Par défaut
    J'ai encore une petite question: dans mon MCD il m'est necessaire d'utiliser l'entité date dans certains endroits, mais dans d'autres endroits il m'est suffisant d'utiliser la date comme attribut, est-il convenable de mettre la date comme attribut, alors qu'on a déjà créer une entité date ??

  14. #14
    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
    Citation Envoyé par CinePhil Voir le message
    Serait-il faut de faire un MCD Merise de la sorte [...]
    Oui. Comme je l’ai écrit dans mon précédent message, l’identifiant d’une association-type merisienne est implicitement constitué des identifiants des entités-types connectées, jamais explicitement comme vous le faites. Autrement dit, si vous faites figurer DateAB en tant que propriété de l’association-type, vous ne pouvez pas faire participer cette propriété à l’identifiant de l’association-type : graphiquement, souligner DateAB est interdit.

    On aurait dû faire évoluer Merise pour permettre que des attributs d’une association-type participent à l’identification de celle-ci, mais les dogmes sont tout puissants...

    A défaut, on peut toujours en passer par des notations du type IEF, où l’association-type est remplacée par une entité-type associative, un rond par un carond (carré jouant le rôle de rond). J’ai illustré cela dans mon précédent message.
    Voyez aussi la discussion avec flippaeti (association-type Distribuer).
    (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.

  15. #15
    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
    Citation Envoyé par master_och Voir le message
    est-il convenable de mettre la date comme attribut, alors qu'on a déjà créer une entité date ??
    C’est non seulement tout à fait convenable, mais tout à fait recommandé, au nom de l’indépendance des concepts. Imaginez que vous définissiez une entité-type TEXTE, est-ce pour autant qu’il faudrait tirer un lien entre cette entité-type et tous les attributs de type TEXTE ?

    L’entité-type DATE ne doit son existence qu’à un dogme merisien selon lequel, je le répète, l’identifiant d’une association-type est implicitement constitué des identifiants des entités-types connectées. Si donc un attribut de type Date doit participer à l’identifiant d’une telle association-type, il faudra en passer par les fourches caudines merisiennes et mettre en œuvre une telle entité-type.

    Je reprends ce que j’ai déjà dit par ailleurs : DATE est un type banal et vous pouvez définir des attributs de ce type autant qu’il vous plaira : date de saillie, date d’embauche, date de démission, date de paye, tout en faisant abstraction d’une prétendue entité-type DATE qui a fait souffrir des générations de concepteurs respectueux du dogme et que vous ajouterez à votre représentation graphique seulement contraint et forcé (mais qui devra disparaître au niveau du MLD, puisque la table DATE n’y sera qu’une contrainte devenue non seulement inutile mais pénalisante, faisant double emploi, donc devant passer au fil du rasoir d’Ockham).
    (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.

  16. #16
    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
    Cette intéressante discussion me fait penser que j'ai dans ma base de données le cas inverse :

    Règle de gestion :
    "Un utilisateur peut participer à un à plusieurs projets avec un certain statut."

    MCD :
    Utilisateur -0,n----Participer----0,n- Projet
    Statut -0,n-----------|

    Les tables qui devraient en découler :
    Utilisateur(U_Id, ...)
    Projet(P_Id, ...)
    Statut(S_Id, ...)
    Participer(U_Id, P_Id, S_Id)

    Sauf qu'un utilisateur ne peut avoir qu'un statut dans un projet. L'unicité doit donc porter sur le couple (Utilisateur, Projet) et non pas sur le triplet (Utilisateur, Projet, Statut).

    J'ai donc mis en clé primaire le couple et S_id n'est qu'une simple clé étrangère.

    Est-ce faux ?

    Aurais-je dû laisser le triplet en clé primaire et ajouter une contrainte d'unicité sur le couple ?
    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 !

  17. #17
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 138
    Points : 64
    Points
    64
    Par défaut
    J'ai encore une petite question: dans mon MCD il m'est necessaire d'utiliser l'entité date dans certains endroits, mais dans d'autres endroits il m'est suffisant d'utiliser la date comme attribut, est-il convenable de mettre la date comme attribut, alors qu'on a déjà créer une entité date ??
    Ma question n'est-elle pas claire? j'ai besoin d'une réponse pour avancer ...

  18. #18
    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
    Euh... la réponse est donnée par fsmrel juste un peu plus haut !
    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 !

  19. #19
    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
    Citation Envoyé par CinePhil Voir le message
    [...]un utilisateur ne peut avoir qu'un statut dans un projet. L'unicité doit donc porter sur le couple (Utilisateur, Projet) et non pas sur le triplet (Utilisateur, Projet, Statut).
    J'ai donc mis en clé primaire le couple et S_id n'est qu'une simple clé étrangère.
    Est-ce faux ?
    Aurais-je dû laisser le triplet en clé primaire et ajouter une contrainte d'unicité sur le couple ?
    Au vu de la règle de gestion, quand vous passez au niveau du MLD, la clé primaire de la table Participer doit effectivement être réduite au couple {U_Id, P_Id}, tandis que l’attribut S_Id ne fait l’objet que d’une simple clé étrangère. Vous n’avez donc pas faux.

    Le problème est que vous avez dû intervenir manuellement pour corriger le tir, ce qui n’est pas ce qu’il y a de mieux quand votre MCD devient copieux et que se pose le problème de la maintenance au fil des ans : lors d’une nouvelle dérivation du MCD en MLD, votre successeur n’aura peut-être pas eu l’idée de consulter vos notes consignant vos interventions manuelles.

    Alors, comment produire un MLD sans intervention manuelle ? Disons que c'est AGL dépendant. Par exemple, avec Power AMC, je produirai le MCD suivant (pour des raisons de commodité, je ramène les noms des objets à une lettre) :



    D’où le MLD (correct) produit par l’outil :



    Si vous utilisez Win’Design, pour produire le même MLD, vous pourrez définir une CIF (voyez la FAQ Merise, plus précisément la règle de gestion « pour une Matière, un Candidat ne compose que dans une Salle. ») :



    Le trait en pointillés représente le pivot de la CIF, c'est-à-dire l’association-type impliquée dans cette affaire, pour laquelle on doit vérifier la dépendance fonctionnelle (DF) merisienne U x P → S, qui se traduira au niveau MLD par la DF relationnelle non triviale et irréductible {UId, PId} → {Sid}, prouvant que le couple {UId, PId} est clé candidate de la table R.
    (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.

  20. #20
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 138
    Points : 64
    Points
    64
    Par défaut
    Euh... la réponse est donnée par fsmrel juste un peu plus haut !
    j'ai pas vu qu'il y a eu une 2ème page, merci pour me l'avoir signaler

    C’est non seulement tout à fait convenable, mais tout à fait recommandé ...
    merci bien pour tes interventions très bien rédigées !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Cardinalité sur association n-aire
    Par Spiff__ dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 30/06/2010, 15h54
  2. [MCD] cardinalité d'une association n-aire
    Par lidou87 dans le forum Schéma
    Réponses: 3
    Dernier message: 22/04/2009, 15h06
  3. [MCD] association n-aire et cardinalité.
    Par new_wave dans le forum Schéma
    Réponses: 2
    Dernier message: 12/04/2009, 19h13
  4. [DC] Implémentation d'une association n-aire (ternaire pour le coup)
    Par Kyrel dans le forum Diagrammes de Classes
    Réponses: 5
    Dernier message: 04/10/2007, 08h58
  5. association n-aire avec PowerAMC ?
    Par sara21 dans le forum PowerAMC
    Réponses: 1
    Dernier message: 25/05/2007, 02h44

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