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 :

Aide sur un diagramme entité-association


Sujet :

Schéma

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut Aide sur un diagramme entité-association
    Bonjour,

    je galère toujours autant en conception et malgré les méthodes et les diagrammes je ne trouve pas les choses très triviales

    je dois concevoir une application qui sera une sorte d'ETL qui importera les données de différentes base de données via des API pour les mettre à disposition sous forme csv.
    Ces imports seront réalisés automatiquement chaque jour sous forme de tâche programmée.

    je développe en Python/Django.

    J'ai identifié les différentes entités :
    - user : la table des utilisateurs du module d'authentification natif du framework Django
    - profil : qui me permet d'ajouter des informations de profil à mes utilisateurs
    - country, region et site : pour localiser les utilisateurs dans des sites de recherches
    - Study : enregistrement d'une étude sur laquelle travaille un utilisateur
    - Database : les bases de données pour une étude données
    - Table : les différentes tables qui compose une base de données

    Un utilisateur a un profil et un seul.
    Un utilisateur appartient à un site et un seul.
    Un pays est composé de régions (au moins une) elles-même composées de sites (au moins un).
    Une étude peut avoir plusieurs bases de données (au moins une) et chaque base de données est composée d'au moins une table.

    Un utilisateur peut travailler sur plusieurs étude ou aucune (au moment de la création de son compte).
    Plusieurs utilisateurs peuvent travailler sur la même étude.
    Un utilisateur peut télécharger les données de aucune ou plusieurs tables.
    Plusieurs utilisateurs peuvent télécharger les mêmes données/tables.

    La gestion des droits de téléchargement se fait au niveau d'une table et par utilisateur.
    Un utilisateur ne peut télécharger les données d'une table uniquement si cette table appartient à une base de données d'une étude sur laquelle il travaille.


    Ci-dessous le modèle entité-association que j'ai produit.
    d'avance merci pour vos conseils.

    Nom : diagram_EA.png
Affichages : 6935
Taille : 66,3 Ko

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

    Si votre application est destinée a des francophones, dans votre MCD évitez les termes anglais (country, user, etc.)
    Evitez les mots réservés SQL tels que "user", sinon vous aurez des surprises.

    A pat "user", chaque entité-type a un identifiant nommé "ide", c’est troublant. Merci d’expliquer précisément de quoi il en retourne.

    Utilisez un AGL pour modéliser, en l’occurrence le plus convivial et le plus sûr, à savoir Looping, gracieusement proposé par le professeur Patrick Bergougnoux (merci Paprick !)
    (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 régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    Bonjour,


    merci pour votre aide
    en fait j'utilise le framework Django et son 'module' d'authentification et donc la table utilisateur s'appelle User (auth_user) c'est pour cela que j'ai voulu homogénéiser la nomenclature en anglais

    je ne peut donc pas modifier la table User dont la clé primaire est id
    dans mon équipe, on utilise une nomenclature pour le nom des attributs (que je n'ai pas forcément respecté ici pour être plus parlant)
    - noms de tables XXX_XXX : CRF_INC pour la fiche (case report form) inclusion, ADM_XXX pour les table administration, etc...
    - nom des attributs XXX_XXX en reprenant une partie du nom de la table : INC_DAT pour la date d'inclusion dans la fiche inclusion
    - par contre les identifiants des tables sont nommés IDE

    j'ai essayé looping par curiosité mais je n'ai pas à créer les scripts sql de création de ma base car Django s'en charge
    par ailleurs, il bloque certaines associations, notamment l'association User-Profil pour laquelle je dois avoir des cardinalités 1,1 de chaque côté (en fait je sais que cela reviens à avoir une seule entité mais encore une fois l'utilisation de Django l'impose)

  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
    Vous fournissez la règle suivante « Un utilisateur a un profil et un seul ». Quelle est sa contrepartie ? Selon votre MCD, un profil fait référence a au moins et au plus un utilisateur. Si cela représente la règle, alors il y a bijection entre les entités-types user et profil, ce qui est source de bien des difficultés et d'erreurs d’intégrité. Le moins mauvais serait peut-être de modéliser ainsi :

    [user]---0,1---(has)---1,1---[profil]

    C’est-à-dire d’admettre qu’un utilisateur n’a pas nécessairement de profil. Sinon, l’entité-type user devrait absorber l’entité-type profil. A vous de voir.

    Que signifie la présence de l’astérisque à la suite de user ? (cf. entité-type user).
    (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
    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 OZ1977 Voir le message
    […]je n'ai pas à créer les scripts sql de création de ma base car Django s'en charge
    par ailleurs, il bloque certaines associations, notamment l'association User-Profil pour laquelle je dois avoir des cardinalités 1,1 de chaque côté (en fait je sais que cela reviens à avoir une seule entité mais encore une fois l'utilisation de Django l'impose)
    Mon message précédent est parti quand je n’avais pas encore reçu votre réponse, d’où quelques redondances et quiproquos, mais ça n’est pas un problème. Quoi qu’il en soit, je serais curieux de voir le script SQL fourni par Django…
    (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
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour

    Je ne sais pas ce que représente la notion de "site" peut-être un établissement ?
    Sauf s'il s'agit d'un site genre "site de fouilles", "col du Galibier" ou encore "lac des Settons", le site correspond à une adresse postale.
    En ce cas, il faut attacher le site à une adresse, elle même localisée dans une ville, ville située dans une région, région appartenant à un pays.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Vous fournissez la règle suivante « Un utilisateur a un profil et un seul ». Quelle est sa contrepartie ? Selon votre MCD, un profil fait référence a au moins et au plus un utilisateur. Si cela représente la règle, alors il y a bijection entre les entités-types user et profil, ce qui est source de bien des difficultés et d'erreurs d’intégrité. Le moins mauvais serait peut-être de modéliser ainsi :

    [user]---0,1---(has)---1,1---[profil]

    C’est-à-dire d’admettre qu’un utilisateur n’a pas nécessairement de profil. Sinon, l’entité-type user devrait absorber l’entité-type profil. A vous de voir.

    Que signifie la présence de l’astérisque à la suite de user ? (cf. entité-type user).
    Je suis d'accord pour ce qui concerne l'intégrité, mais le plus souvent, un profil peut être rattaché à plusieurs personnes, c'est ce qui permet de gérer facilement les habilitations liées au profil et non pas à chaque personne (ce qui serait très fastidieux dans une grosse organisation ayant beaucoup de collaborateurs).
    Le modèle le plus fréquent est donc
    [user]---1,1---(has)---0,n---[profil]

  8. #8
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    dans mes applications, lorsque l'on créé un utilisateur, une instance de profil rattachée à cet utilisateur est automatiquement créé

    en dehors de cette partie du diagramme, le reste vous parait-il cohérent ?

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    
    BEGIN;
    --
    -- Create model Permission
    --
    CREATE TABLE "auth_permission" ("id" serial NOT NULL PRIMARY KEY, "name" varchar(50) NOT NULL, "content_type_id" integer NOT NULL, "codename" varchar(100) NOT NULL);
    --
    -- Create model Group
    --
    CREATE TABLE "auth_group" ("id" serial NOT NULL PRIMARY KEY, "name" varchar(80) NOT NULL UNIQUE);
    CREATE TABLE "auth_group_permissions" ("id" serial NOT NULL PRIMARY KEY, "group_id" integer NOT NULL, "permission_id" integer NOT NULL);
    --
    -- Create model User
    --
    CREATE TABLE "auth_user" ("id" serial NOT NULL PRIMARY KEY, "password" varchar(128) NOT NULL, "last_login" timestamp with time zone NOT NULL, "is_superuser" boolean NOT NULL, "username" varchar(30) NOT NULL UNIQUE, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL, "email" varchar(75) NOT NULL, "is_staff" boolean NOT NULL, "is_active" boolean NOT NULL, "date_joined" timestamp with time zone NOT NULL);
    CREATE TABLE "auth_user_groups" ("id" serial NOT NULL PRIMARY KEY, "user_id" integer NOT NULL, "group_id" integer NOT NULL);    
    CREATE TABLE "auth_user_user_permissions" ("id" serial NOT NULL PRIMARY KEY, "user_id" integer NOT NULL, "permission_id" integer NOT NULL);
    ALTER TABLE "auth_permission" ADD CONSTRAINT "auth_permission_content_type_id_2f476e4b_fk_django_co" FOREIGN KEY ("content_type_id") REFERENCES "django_content_type" ("id") DEFERRABLE INITIALLY DEFERRED;
    ALTER TABLE "auth_permission" ADD CONSTRAINT "auth_permission_content_type_id_codename_01ab375a_uniq" UNIQUE ("content_type_id", "codename");
    CREATE INDEX "auth_permission_content_type_id_2f476e4b" ON "auth_permission" ("content_type_id");
    CREATE INDEX "auth_group_name_a6ea08ec_like" ON "auth_group" ("name" varchar_pattern_ops);
    ALTER TABLE "auth_group_permissions" ADD CONSTRAINT "auth_group_permissions_group_id_b120cbf9_fk_auth_group_id" FOREIGN KEY ("group_id") REFERENCES "auth_group" ("id") DEFERRABLE INITIALLY DEFERRED;
    ALTER TABLE "auth_group_permissions" ADD CONSTRAINT "auth_group_permissio_permission_id_84c5c92e_fk_auth_perm" FOREIGN KEY ("permission_id") REFERENCES "auth_permission" ("id") DEFERRABLE INITIALLY DEFERRED;
    ALTER TABLE "auth_group_permissions" ADD CONSTRAINT "auth_group_permissions_group_id_permission_id_0cd325b0_uniq" UNIQUE ("group_id", "permission_id");
    CREATE INDEX "auth_group_permissions_group_id_b120cbf9" ON "auth_group_permissions" ("group_id");
    CREATE INDEX "auth_group_permissions_permission_id_84c5c92e" ON "auth_group_permissions" ("permission_id");
    CREATE INDEX "auth_user_username_6821ab7c_like" ON "auth_user" ("username" varchar_pattern_ops);
    ALTER TABLE "auth_user_groups" ADD CONSTRAINT "auth_user_groups_user_id_6a12ed8b_fk_auth_user_id" FOREIGN KEY ("user_id") REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED;
    ALTER TABLE "auth_user_groups" ADD CONSTRAINT "auth_user_groups_group_id_97559544_fk_auth_group_id" FOREIGN KEY ("group_id") REFERENCES "auth_group" ("id") DEFERRABLE INITIALLY DEFERRED;
    ALTER TABLE "auth_user_groups" ADD CONSTRAINT "auth_user_groups_user_id_group_id_94350c0c_uniq" UNIQUE ("user_id", "group_id"); 
    CREATE INDEX "auth_user_groups_user_id_6a12ed8b" ON "auth_user_groups" ("user_id");
    CREATE INDEX "auth_user_groups_group_id_97559544" ON "auth_user_groups" ("group_id");
    ALTER TABLE "auth_user_user_permissions" ADD CONSTRAINT "auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id" FOREIGN KEY ("user_id") REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED;
    ALTER TABLE "auth_user_user_permissions" ADD CONSTRAINT "auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm" FOREIGN KEY ("permission_id") REFERENCES "auth_permission" ("id") DEFERRABLE INITIALLY DEFERRED;
    ALTER TABLE "auth_user_user_permissions" ADD CONSTRAINT "auth_user_user_permissions_user_id_permission_id_14a6b632_uniq" UNIQUE 
    ("user_id", "permission_id");
    CREATE INDEX "auth_user_user_permissions_user_id_a95ead1b" ON "auth_user_user_permissions" ("user_id");
    CREATE INDEX "auth_user_user_permissions_permission_id_1fbb5f2c" ON "auth_user_user_permissions" ("permission_id");
    COMMIT;
    
    
    BEGIN;
    
    -- Create model Profile
    --
    CREATE TABLE "adm_pro" ("deleted" timestamp with time zone NULL, "pro_ide" serial NOT NULL PRIMARY KEY, "site_id" integer NOT NULL, "user_id" integer NOT NULL 
    UNIQUE);
    
    COMMIT;

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Ce n'est pas très pratique de valider le modèle en partant du DDL, la présentation du MCD est autrement plus conviviale.
    La plupart des logiciels de modélisation permettent de reconstituer le MCD à partir du DDL.
    Je n'ai jamais tenté l'opération avec Looping, à tester @François, l'as-tu testé ?

    EDIT : @OZ1977 vous n'avez pas répondu à ma question sur les sites (post n°6)

  10. #10
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    EDIT @escartefigue: ma réponse ci-dessous à la notion de site que l'on utilise
    ici un site correspond bien à un établissement (centre de recherche, hôpital, etc...) ; on n'accepte qu'un site par utilisateur même si en théorie, un utilisateur pourrait travailler dans 2 établissements on ne l'accepte pas car on gère les droits d'accès en fonction du site de rattachement
    on n'a pas besoin de l'adresse postale

    ici profil ne correspond pas à la définition de profil donné par escartefigue ; ici, il s'agit simplement d'étendre le modèle User dont la structure est définie par le framework Djago. Et l'une des pratiques courantes en Django est d'associer un autre modèle (Profil) avec une relation "OnetoOne"


    je suis un peu perdu avec toutes les méthodlogies (UML, Merise) et tous les diagrammes...
    j'ai fournit le script SQL que Django utilise pour les tables User et Profil pour répondre à la question de fsmrel sur comment gère DJango

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par OZ1977 Voir le message
    ici un site correspond bien à un établissement (centre de recherche, hôpital, etc...) ; on n'accepte qu'un site par utilisateur même si en théorie, un utilisateur pourrait travailler dans 2 établissements on ne l'accepte pas car on gère les droits d'accès en fonction du site de rattachement
    En ce cas, la remarque de ma réponse n°6 s'applique, le site est rattaché à une adresse dans une ville etc.


    Citation Envoyé par OZ1977 Voir le message
    if profil ne correspond pas à la définition de profil donné par escartefigue est différente ; ici, il s'agit simplement d'étendre le modèle User dont la structure est définie parle framework. Et l'une des pratiques courantes en Django est d'associer un autre modèle (Profil) avec une relation "OnetoOne"
    D'après le MCD, les habilitations sont bien rattachées au profil, du coup, il faut créer autant d'habilitions qu'il y a de personnes.
    Travail de titan dans une multinationale, surtout quand il s'agit de modifier les droits en masse de toutes les personnes ayant le même profil
    Je ne connais pas Django, mais le modèle de données ne doit pas s'adapter au traitement, le modèle de données traduit la réalité des liens entre les objets de gestion (les utilisateurs, les profils...), le traitement doit ensuite s'adapter au modèle de données.
    Le bon modèle pour les utilisateurs et leurs profils est bien celui que j'ai proposé plus haut : utilisateur attaché à un profil, profil en lien avec une ou plusieurs habilitations

  12. #12
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    je comprends et vous avez probablement raison
    on a essayé de travailler avec des profils dans le temps et çà devenait vite un casse-tête pour définir des profils qui satisfassent les demandes de tous
    on a trouvé plus simple d'affecter les droits par utilisateur pour faire du "sur-mesure"
    dans une étude on va avoir <50 utilisateurs donc certes c'est du travail mais c'est gérable car on initialise les droits en début d'étude et ensuite ce sont simplement des modifications au cas par cas

    donc en gros, je me rends compte que je pourrais tout aussi bien supprimer le modèle Profil et rattacher un User à un Site

    ce que je souhaite :
    j'ai une liste d'utilisateurs :
    - User 1
    - User 2
    - User 3
    - ...


    et une liste de tables pour chacune des études et base de données associées :
    - table 1 (Study 1 - Database 1)
    - table 2 (Study 1 - Database 1)
    - table 3 (Study 2 - Database 3)
    - table 4 (Study 2 - Database 4)
    - table 5 (Study 2 - Database 4)
    - table 6 (Study 3 - Database 5)

    je veux modéliser par exemple que:
    - User 1 peut télécharger les données de table 1 mais pas table 2 - sachant que User 1 travaille sur Study 1
    - User 2 peut télécharger les données de table 3 et table 6 mais pas table 4 - sachant que User 2 travaille sur Study 1 et Study 3
    - User 3 ne peut rien télécharger car il ne travaille sur aucune des études présentent en base
    - ...

    donc je veux pouvoir affecter les droits de téléchargement table par table (il faut que j'ajoute un attribut "autorisé" de type booléen dans l'association can download je pense)

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    La gestion des droits sur les objets base de données n'est pas à prendre en considération lors de la modélisation conceptuelle des données.

    Et il n'est pas nécessaire de créer des tables différentes en fonction des droits à accorder.

    Par exemple, pour une même table, vous pouvez :

    • attribuer des droits en mise à jour (select, update, insert, delete) à certains utilisateurs ;
    • attribuer des droits en lecture et ajout (select, insert) à d'autres utilisateurs ;
    • attribuer des droits en lecture seulement (select) à encore d'autres utilisateurs ;
    • n'attribuer aucun droits aux autres.



    La gestion des droits s'opère avec les ordres GRANT et REVOKE.
    On peut autoriser (GRANT) l'accès à toutes les colonnes (par défaut) ou seulement une liste de colonnes d'une table.

    Pour éviter de multiplier les tables, vous pouvez créer différentes vues sur la même table, puis accorder des droits sur la vue V1 à une liste d'utilisateurs, d'autres droits sur V2 à une autre liste d'utilisateurs etc. Chaque vue sera filtrante sur le sous-ensemble associé au site de l'utilisateur et le tour est joué

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

    Repassons par la case départ, en reprenant votre MCD et vos exemples :

    Citation Envoyé par OZ1977 Voir le message
    - User 1 peut télécharger les données de table 1 mais pas table 2 - sachant que User 1 travaille sur Study 1
    - User 2 peut télécharger les données de table 3 et table 6 mais pas table 4 - sachant que User 2 travaille sur Study 1 et Study 3
    - User 3 ne peut rien télécharger car il ne travaille sur aucune des études présentent en base
    - ...
     

    De ce qui précède, on peut inférer le MCD suivant :

    Nom : OZ1977(droits)a.png
Affichages : 1059
Taille : 8,7 Ko

    Où l’association UTI_TAB permet de définir les droits des utilisateurs sur les tables (j’ai renommé TABLE en TABLEAU car TABLE est un mot réservé SQL). Il est important de noter (par référence à votre propre MCD) qu’une table détermine une base et qu’une base détermine une étude : on sait donc ainsi quelles études concernent chaque utilisateur. Les droits d’un utilisateur donné sur une table donnée (insert, update, etc..) peuvent être définis à partir de UTI_TAB, en relation avec un catalogue des droits).
    (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 escartefigue Voir le message
    La plupart des logiciels de modélisation permettent de reconstituer le MCD à partir du DDL.
    Je n'ai jamais tenté l'opération avec Looping, à tester @François, l'as-tu testé ?
    Je ne sache pas que Looping permette de faire de la rétro-conception, mais Paprick a certainement cette idée en tête…
    (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 escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Allez Paprick, allez Paprick, allez...

  17. #17
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Allez Paprick, allez Paprick, allez...
    J'y pense, j'y pense !
    Une proposition de MCD sur la base d'un DDL correctement écrit (ce qui n'est pas forcément facile à exporter pour certains SGBD) est à l'étude...
    Peut-être pour une version 3.3 en fin d'année (il y a déjà une 3.2 en préparation pour la rentrée de septembre avec, entre autres, l'urbanisation des grands modèles).
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/12/2020, 23h09
  2. aide sur un diagramme de classe UML
    Par pascal91 dans le forum Diagrammes de Classes
    Réponses: 7
    Dernier message: 29/12/2008, 19h19
  3. aide sur mon diagramme de Class
    Par Maria1505 dans le forum Diagrammes de Classes
    Réponses: 9
    Dernier message: 30/07/2007, 11h00
  4. [Séquence] un aide sur le diagramme de sequence
    Par Mounr dans le forum Autres Diagrammes
    Réponses: 2
    Dernier message: 19/06/2007, 13h45
  5. demande de conseil sur le modèle entité/association
    Par amandiiiiiine dans le forum Access
    Réponses: 3
    Dernier message: 02/01/2007, 00h34

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