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 :

Répertoire téléphonique


Sujet :

Schéma

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de debutant001
    Profil pro
    Eric
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Eric

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut Répertoire téléphonique
    Bonjour à tous,

    En espérant être dans le bon forum...

    Je suis en train de me former sur la conception de bdd via la méthode Merise.
    Pour cela, je potasse ce bouquin et qq tutos, comme celui-ci par ex.
    Aussi pour mettre en application ce que j'ai appris, je voudrais réaliser un répertoire téléphonique. (projet classique certes, mais comme j'en ai besoin pourquoi ne pas commencer par ça ?)

    Avant de partir dans la réalisation du MCD, j'ai réalisé un dictionnaire des données et je souhaiterais qu'une personne d'expérimentée en SGBDR me dise si celui-ci est correct, judicieux, etc... (histoire d'avoir une bonne base de travail, et ainsi ne pas me diriger droit dans un mur)

    Je suis parti du "cahier des charges" suivant :

    • On connaît obligatoirement au moins un N° de téléphone (fixe ou portable) ainsi que les titres, prénoms ou pseudos (et si possible les catégories et noms de famille) de chacune des personnes inscrites dans cet annuaire.
    • Les numéros de téléphone seront présentés sous la forme : 01 23 45 67 89
    • Une personne peut avoir zéro, une ou plusieurs adresses postales qui seront alors identifiées comme « Adresse principale » ou « Adresse secondaire » ou « Adresse pro ».
    • Une personne peut avoir zéro, une ou plusieurs téléphones fixes qui seront alors identifiés comme « Téléphone perso » ou « Téléphone pro ».
    • Une personne peut avoir plusieurs téléphones portables qui seront alors identifiés comme « Téléphone perso » ou « Téléphone pro ».
    • Une personne peut avoir zéro, un ou plusieurs pseudos.
    • Une personne peut avoir zéro, une ou plusieurs adresses mails qui seront alors identifiées comme « Adresse mail perso » ou « Adresse mail pro ».
    • Une personne peut avoir zéro, un ou plusieurs sites web qui seront alors identifiés comme « Site web perso » ou « Site web pro ».
    • Une personne peut avoir zéro ou une date de naissance qui sera alors présentée sous la forme : JJ-MM-AAAA
    • On pourra éventuellement noter quelques observations à propos d'une personne. (255 caractères max)


    Voici le dictionnaire des données que j'ai établi :

    • Table tUser :

    Code mnémonique Désignation Type Taille Remarques
    use_i_id Identifiant numérique d'un inscrit N 3
    use_e_titre Civilité d'un inscrit E 3 possibilités : M. ou Mme ou Mlle
    use_s_nom Nom de famille d'un inscrit A 30
    use_s_prenom Prénom d'un inscrit A 30
    use_d_naissance Date de naissance d'un inscrit Date 10 Au format JJ-MM-AAAA

    • Table tCommentaire :

    Code mnémonique Désignation Type Taille Remarques
    com_i_id Identifiant numérique du commentaire à propos d'un inscrit N 1
    com_s_contenu Contenu du commentaire à propos d'un inscrit AN 255 255 caractères max

    • Table tCategorie :

    Code mnémonique Désignation Type Taille Remarques
    cat_i_id Identifiant numérique de la catégorie d'un inscrit N 2
    cat_e_libelle Libellé de la catégorie d'un inscrit E 6 possibilités : famille ou ami ou pro ou modèle ou photographe ou autre

    • Table tAdresse :

    Code mnémonique Désignation Type Taille Remarques
    adr_i_id Identifiant numérique de l'adresse postale d'un inscrit N 4
    adr_s_numero Numéro de la rue où habite un inscrit AN 3
    adr_s_rue Nom de la rue où habite un inscrit AN 30
    adr_s_ville Nom de la ville où habite un inscrit A 30
    adr_s_cp Code postal de la ville où habite un inscrit AN 5
    adr_s_pays Pays où habite un inscrit A 30
    adr_e_categorie Catégorie de l'adresse postale d'un inscrit E 3 possibilités : principale ou secondaire ou pro

    • Table tMail :

    Code mnémonique Désignation Type Taille Remarques
    mai_i_id Identifiant numérique de l'adresse mail d'un inscrit N 4
    mai_s_adresse Adresse mail d'un inscrit AN 30
    mai_e_categorie Catégorie de l'adresse mail d'un inscrit E 2 possibilités : pro ou perso

    • Table tSite :

    Code mnémonique Désignation Type Taille Remarques
    sit_i_id Identifiant numérique du site web d'un inscrit N 4
    sit_s_url URL du site web d'un inscrit AN 80
    sit_e_categorie Catégorie du site web d'un inscrit E 2 possibilités : pro ou perso

    • Table tFixe :

    Code mnémonique Désignation Type Taille Remarques
    fix_i_id Identifiant numérique du téléphone fixe d'un inscrit N 4
    fix_s_numero Numéro de téléphone fixe d'un inscrit AN 15
    fix_e_categorie Catégorie du numéro de téléphone fixe d'un inscrit E 2 possibilités : pro ou perso

    • Table tMobile :

    Code mnémonique Désignation Type Taille Remarques
    mob_i_id Identifiant numérique du téléphone mobile d'un inscrit N 4
    mob_s_numero Numéro de téléphone mobile d'un inscrit AN 15
    mob_e_categorie Catégorie du numéro de téléphone mobile d'un inscrit E 2 possibilités : pro ou perso

    • Table tPseudo :

    Code mnémonique Désignation Type Taille Remarques
    pse_i_id Identifiant numérique du pseudo d'un inscrit N 4
    pse_s_libelle Libellé du pseudo d'un inscrit AN 30

    Légende :

    xxx = clé primaire
    A = donnée alphabétique
    N = donnée numérique
    AN = donnée alphanumérique
    E = donnée énumérée

    Pour info, j'ai crée une table séparée dédiée uniquement aux commentaires d'après les remarques lues ici.

    Voilà,
    N'hésitez pas à critiquer et commenter mon travail (de novice )

    En vous remerciant par avance pour vos conseils,
    Cordialement
    Eric

  2. #2
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 212
    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 212
    Billets dans le blog
    16
    Par défaut
    Bonsoir Éric,


    Votre approche est bonne. Bien souvent les intervenants « balancent » des MCD sans présenter leur sujet, et les règles de gestion des données : là au moins on peut vous donner 20/20 : vous pouvez vous lancer dans la réalisation d’un MCD.

    Quelques remarques :

    1) Il est courant (mais ça n’est une obligation) de mettre en œuvre une entité-type pour les données énumérées. En réalité, le SGBD qu’on va utiliser va influencer le choix. Si votre SGBD (quel est-il ?) permet de contrôler les valeurs (clause CHECK de l’instruction CREATE/ALTER TABLE), vous pouvez vous dispenser de mettre en œuvre l’entité-type évoquée (cas par exemple de « Catégorie du site web d'un inscrit »). Si le SGBD ne le permet pas (cas de MySQL), la prudence incite à mettre en oeuvre cette entité-type.

    2) Pour les identifiants, là encore on raisonne « au-delà de Merise ». Au stade relationnel, on utilise le type INTEGER, qu’il s’agisse des attributs use_i_id, com_i_id, etc. On n’est quand même plus en 1970, époque à laquelle on dimensionnait à l’octet près, car les capacités des mémoires et des disques étaient très réduites.

    3) Quand vous écrivez pour une date : « Au format JJ-MM-AAAA » ou « Les numéros de téléphone seront présentés sous la forme : 01 23 45 67 89 », il s’agit de présenter les données à l’utilisateur, mais le stockage peut être différent. Touetfois, considérez ma remarque comme mineure. Cela dit, vous ne considérez pas des numéros de téléphone hors Hexagone ?

    4) Numéro de la rue où habite un inscrit : vous êtes bien chiche en allouant 3 caractères. Comment faites-vous pour quelqu’un habitant au 130 ter ou 140 quater ?

    5) Je suppose que dans le MCD vous procéderez à un regroupement des entités-types tFixe et tMobile.

    6) On sera amené à reparler de l’identifiant com_i_id, lequel sera en fait la reprise de use_i_id. Comme disait Guillaume d’Ockham :

    « Pluralitas non est ponenda sine necessitate » (Autrement dit, ce qui ne sert à rien : exit !)
    (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 averti Avatar de debutant001
    Profil pro
    Eric
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Eric

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut
    Merci fsmrel pour votre réponse et toutes ces remarques très intéressantes. (qui m'ont fait réfléchir et donc amené à me poser d'autres questions !)

    A propos de ces dernières :

    1) initialement je pensais utiliser MySQL car c'est le seul SGBDR que je connais un peu.
    Sauf que suite à la lecture de ce post, je me pose sérieusement des questions.
    PostgreSQL m'aurait bien tenté (je connaîtrais ainsi deux SGDBR) mais en ce cas je devrais partir de zéro : est-ce judicieux pour un débutant seul dans son apprentissage ?
    D'autant que j'ai lu aussi sur DVP (mais où ? ) que pour un petit projet avec peu d'utilisateurs, PostgreSQL n'était peut-être pas recommandé (en terme de vitesse) par rapport à MySQL.
    Du coup, je ne sais vraiment plus quoi prendre !

    3) malgré que ça ne soit pas stipulé dans le "cahier des charges" j'ai anticipé une éventuelle demande, d'où les 15 octets réservés pour "fix_s_numero" et "mob_s_numero". Ça devrait suffire, non ?

    4) heu... je n'avais pas pensé à ce type d'éventualités ! Du coup je n'ai pas d'autre choix que d'ajouter un champ "adr_s_complement" en ce cas ?

    5) bonne question ! Initialement, j'ai séparé les deux car une personne peut posséder plusieurs téléphones (fixe et/ou mobile) dans la même catégorie : un téléphone fixe perso pour la résidence principale, un téléphone fixe perso pour la résidence secondaire, un téléphone mobile perso et enfin un téléphone mobile pro. J'ai pensé qu'on devait alors considérer un téléphone fixe et un téléphone mobile comme deux entités à part. Je me suis trompé ?

    6) Je comprends et comprends pas à la fois votre remarque : tout ce qui est superflu, dehors (pas de souci là-dessus) mais la clé primaire de la table tCommentaire est bien obligatoire, non ? Si on la supprime, comment attribuer tel ou tel commentaire à tel user ? On ne va pas mettre com_s_contenu comme clé primaire quand même, si ?

    Concernant ce dernier point, je comptais ajouter à ce message mon MCD mais en fonction de vos prochaines réponses, je vais devoir modifier mon dictionnaire des données avant.
    Ce qui m'amène à cette question concernant un MCD : doit-on nommer obligatoirement différemment toutes les relations, car à première vue je n'ai que des relations "Appartenir" (tel mobile appartient à telle catégorie, telle adresse appartient à telle catégorie", etc...) ou "Posséder" (tel user possède tel téléphone fixe, tel user possède telle adresse mail, etc...) ?

  4. #4
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 212
    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 212
    Billets dans le blog
    16
    Par défaut
    Bonsoir Éric,


    Citation Envoyé par debutant001
    initialement je pensais utiliser MySQL car c'est le seul SGBDR que je connais un peu.
    Sauf que suite à la lecture de ce post, je me pose sérieusement des questions.
    Certes SQLpro met le paquet, mais on ne peut lui donner tort... Pour ma part ayant utilisé exclusivement DB2 for z/OS en production, en ce qui concerne les autres SGBDR, je ne peux donner qu’un avis d’utilisateur lambda suite aux coups de main que j’essaie de donner dans les forums DVP, avis portant sur le langage SQL plus que moteur. En l’occurrence, la richesse fonctionnelle n’est pas ce qui caractérise MySQL. Je peste quand je constate que je ne peux pas mettre en œuvre la jointure récursive (au moyen d’une CTE (Common Table Expression)), ou que je ne peux pas utiliser un trigger pour une vue pour résoudre un problème fonctionnel (ventilation dans les tables sous-jacentes des données d’un insert appliqué à la vue), etc. J’ai été amené à utiliser un peu PostgreSQL, et force est de reconnaître qu’il est fonctionnellement incomparablement plus riche et pas bien compliqué à installer et maîtriser, j’y suis arrivé sans difficulté particulière alors que je redoutais l’épreuve. Mais bien sûr, je ne prétendrais pas au titre d’expert PostgreSQL, loin s’en faut ! De votre côté vous pouvez vous lancer dans l’expérience, goûter et comparer. De toute façon vous ne seriez pas seul dans l’apprentissage, il y a les forums d’entraide !



    Citation Envoyé par debutant001
    D'autant que j'ai lu aussi sur DVP (mais où ?) que pour un petit projet avec peu d'utilisateurs, PostgreSQL n'était peut-être pas recommandé (en terme de vitesse) par rapport à MySQL
    La vitesse est un critère parmi d’autres. J’ai quand même comparé MySQL et PostgreSQL pour des traitements portant sur une base de données de 15 GB contenant des tables de plusieurs millions de lignes : avantage à PostgreSQL (mais il se trouvera toujours des contradicteurs arrivant à des conclusions inverses ). Bien faire et laisser dire, le tout est de partir sur la base d’un MCD correct et une fois dans la soute, procéder à des prototypages de performance (pertinence des index, campagnes d’EXPLAINS...)



    Citation Envoyé par debutant001
    malgré que ça ne soit pas stipulé dans le "cahier des charges" j'ai anticipé une éventuelle demande, d'où les 15 octets réservés pour "fix_s_numero" et "mob_s_numero". Ça devrait suffire, non ?
    Sans doute. Mais d’expérience, il ne faut pas être avare quant à la taille des champs. Calez-vous au moins sur la norme (qui bouge souvent, mais bon...), par exemple au format « +33 C CC CC CC CC » plus une marge en pensant à l’avenir... En 50 ans de métier, combien d’applications ai-je vu faire l’objet d'opérations de maintenance bien trop coûteuses pour de stupides histoires de champs trop petits (par exemple, pour rester dans le monde de la téléphonie, à l'occasion du passage à la numérotation à 8 chiffres puis 10 chiffres)...



    Citation Envoyé par debutant001
    je n'avais pas pensé à ce type d'éventualités ! Du coup je n'ai pas d'autre choix que d'ajouter un champ "adr_s_complement" en ce cas ?
    Il y a en gros deux écoles en matière de structuration des adresses :

    — Il y a ceux qui atomisent à mort, comme vous êtes en train de le faire et en finissent par devoir créer des tables des types de voie (rue, allée, avenue, etc., voire street, straße, j’en passe et des meilleures), des compléments d’adresse, c’est le doigt dans l’engrenage si l’on veut tout contrôler, ce qui est mission quasi impossible, avec des normes qui bougent tout le temps... A moins de travailler pour le Trésor public et autres « organismes » du même tonneau, modéliser réglementairement des informations comme la voie et le numéro dans la voie n’apporte guère.

    — Il y a ceux qui se cantonnent aux attributs : Ligne 1, Ligne 2, Ligne 3, Ligne 4, Ligne 5 d’adresse et dont je fais partie : l’essentiel est de ne pas de planter sur des données importantes comme le code postal, lequel mérite un minimum de contrôle de structure et fait l’objet d’un attribut en table. Cela dit, ne vous arrive-t-il pas de recevoir des courriers pourtant libellés de façon fantaisiste, quant au nom, au type de voie, etc. ?

    — Hors concours :

    Quand Stéphane Mallarmé écrivait à un ami, il remplaçait les 4 lignes d’adresse par un quatrain, ce qui gênait nullement le facteur, lequel déposait le courrier dans la bonne boîte à lettres (heureuse époque...)






    Citation Envoyé par debutant001
    Initialement, j'ai séparé les deux car une personne peut posséder plusieurs téléphones (fixe et/ou mobile) dans la même catégorie : un téléphone fixe perso pour la résidence principale, un téléphone fixe perso pour la résidence secondaire, un téléphone mobile perso et enfin un téléphone mobile pro. J'ai pensé qu'on devait alors considérer un téléphone fixe et un téléphone mobile comme deux entités à part. Je me suis trompé ?
    Du point de vue de la sémantique, vous n’avez pas tort, mais il faut approfondir la réflexion en considérant la spécialisation/généralisation des entités-types :

    Une entité-type « surtype » factorise les propriétés communes à des entités-types cousines qui deviennent « sous-types » et portent les propriétés spécifiques.

    Par exemple, les entreprises et les salariés de ces entreprises partagent pas mal de propriétés, mais certainement pas des données telles que le numéro SIREN des entreprises ou le numéro de sécurité sociale des salariés. On généralise en mettant en œuvre un surtype PERSONNE (données et associations communes) et les sous-types ENTREPRISE et SALARIE ((données et associations spécifiques).

    Dans le cas des téléphones fixes et mobiles, que voyez-vous comme propriétés non communes à modéliser ? Certes, il faut faire le distinguo entre fie et mobile, mais à part ca (et les 2 premiers chiffres du numéro) ?



    Citation Envoyé par debutant001
    Je comprends et comprends pas à la fois votre remarque : tout ce qui est superflu, dehors (pas de souci là-dessus) mais la clé primaire de la table tCommentaire est bien obligatoire, non ? Si on la supprime, comment attribuer tel ou tel commentaire à tel user ? On ne va pas mettre com_s_contenu comme clé primaire quand même, si ?
    Au niveau tabulaire, il est évident que la table tCommentaire a sa clé primaire, mais elle est héritée de celle la table tUser.

    Exemple SQL :

    
    CREATE TABLE tUser
    (
            UserId            INT                    NOT NULL
            ...               ...                    ...
        , CONSTRAINT User_PK PRIMARY KEY (UserId)  
    ) ;
    
    CREATE TABLE tCommentaire 
    (
            UserId            INT                    NOT NULL
          , Commentaire       ...                    NOT NULL
            ...               ...                    ...
        , CONSTRAINT Commentaire_PK PRIMARY KEY (UserId)
        , CONSTRAINT Commentaire_User_FK FOREIGN KEY (UserId)
             REFERENCES tUser (UserId) ON DELETE CASCADE 
    ) ;
    
    
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  5. #5
    Membre averti Avatar de debutant001
    Profil pro
    Eric
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Eric

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut
    Ok pour utiliser PostgreSQL, ça ne me fera pas de mal de connaître un 2ème SGBDR de toute façon...

    Concernant la taille des champs contenant les numéros de tél, objectivement je pensais que 15 octets suffisaient largement mais vous avez raison de vouloir anticiper l'avenir, je vais donc passer à 20 octets. (là ça devrait suffire je pense )

    Idem pour la propriété "adr_s_numero" : en y réfléchissant, jamais une recherche ne se fera que sur le N° d'une rue ou uniquement sur l'intitulé d'une rue, donc c'est vrai : pourquoi ne pas inclure les deux dans la propriété "adr_s_rue" ?
    (sympa l'anecdote sur Stéphane Mallarmé)

    A propos de la gestion des numéros de tél, votre exemple est très parlant ! (je pensais que mettre plusieurs propriétés contenant des données énumérées, ici "tel_e_type" et "tel_e_categorie", n'était pas recommandé)
    Si j'ai bien compris, voici comment je pense maintenant gérer ces derniers :

    • Table tTelephone :

    Code mnémonique Désignation Type Taille Remarques
    tel_i_id Identifiant numérique du téléphone d'un inscrit N 4
    tel_s_numero Numéro de téléphone d'un inscrit AN 20
    tel_e_type Type du numéro de téléphone d'un inscrit E 2 possibilités : fixe ou mobile
    tel_e_categorie Catégorie du numéro de téléphone d'un inscrit E 2 possibilités : pro ou perso

    Enfin, concernant le dernier point, ce que vous vouliez me dire initialement c'était qu'il y avait forcément un lien entre "com_i_id" et "use_i_id" du fait que la cardinalité de l'association "Posséder" entre les entités "tUser" et "tCommentaire" est de type :
    tUser --(0,1)----(Posséder)----(1,1)--tCommentaire
    d'où l'ajout d'une clé étrangère "FK_tCommentaire_use_i_id" dans la table "tCommentaire", c'est bien ça ?
    Désolé je n'avais pas compris votre remarque. (en fait, c'est la citation de Guillaume d’Ockham qui m'a induit en erreur : j'ai cru qu'il y avait quelque chose d'inutile dans mon entité)

    Sinon, vous ne m'avez pas répondu à propos de l'obligation ou non de nommer différemment toutes les associations dans un MCD...

  6. #6
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 212
    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 212
    Billets dans le blog
    16
    Par défaut
    Bonsoir Éric,


    Citation Envoyé par debutant001
    c'est vrai : pourquoi ne pas inclure les deux dans la propriété "adr_s_rue" ?
    C’est la bonne option. Plus généralement, l’essentiel est d’être à même de produire les 5 lignes d’adresse à partir des données contenues dans la base de données.



    Citation Envoyé par debutant001
    Si j'ai bien compris, voici comment je pense maintenant gérer ces derniers
    C’est bon. N’oubliez pas de sous-traiter à PostgreSQL le contrôle des valeurs prises pas le type et la catégorie de téléphone (CREATE TABLE, contrainte CHECK).



    Citation Envoyé par debutant001
    concernant le dernier point, ce que vous vouliez me dire initialement c'était qu'il y avait forcément un lien entre "com_i_id" et "use_i_id" du fait que la cardinalité de l'association "Posséder" entre les entités "tUser" et "tCommentaire" est de type :

    tUser --(0,1)----(Posséder)----(1,1)--tCommentaire
    Qu’il y ait un lien entre "com_i_id" et "use_i_id" (voir plus bas) est une conséquence de la présence dans votre dictionnaire d’attributs artificiels, les identifiants, alors qu’un dictionnaire ne devrait concerner que les attributs naturels, par exemple le nom, le prénom d’un inscrit (attributs dont certains possèdent la propriété d’unicité et sont donc des identifiants naturels, cas par exemple du numéro de téléphone d’un inscrit).

    Pour illustrer, par référence au tableau ci-dessous des éléments chimiques (source Wikipedia), lors de la constitution du dictionnaire des données, en plus des attributs naturels qui y figurent, quelle serait l’utilité d’y ajouter d’office un attribut ElementId qui en soit l’identifiant ? Du point de vue de l’information, objectivement aucune, j’ai envie de dire que ça tient du parasitisme. Qu’on le fasse au niveau du MCD, d’accord et c’est même nécessaire, parce qu’on en arrive au stade du traitement informatisé, mais en amont, c'est-à-dire pour l’utilisateur final de votre application (disons la maîtrise d’ouvrage) il n’y a évidemment pas de valeur ajoutée (au contraire...) à lui exposer des attributs artificiels et autres avatars purement techniques.





    Ajouter mécaniquement des identifiants artificiels peut avoir des effets secondaires conduisant à une modélisation sujette à correction (si l’on tient compte de ce qu’a écrit Ockham...)

    Je m’explique. Si l’on vous suit, au stade du MCD on aura la représentation suivante :

    tUser --0,1----(Posséder)----1,1--tCommentaire

    J’ai supprimé les parenthèses encadrant les cardinalités, car le métamodèle du MCD merisien ne les prend pas en considération (cf. l’ouvrage de référence La méthode Merise, Tome 1 : Principes et outils de Tardieu, Rochfeld, Colletti) et elles peuvent être cause d’ambiguïté lors de l’utilisation de certains AGL qui leur affectent un rôle particulier (cas de PowerAMC).

    Quoi qu’il en soit utilisons les services d’un AGL (ce qui est très fortement recommandé), par exemple DB-MAIN (gratuit, fiable et sérieux).


    MCD selon DB-MAIN (outre les identifiants, je n’ai fait figurer que quelques attributs).





    Citation Envoyé par debutant001
    Désolé je n'avais pas compris votre remarque. (en fait, c'est la citation de Guillaume d’Ockham qui m'a induit en erreur : j'ai cru qu'il y avait quelque chose d'inutile dans mon entité)
    Considérons le MLD déduit par DB-MAIN du MCD précédent.


    MLD





    Où id’ symbolise la clé étrangère branchant COMMENTAIRE sur USER, et « ref » est synonyme de « clé étrangère ».

    Code SQL correspondant :

    
    create table USER 
    (
         UserId                int                     not null,
         UserNom               varchar(48)             not null,
         constraint USER_PK primary key (UserId)
    );
    
    create table COMMENTAIRE 
    (
         CommentaireId         int                     not null,
         UserId                int                     not null,
         CommentaireContenu    varchar(255)            not null,
         constraint COMMENTAIRE_PK primary key (CommentaireId),
         constraint COMMENTAIRE_AK unique (UserId),
         constraint COMMENTAIRE_USER_FK foreign key (UserId)
             references USER (UserId) ON DELETE CASCADE 
    );
    
    
    Qu’il y ait un lien entre CommentaireId et UserId est incontestable, plus formellement les sous-ensembles d’attributs {CommentaireId} et {UserId} sont des clés candidates de la variable relationnelle (table en SQL) COMMENTAIRE et font donc l’objet des dépendances fonctionnelles :

    {UserId} —> {CommentaireId}

    {CommentaireId} —> {UserId}


    Considérons maintenant le MLD suivant :





    Traduction en SQL :

    
    create table USER 
    (
         UserId                int                     not null,
         UserNom               varchar(48)             not null,
         constraint USER_PK primary key (UserId)
    );
    
    create table COMMENTAIRE 
    (
         UserId                int                     not null,
         CommentaireContenu    varchar(255)            not null,
         constraint COMMENTAIRE_PK primary key (UserId),
         constraint COMMENTAIRE_USER_FK foreign key (UserId)
             references USER (UserId) ON DELETE CASCADE 
    );
    
    

    Cette fois-ci, l’attribut UserId fait l’objet à la fois de la clé primaire de la table COMMENTAIRE et de la clé étrangère référençant la clé primaire {UserId} de la table USER. L’attribut CommentaireId est devenu inessentiel, superflu, donc parasite, ce qui justifie son élimination au nom de la proposition d’Ockham.



    Citation Envoyé par debutant001
    vous ne m'avez pas répondu à propos de l'obligation ou non de nommer différemment toutes les associations dans un MCD...
    De fait, je n’y avais pas fait attention. Donner un nom pertinent à une association n’est pas un exercice facile. En plus faire en sorte que les noms soient systématiquement différents relève de la haute voltige, exercice fort à la mode à l’époque où les AGL de modélisation des MCD n’existaient pas ou peu (imaginez en plus ce que cela peut représenter si le MCD comporte 500 entités-types et plus...)

    Quand il s’agit de présenter un MCD à l’interlocuteur non informaticien, à savoir la maîtrise d’ouvrage qui en général préfère les bandes dessinées aux dossiers de conception austères, souvent obscurs et ambigus, donner un nom sémantiquement pertinent à chaque association est nécessaire. Mais que les noms des associations soient systématiquement différents, ça ne concerne pas cet interlocuteur, il n’est sensible qu’à la signification des associations.

    Quand il s’agit de construire un MCD au moyen d’un AGL, si celui-ci exige que les associations aient des noms différents, on doit évidemment s’y conformer (par exemple, un AGL comme PowerAMC permet que les associations aient le même nom dans la partie visible (le diagramme qu’on affiche), mais il l’interdit pour les noms sous le capot, là où ils noms donneront lieu le cas échéant au nom des tables).

    Pour ma part, je veille soigneusement au nom des associations qui donneront lieu à des tables (niveau SQL), mais pour les autres, je n’ai pas de temps à perdre, si par exemple le mot « appartenir » est pertinent, je l’utilise, et si c’est plus d’une fois, ça ne me dérange aucunement puisque ces noms d’associations ne feront pas l’objet de tables, elles disparaîtront en fumée (ou feront à la limite partie des noms des clés étrangères).
    (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.

  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 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Bonsoir Éric,


    Quand Stéphane Mallarmé écrivait à un ami, il remplaçait les 4 lignes d’adresse par un quatrain, ce qui gênait nullement le facteur, lequel déposait le courrier dans la bonne boîte à lettres (heureuse époque...)



    Il y a aussi l'amusante lettre envoyée par un ami à Emile Lemoine, ancien élève de l'Ecole Polytechnique... Comme il demeurait à Paris, 55 rue du Cherche-Midi, son ami lui envoya la lettre "rue du Cherche-une heure moins 5" ! Le facteur la déposa dans la bonne boite...

    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
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Sur l'atomisation de la date, tout dépend effectivement des traitements derrière.
    Si vous êtes un site web marchand il est extrêmement important d'atomiser au max, car cela facilitera la validation des adresses. Il existe des entreprise chargées de valider des adresses afin d'obtenir un taux de rejet de destination minimale. Sans cela, de nombreux sites web marchand des touts premiers temps d'Internet ont fait faillite, à cause du taux de retour des marchandises n'arrivant pas à trouver la destination finale (problème connu sous le nom du "dernier kilomètre")

    https://fr.wikipedia.org/wiki/Dernier_kilom%C3%A8tre

    Dans ce cas prévis, atomiser avec :
    • Libellé de la rue (François Mitterand... Charles de Gaulle)
    • Type de voie (impasse, venelle, sente... Place, Avenue, Boulevard)
    • Numero (144, 203-206, 1290, 147 bis...)



    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/ * * * * *

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/09/2012, 11h52
  2. Dictionnaire des données et le Reporting
    Par RahmaMB dans le forum Approche théorique du décisionnel
    Réponses: 1
    Dernier message: 28/07/2011, 12h11
  3. Réponses: 6
    Dernier message: 13/12/2010, 20h20
  4. Dictionnaire des données
    Par arsenik dans le forum PowerAMC
    Réponses: 3
    Dernier message: 23/06/2010, 23h05
  5. [DF] Dictionnaire des données et Dépendances fonctionnelles
    Par vivicente dans le forum Schéma
    Réponses: 4
    Dernier message: 09/09/2009, 17h16

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