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 :

liste d'amis et listes noires [MCD]


Sujet :

Schéma

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut liste d'amis et listes noires
    voici un article sur toad data modeler.

    http://blog.developpez.com/ylarvor/p...data/#more8292

    j'ai rencontré quand meme un problème avec ce schéma, il m'était demandé de modeliser une liste d'amis pour les membres et une liste noire de membres rejeté.

    je n'ai pas réussi à modeliser ceci avec toad data modeler; pouvez vous m'indiquer comment vous feriez cela avec power amc au moins.

    je vois cela comme une relation n-m autoreferencé mais je me trompe surement.

    il s'agit d'une table liste noire avec ID Membre et ID Membre rejete comme cle.

    merci de toute aide qui pourra m'être apporté sur ce problème...

  2. #2
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Une association de membre vers membre qui s'appelle amis et une rubrique dans membre qui serait un booléen pour liste noire.
    C'est ce que tu recherches ?
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    c'est possible que cela réponde au besoin. mon besoin est simple. il s'agit de permettre au membre de noter que tel personne est son ami, tel autre, elle ne veut plus en entendre parler ( liste noire ).
    De toute façon, je ne pense pas qu'il soit possible de faire une relation membre vers membre avec toad data modeler.
    merci pour l'aide, je vais essayer de creuser...

  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 057
    Points
    2 057
    Par défaut
    Bonjour,

    Citation Envoyé par ylarvor Voir le message
    je n'ai pas réussi à modeliser ceci avec toad data modeler; pouvez vous m'indiquer comment vous feriez cela avec power amc au moins.
    Le choix de l'outil n'est pas en cause. On y arrive aussi bien avec l'un qu'avec l'autre.


    Citation Envoyé par ylarvor Voir le message
    je vois cela comme une relation n-m autoreferencé mais je me trompe surement.
    il s'agit d'une table liste noire avec ID Membre et ID Membre rejete comme cle.
    Non, tu ne te trompes pas. C'est bien comme cela qu'il faut modéliser cette contrainte.


    En résumé il y a 2 questions :
    1) Comment faut-il modéliser l'association réflexive : [0,1 - 0,n] (a) ou [0,n - 0,n] (b) ?
    2) L'outil sait-il modéliser l'un et l'autre ?


    1) Modélisation
    Cas a
    MCD : [ Membre ]--0,1----( )----0,n--[ Membre ]
    MLD : On obtient un lien réflexif du type "Identifying Relationship" (Toad Data Modeler) qui induit la création d'une clé étrangère id_membre, qu'il est préférable de renommer en id_membre_ami.


    Cas b
    MCD : [ Membre ]--0,n----( Liste_Amis )----0,n--[ Membre ]
    MLD : On obtient une table identifiée par le couple {id_membre, id_membre}.


    Quel cas répond-il au besoin ?
    Avec le Cas a, si le membre M1 a deux amis, M2 et M3, cette liste doit être constituée en interrogeant les lignes de la table Membre dont l'ami (la clé étrangère) a pour valeur "M1".
    Si M2 a lui aussi deux amis qui sont M1 et M3, cette liste est constituée comme pour M1. Le problème, c'est que M3 a déjà "M1" dans la clé étrangère id_membre_ami ---> M3 ne peut donc figurer que dans 1 seule liste d'amis. Ce n'est donc pas la bonne modélisation.

    Le bon modèle est donc celui du Cas b : une table listant les couples d'amis.


    Citation Envoyé par Elwyn Voir le message
    Une association de membre vers membre qui s'appelle amis et une rubrique dans membre qui serait un booléen pour liste noire.
    La liste d'amis et la liste noire fonctionnent de la même manière. Il faut donc une table dans les deux cas.

    Le booléen dans la table Membre indiquerait que M1, par exemple, est sur une liste noire, oui, mais de qui ??? Ou alors qu'il a une liste noire ? Mais dans ce cas, comment en retrouver les membres ?


    2) Possibilités de l'outil
    TDM sait faire les deux. Pour le Cas a, il faut choisir "Self Relationship" (barre d'outils "ERD Objects"). Pour le Cas b, il faut créer une table sans colonne puis ajouter deux "Identifying Relationship" à partir de Membre.
    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
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 : 7 965
    Points : 30 774
    Points
    30 774
    Billets dans le blog
    16
    Par défaut
    Bonjour,


    Citation Envoyé par ylarvor Voir le message
    je ne pense pas qu'il soit possible de faire une relation membre vers membre avec toad data modeler.
    On peut utiliser des relations réflexives avec Toad Data Modeler. Ceci fonctionne avec la version 3 du produit (mais très mal avec la version 2).

    Ci-joint un exemple, dans lequel l’entité-type Membre est connectée à elle-même par le biais de deux associations-types réflexives, une pour les amis et une pour la liste noire.

    Schéma 1 (MCD)


    Schéma 2 (MLD)


    A noter que suite à la dérivation du 1er schéma (MCD), le 2e schéma (MLD) doit subir une légère modification. En effet, l’outil génère deux fois le même nom MbrId (table Membre_Pote, même chose pour la table Membre_PasPote), et il faut donc en renommer un manuellement. Il existe peut-être une option pour éviter les noms en double, mais je n’ai pas cherché.

    SQL généré :

    Code SQL : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    CREATE TABLE [Membre]
    (
     [MbrId] Char(4) NOT NULL,
     [Nom] Varchar(32) NOT NULL
    )
    go
    ALTER TABLE [Membre] ADD CONSTRAINT [Unique_Identifier3] PRIMARY KEY ([MbrId])
    go
    CREATE TABLE [Membre_PasPote]
    (
     [MbrId] Char(4) NOT NULL,
     [MbrPasPoteId] Char(4) NOT NULL
    )
    go
    ALTER TABLE [Membre_PasPote] ADD CONSTRAINT [Key1] PRIMARY KEY ([MbrId],[MbrPasPoteId])
    go
    CREATE TABLE [Membre_Pote]
    (
     [MbrId] Char(4) NOT NULL,
     [MbrPoteId] Char(4) NOT NULL
    )
    go
    ALTER TABLE [Membre_Pote] ADD CONSTRAINT [Key3] PRIMARY KEY ([MbrId],[MbrPoteId])
    go
    ALTER TABLE [Membre_PasPote] ADD CONSTRAINT [Membre_ListeNoire] FOREIGN KEY ([MbrPasPoteId]) REFERENCES [Membre] ([MbrId])
    go
    ALTER TABLE [Membre_PasPote] ADD CONSTRAINT [Membre_L] FOREIGN KEY ([MbrPasPoteId]) REFERENCES [Membre] ([MbrId]) ON DELETE CASCADE
    go
    ALTER TABLE [Membre_Pote] ADD CONSTRAINT [Membre_Amis] FOREIGN KEY ([MbrPoteId]) REFERENCES [Membre] ([MbrId])
    go
    ALTER TABLE [Membre_Pote] ADD CONSTRAINT [Membre_A] FOREIGN KEY ([MbrPoteId]) REFERENCES [Membre] ([MbrId]) ON DELETE CASCADE
    go
    (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.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut toad data modeler
    merci à tous les deux pour cette demonstration, je vais essayer de modifier mon schéma avec vos explications.

    j'ai essaye de faire une identifying relation de membres vers membres avec la version 2, je n'y arrive pas!

    il faudrait recommencer mon modèle, créer un mcd, en version 3.4 trial.

    bonne soiree.

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


    Citation Envoyé par ylarvor Voir le message
    j'ai essaye de faire une identifying relation de membres vers membres avec la version 2, je n'y arrive pas!
    Normal, car L’auteur de la V2 n’a rien compris à l’indépendance des concepts en modélisation.

    Cela dit, en termes de réflexivité, vous devez pour votre part modéliser un graphe (plusieurs à plusieurs : N-M) et l’auteur de la V2 vous l’interdit...

    Pour contourner, et faire comme en V3 :

    Créez un MCD comme ci-dessous. Le seul problème est que vous avez deux fois l’attribut MbrId et que vous n’avez pas le droit de faire comme en V3, c'est-à-dire de remplacer le nom du doublon par MbrPoteId. Même pas grave, parce que vous avez le droit de remplacer la valeur de Column name. Sitôt dit, sitôt fait et vous y inscrivez la valeur 'MbrPoteId'. Le MCD :



    Quand vous quittez la fenêtre, vous aurez droit au message :
    Vous répondez 'Yes'. Par la suite, vous en ferez autant à chaque fois que vous aurez droit à cet avertissement.

    Quand vous cochez View\Physical view, vous voyez le MLD suivant :



    C’est tout bon. Vous pouvez demander la génération du script (j'ai choisi MS SQL Server) :

    Code SQL : 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
    18
    Create table [Membre]
    (
    	[MbrId] Char(4) NOT NULL,
    	[MbrNom] Varchar(32) NOT NULL,
    Primary Key ([MbrId])
    ) 
    go
    Create table [Membre_Pote]
    (
    	[MbrId] Char(4) NOT NULL,
    	[MbrPoteId] Char(4) NOT NULL,
    Primary Key ([MbrId],[MbrPoteId])
    ) 
    go
    Alter table [Membre_Pote] add  foreign key([MbrId]) references [Membre] ([MbrId])  on update no action on delete cascade 
    go
    Alter table [Membre_Pote] add  foreign key([MbrPoteId]) references [Membre] ([MbrId])  on update no action on delete no action 
    go
    (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.

  8. #8
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 : 7 965
    Points : 30 774
    Points
    30 774
    Billets dans le blog
    16
    Par défaut
    En complément, toujours avec la V2.

    Pour modéliser une hiérarchie, vous pouvez procéder ainsi et éviter les réflexives :

    MCD




    MLD




    Script généré :

    Code SQL : 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
    18
    Create table [Membre]
    (
    	[MbrId] Char(4) NOT NULL,
    	[MbrNom] Varchar(32) NOT NULL,
    Primary Key ([MbrId])
    ) 
    go
    Create table [Membre_Pote]
    (
    	[MbrId] Char(4) NOT NULL,
    	[MbrPoteId] Char(4) NOT NULL,
    Primary Key ([MbrId])
    ) 
    go
    Alter table [Membre_Pote] add  foreign key([MbrId]) references [Membre] ([MbrId])  on update no action on delete cascade 
    go 
    Alter table [Membre_Pote] add  foreign key([MbrPoteId]) references [Membre] ([MbrId])  on update no action on delete no action 
    go
    (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. [AJAX] liste liée a une liste liée a une liste
    Par dirty_harry dans le forum AJAX
    Réponses: 2
    Dernier message: 03/07/2009, 12h18
  2. Accéder à ma liste d'amis
    Par koKoTis dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 3
    Dernier message: 13/11/2007, 12h31
  3. [Conception] Une liste d'amis
    Par Attilius dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 01/08/2006, 11h12
  4. [Bug] Liste d'amis
    Par hamster dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 16/05/2006, 20h31

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