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 :

Question sur les associations plurielles


Sujet :

Schéma

  1. #1
    Mos
    Mos est déconnecté
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Question sur les associations plurielles
    Bonjour à tous


    Petite question sur les associations plurielles :
    comment modéliser les relations entre une entité brevet et une entité personne (qui comprend les personnes à la fois titulaire et/ou déposant et/ou inventeur d'un brevet) ?

    J'avais pensé faire 3 entités : titulaire, déposant, inventeur (éventuellement avec héritage d'une entité mère "personne"), mais les attributs de ces entités sont les mêmes.

    Or si je fais une seule et unique entité personne... liée à l'entité brevet et 3 associations plurielles, lors du passage au MLD je me retrouve avec 3 fois la même clé dans le fichier "personne". sans savoir comment identifier le rôle de chacun..

    Il doit donc y avoir un problème de modélisation

    Où estc e que je commets une erreur ?

    Merci à tous !
    Images attachées Images attachées  

  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 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
    Si 3 personnes différentes peuvent être respectivement titulaire, déposant et inventeur, la table Brevet doit comporter 3 colonnes (donnant lieu à autant de clés étrangères).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Create table Personne 
    (PsnId     Integer,
     Nom       Char(16),
    Primary Key (PsnId)) ; 
    
    Create table Brevet 
    (BrevetId      Integer,
     DateBrevet    Date,
     TitulaireId   Integer,
     DeposantId    Integer,
     InventeurId   Integer, 
    Primary Key (BrevetId),
    Foreign Key (TitulaireId) References Personne,
    Foreign Key (DeposantId) References Personne,
    Foreign Key (InventeurId) References Personne) ;
    Si à la limite, le titulaire, le déposant et l'inventeur ne font qu'un, vous aurez la même valeur prise par les 3 attributs.

    Si vous voulez connaître le nom par exemple de la personne qui joue le rôle de l'inventeur pour le brevet 1245, il suffit d'une jointure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select x.Nom
    From   Personne x, Brevet y
    Where  y.BrevetId = 1245
    And    x.PsnId = y.InventeurId ;
    Si vous voulez savoir quel(s) rôle(s) joue Marcel concernant le brevet 1245, vous pouvez utiliser l'opérateur Union [All] :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Select x.Nom, 'titulaire' as Role
    From   Personne x, Brevet y
    Where  x.Nom = 'Marcel'
    And    y.BrevetId = 1245
    And    x.PsnId = y.TitulaireId
    Union All
    Select x.Nom, 'déposant' as Role
    From  Personne x, Brevet y
    Where  x.Nom = 'Marcel'
    And    y.BrevetId = 1245
    And    x.PsnId = y.DeposantId
    Union All
    Select x.Nom, 'inventeur' as Role
    From  Personne x, Brevet y
    Where  x.Nom = 'Marcel'
    And    y.BrevetId = 1245
    And    x.PsnId = y.InventeurId ;
    (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 expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    fsmrel t'a répondu au niveau logique et physique.

    Au niveau conceptuel, ton schéma est correct selon moi.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  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 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
    Je confirme l'observation de hed62, votre MCD est correct et le jeu d'instructions CREATE TABLE que je vous ai proposé en est la traduction.

    Je viens de regarder le MLD et le jeu d'instructions produits par l'outil dont semble-t-il vous vous êtes servi : s'il s'agit de celui que je viens de tester, AnalyseSI, vous feriez mieux d'en changer, en attendant qu'il devienne un peu plus respectueux des règles de base de la modélisation !



    Et donc ne soit pas générateur de redondances et d'instructions qui seront rejetées par les SGBD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE personne (psnid char(3) NOT NULL, nom char(16));  
    CREATE TABLE brevet (brevetid char(3) NOT NULL, datebrevet char(10), psnid char(3), psnid char(3), psnid char(3));  
    
    ALTER TABLE personne ADD CONSTRAINT PK_personne PRIMARY KEY (psnid);  
    ALTER TABLE brevet ADD CONSTRAINT PK_brevet PRIMARY KEY (brevetid);  
    
    ALTER TABLE brevet ADD CONSTRAINT FK_brevet_psnid FOREIGN KEY (psnid) REFERENCES personne (psnid);  
    ALTER TABLE brevet ADD CONSTRAINT FK_brevet_psnid FOREIGN KEY (psnid) REFERENCES personne (psnid);  
    ALTER TABLE brevet ADD CONSTRAINT FK_brevet_psnid FOREIGN KEY (psnid) REFERENCES personne (psnid);
    => Très désinvolte AnalyseSI.
    (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
    Mos
    Mos est déconnecté
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    OK c'est bien ce que je pensais !

    J'imagine qu'un outil comme PowerAMC génère des identifiants différents pour chaque clé étrangères ?

  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
    J'imagine qu'un outil comme PowerAMC génère des identifiants différents pour chaque clé étrangères ?
    PowerAMC donne effectivement des noms distincts aux attributs participant à la composition des clés étrangères, dès lors qu'il y a homonymie. Même chose pour Win'Design.
    (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. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49
  2. question sur les vertex buffer et index buffer
    Par airseb dans le forum DirectX
    Réponses: 9
    Dernier message: 25/08/2003, 02h38
  3. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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