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 :

Débutant / Structure de ma base de données MySQL


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Homme Profil pro
    Pornstar
    Inscrit en
    Mars 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Pornstar

    Informations forums :
    Inscription : Mars 2018
    Messages : 18
    Points : 14
    Points
    14
    Par défaut Débutant / Structure de ma base de données MySQL
    Bonjour,

    débutant en programmation, je compte développer une appli android en java de gestion de listes de courses utilisant une bdd.

    Je m'oriente donc vers MySQL et non SqLite pour la persistance des données.

    L'appli démarre sur une page d'authentification, à la suite de laquelle les listes préenregistrées du profil connecté sont présentées dans un ListView.
    Lorsque l'utilisateur clique sur une liste préenregistrée une nouvelle page s'ouvre avec un GridView listant les produits avec leurs noms et images de catégorie.
    Lorsqu'il entreprend de créer une liste, une page s'ouvre avec aussi un GridView présentant tous les produits de la catégorie souhaitée.

    Pour sauvegarder les données je pensais donc à un bdd comportant 4 tables : Listes, Profils, Catégories et Produits. Les relations seraient les suivantes :

    Profils (Id, Nom, Prénom, Mail)
    id : clé primaire

    Listes (IdProfil, Date, Liste, IdImageCategorie)
    IdProfil, Date : clé primaire
    IdProfil : clé étrangère en ref à Id de Profils
    IdImageCatégorie : clé étrangère en ref à Id de Catégories

    Produits (Id, Nom, Catégorie, IdImageCatégorie)
    Id : clé primaire
    IdImageCatégorie : clé étrangère en ref à Id de Catégories

    Catégories (Id, Nom, ImageCatégorie)
    Id : clé primaire


    Est-ce que cette configuration de la BDD vous paraît appropriée ?

    Merci d'avance

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    Listes (IdProfil, Date, Liste, IdImageCategorie)
    Que contient Liste ? Le nom de la liste ?

    Lorsque l'utilisateur clique sur une liste préenregistrée une nouvelle page s'ouvre avec un GridView listant les produits avec leurs noms et images de catégorie.
    Ne manquerait-il pas une table associative permettant de lier la liste aux produits ?

    Produits (Id, Nom, Catégorie, IdImageCatégorie)
    Ce serait plutôt idCategorie, à mon sens.

    Au passage, ne jamais utiliser de lettres accentuées ou diacritiques dans les noms des objets de BDD !
    Et il vaut mieux nommer ses tables au singulier car le nom d'une table reflète en principe l'entité-type du MCD qui explique les associations entre chaque individu de chaque entité type, lui même issu des règles de gestion... que vous n'avez semble t-il pas écrites ! C'est une étape qu'il ne vaut mieux pas zapper quand on débute.

    J'ajouterai que votre modèle semble dire qu'il y aura, pour une personne, autant de listes que de catégories et que les produits sont figés dans une catégorie. Donc si je veux aller acheter dans une grande surface des produits frais et des produits sanitaires, je vais devoir consulter deux listes. Pas très pratique, non ?

    Personnellement, j'utilise l'application Bring pour les listes de courses. J'ai trois listes : Épicerie, Marché et Bricolage, parce que ce sont des courses qu'on fait dans des lieux a priori différents. Mais tous les produits peuvent aller dans n'importe quelle liste. J'ai utilisé d'autres applications de liste de courses auparavant qui m'ont plus ou moins satisfait. Bref, vous arrivez sur un "marché" déjà bien occupé. Carrefour me propose même sa propre appli depuis quelques temps.

    Votre intention de développer votre application est louable et peut être un exercice intéressant mais est-ce bien utile ?

    Bon courage !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Pornstar
    Inscrit en
    Mars 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Pornstar

    Informations forums :
    Inscription : Mars 2018
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    je suis actuellement en bts SIO et ce projet me permet de bosser sur le développement d'applis mobile utilisant une base de données distante et par la même occasion un nouvel IDE (android studio).
    Du coup pas grave si le marché des applis mobile de listes de courses est saturé ça me fait un bon exercice et un projet finalisé de plus à présenter sur mon portfolio en vue d'un stage

    Que contient Liste ? Le nom de la liste ?
    Alors grosse erreur je pensais pouvoir stocker directement des objets dans la bdd . Je comptais y stocker un objet de type ArrayList<Produit>, soit une collection d'objets de type produit mais ça vous l'avez deviné !
    Ces relations me paraissent du coup plus appropriées:

    Nom : 1.png
Affichages : 523
Taille : 45,8 Ko


    Néanmoins j'ai un doute sur l'utilisation de date dans la clé primaire composée, en effet je voudrais qu'un utilisateur puisse créer plusieurs listes ayant le même nom le même jour. La liste étant vouée à être mono ou multi-catégories, je ne peux donc pas utiliser idCategorie. Le format de la date est "yyyy-MM-dd HH:mm:ss" ce qui devrait pouvoir me le permettre mais je ne suis pas sûr.


    J'ai commencé le schéma (désolé c'est à grands coups de copier/coller il faut que je retélécharge windesign) mais je vais devoir reprendre mes cours car je ne me rappelle plus comment représenter l'association entre Liste et les 3 autres entités et je crois que j'ai fais n'importe quoi:

    Nom : 2.png
Affichages : 542
Taille : 38,7 Ko


    Merci en tout cas pour le coup de pouce et la réponse structurée

    PS: désolé pour l'image attachée à la fin du post je n'arrive pas à l'enlever.
    Images attachées Images attachées  

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Si vous mettez en clé étrangère l'id du produit dans Liste, ça veut dire que votre liste n'aura qu'un produit !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  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 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Mojitow, pour présenter votre MCD, il est préférable que vous utilisiez un outil dédié. Looping, gratuit, proposé par le professeur Patrick Bergougnoux (Paprick) est tout désigné.

    Suivez de près les conseils de CinePhil : pour arriver à faire du bon boulot, commencez par présenter les règles de gestion des données.

    Les catégories sont connues par l’intermédiaire des produits : un produit détermine une catégorie. Dans votre MCD, justifiez le lien entre LISTE et CATEGORIE (règle de gestion).

     
    (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 émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    650
    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 : 650
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonsoir,

    Tout d'abord, je pense qu'il est préférable de faire les choses dans l'ordre et de concevoir correctement avec un modèle conceptuel de données.
    C'est ce que vous faites à la fin de votre dernier post et c'est par là qu'il faut commencer.
    Ensuite, tous les logiciels de modélisation seront capables de vous générer le modèle logique et le code SQL de création des tables qui va avec.

    Si je reprends votre modèle, voici ce que vous avez modélisé (pour ma part j’utilise Looping, mais c'est normal puisque c'est moi qui l'ai fait ! Win'Design, dont vous parlez, est également très bien) :
    Nom : MCD Mojitow.jpg
Affichages : 532
Taille : 21,0 Ko
    Le schéma relationnel correspondant à ce modèle est le suivant :
    Profil = (Id_Profil, Nom, Prenom, Mail);
    Catégorie = (Id_Catégorie, Nom, Image);
    Produit = (Id_Produit, Nom, #Id_Catégorie);
    Liste = (#Id_Profil, #Id_Produit, #Id_Catégorie, Nom, DateL);


    Je ne pense pas que ce soit ce que vous recherchiez pour votre table "Liste"...
    Sans vouloir faire le MCD à votre place, je vous recommande, dans un premier temps en tout cas, de réaliser votre MCD en n'utilisant que des associations binaires, une tripatte pouvant éventuellement faire son apparition lors de la gestion des dates.
    Pour bien comprendre les effets de votre modélisation conceptuelle sur la future structure de la base de données, générez le modèle logique correspondant (Looping le fait en temps réel).
    Ça devrait vous aider à y voir plus clair.

    Bon courage !
    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

  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 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Bonjour à tous,


    Mojitow, le schéma relationnel présenté par Paprick offre le grand avantage de mettre en évidence quelque chose qui ne saute pas aux yeux quand on regarde le MCD : j’avais essayé d’attirer votre attention en rappelant qu’un produit détermine une catégorie, mais on voit très clairement cette fois-ci que la table LISTE comporte deux erreurs :

    (1) Le triplet SK = {Id_Profil, Id_Produit, Id_Categorie} ne peut prétendre être clé primaire de la table ;

    (2) La deuxième forme normale (2NF) est violée.

    Il s’agit là de sujets fondamentaux présentés en 1971 par Ted Codd (E. F. Codd: Further Normalization of the Data Base Relational Model), mais plus que jamais d’actualité ! et que j’espère être enseignés dans votre école.

    Concernant le 1er point

    La (prétendue) clé primaire SK doit respecter les deux contraintes suivantes :

    Unicité. Deux lignes de la table ne peuvent pas avoir la même valeur de SK.

    Irréductibilité. Il n’existe pas de sous-ensemble strict de SK garantissant la règle d’unicité.

    En passant, je rappelle que SK est un ensemble au sens de la théorie des ensembles (d’où l’utilisation des accolades). SK viole la règle d’irréductibilité car il existe une règle de gestion qui dit qu’un produit n’appartient qu’à une catégorie ce qui n’est plus vérifié au sein de SK.

    En conséquence, l’attribut Id_Categorie doit être éjecté de SK qui se réduit alors au sous-ensemble suivant :

    K = {Id_Profil, Id_Produit}

    Et cette-fois les contraintes d’unicité et d’irréductibilité sont respectées.


    Concernant le 2e point

    La table LISTE se présente donc désormais ainsi :

    {Id_Profil, Id_Produit, Id_Categorie, Nom, DateL}

    La 2e forme normale est violée. En effet, selon cette contrainte, les attributs n’appartenant pas à la clé K, à savoir Id_Categorie, Nom, DateL, doivent dépendre de toute la clé et non pas d’une partie de celle-ci. Si cela est vrai des attributs Nom, DateL, tel n’est pas le cas de Id_Categorie qui dépend du sous-ensemble {Id_Produit} puisqu’un produit n’appartient qu’à une catégorie.

    Dans ces conditions, la table LISTE doit être décomposée ainsi :

    LISTE’ = {Id_Profil, Id_Produit, Nom, DateL}

    LISTE” = Id_Produit, Id_Categorie

    En l’occurrence on s’est servi du théorème de Heath (datant lui aussi de 1971 !).

    Il est évident que LISTE” est absorbée par PRODUIT et qu’au stade MCD il faut supprimer la patte branchant CATEGORIE et LISTE pour que les choses rentrent dans l’ordre, avant d’aller plus loin dans l’expertise du MCD, à partir des règles de gestion que vous aurez bien voulu fournir.

    A nouveau, bon courage !

     
    (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
    Membre à l'essai
    Homme Profil pro
    Pornstar
    Inscrit en
    Mars 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Pornstar

    Informations forums :
    Inscription : Mars 2018
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Bonjour à tous,

    il faut que vous sachiez que vous êtes de grands malades...je n'aurais jamais pensé avoir autant de réponses et qu'elles soient aussi pointues. Sincèrement ça fait plaisir

    Du coup je vais écrire les règles de gestion (enfin essayer car on nous apprend surtout à exploiter un schéma de données et beaucoup moins à le créer, ce qui se traduit par le fait qu'on ne nous a jamais parlé des règles de gestion !!), télécharger looping pour dessiner le schéma et tenter de vous faire une réponse aussi aboutie que les vôtres demain soir !!

  9. #9
    Membre à l'essai
    Homme Profil pro
    Pornstar
    Inscrit en
    Mars 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Pornstar

    Informations forums :
    Inscription : Mars 2018
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    voilà j'ai essayé de suivre les conseils de chacun ce qui nous donne :

    Règles de gestion:

    Nom : Règles de gestion.png
Affichages : 476
Taille : 73,2 Ko


    Schéma conceptuel :

    Nom : Schéma conceptuel Courses.png
Affichages : 545
Taille : 48,1 Ko

    Relations :

    Nom : Relations.png
Affichages : 520
Taille : 83,4 Ko


    J'ai l'impression que c'est mieux et effectivement quand on commence par le commencement on y voit déjà plus clair

  10. #10
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    650
    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 : 650
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonsoir,

    C'est mieux, mais je ne comprends pas pourquoi vous tenez à associer Liste à Catégorie...
    Vu qu'une liste contient des produits qui eux-mêmes appartiennent à des catégories, l'association entre Liste et Catégorie ne parait pas nécessaire.

    Par ailleurs, votre utilisation des CIF n'est pas du tout adéquate... on pourra y revenir plus tard.

    En attendant, d'après vos règles de gestion, le modèle suivant pourrait bien suffire :
    Nom : MCD Mojitow.jpg
Affichages : 633
Taille : 28,2 Ko
    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

  11. #11
    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 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Bonsoir à tous,


    Mojitow, je suppose que votre problème vient du fait que puisqu’une liste L doit faire référence à au moins une catégorie C et désormais à au moins un produit P, ça ferait désordre que les paires {C, P} n’appartiennent pas au référentiel représenté par APPARTENIR, or jusqu’ici il n’y a pas de garde-fou. S’il s’agit de renforcer le système, dans la série ceinture, bretelles et épingles à nourrices, vous pouvez transformer APPARTENIR en classe d’entités et y connecter LISTE :

    Nom : Mojitow_mcd.png
Affichages : 484
Taille : 19,2 Ko


    Les catégories et produits référencés par une liste appartiennent au référentiel APPARTENIR et le système est donc cohérent.

    Notez l’utilisation de l’identification relative "1,1(R)" (associations APP_PRO et APP_CAT), tout en observant que APPARTENIR n’a aucunement besoin d’avoir identifiant qui lui soit propre.

     
    (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.

  12. #12
    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 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    On pourrait envisager d’utiliser une contrainte d’inclusion pour modéliser le fait que les paires LISTE_PRO, LISTE_CAT doivent être incluses dans APPARTENIR. Problème : cette contrainte n’est pas traduite au stade SQL... Donc en évitera cette modélisation pourtant plus élégante que celle que j’ai proposée dans mon message précédent !

    Nom : Mojitow_mcd_inclusion.png
Affichages : 466
Taille : 20,6 Ko

     
    (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.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Pornstar
    Inscrit en
    Mars 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Pornstar

    Informations forums :
    Inscription : Mars 2018
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    C'est mieux, mais je ne comprends pas pourquoi vous tenez à associer Liste à Catégorie...
    Vu qu'une liste contient des produits qui eux-mêmes appartiennent à des catégories, l'association entre Liste et Catégorie ne parait pas nécessaire.

    Lorsque l'utilisateur va afficher la liste des toutes ses listes de courses, chacune de celles-ci présentera son nom, sa date de création et une icône de toutes les catégories recensées dans cette liste.
    Du coup je me suis dit que ça allégerait peut-être le programme dans le sens où celui-ci ne sera pas obligé de boucler sur tous les produits de la liste pour en récupérer les catégories, mais au final cela n'allège rien et je vais donc supprimer cette association dans la mesure où on peut retrouver facilement la catégorie des produits présents dans la liste par l'intermédiaire de ces objets.

    Par ailleurs, votre utilisation des CIF n'est pas du tout adéquate... on pourra y revenir plus tard.
    Votre schéma est en effet plus simple et suffit à gérer les besoins de l'appli, j'aurais dû créer directement une association simple entre Liste et Compte au lieu de compliquer inutilement l'affaire. Mais dans l'absolu l'utilisation de la cif à cet endroit ne permet-il pas de récupérer le listing des produits de chaque liste pour chaque utilisateur, même si c'est apparemment beaucoup moins optimisé ?


    vous pouvez transformer APPARTENIR en classe d’entités et y connecter LISTE
    C'est intéressant de voir ce fonctionnement avec les liens identifiants qui forment une table qui sert de support à List_Cat_Pro.
    Au final si je comprends bien, vos 2 schémas se traduisent par 6 tables dans la base, la différence étant que Contenir dans la base de Patrick n'aurait que 2 champs et List_Cat_Pro dans celui de fmsrel en aurait 3; faut-il en conclure que le temps d'exécution des requêtes serait plus court si je conçois la base sur le modèle proposé par Patrick ?

  14. #14
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    650
    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 : 650
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour,

    Citation Envoyé par Mojitow Voir le message
    Mais dans l'absolu l'utilisation de la cif à cet endroit ne permet-il pas de récupérer le listing des produits de chaque liste pour chaque utilisateur, même si c'est apparemment beaucoup moins optimisé ?
    Pas vraiment : les CIF permettent de spécifier des contraintes fonctionnelles entre les tables rattachées à une même association, la principale conséquence étant la réduction de la clé primaire de la table issue de l'association en question afin de la rendre minimale.

    C'est intéressant de voir ce fonctionnement avec les liens identifiants qui forment une table qui sert de support à List_Cat_Pro.
    Au final si je comprends bien, vos 2 schémas se traduisent par 6 tables dans la base, la différence étant que Contenir dans la base de Patrick n'aurait que 2 champs et List_Cat_Pro dans celui de fmsrel en aurait 3; faut-il en conclure que le temps d'exécution des requêtes serait plus court si je conçois la base sur le modèle proposé par Patrick ?
    Il faut avant tout résonner au niveau conceptuel, et c'est ça qui doit guider votre choix pour le MCD ; les réflexions en terme d'optimisation de l'exécution interviennent plus tard.
    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

  15. #15
    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 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par Mojitow Voir le message
    Lorsque l'utilisateur va afficher la liste des toutes ses listes de courses, chacune de celles-ci présentera son nom, sa date de création et une icône de toutes les catégories recensées dans cette liste.
    Ça demande à être vérifié...

    Soit CP = {C, P} l’ensemble des paires {catégorie, produit} établies par l’association APPARTENIR.
    Soit CPp ⊆ CP le sous-ensemble de CP correspondant à un ensemble de produits donné p.

    Deux scénarios sont possibles :

    Scénario 1 : Le MCD ne comporte pas d’association entre LISTE et CATEGORIE :

    Alors l’utilisateur n’a pas la possibilité de définir de sous-ensemble {CL, PL} ⊆ CP, spécifique des paires de catégories et de produits dédiés à la liste L : on ne fait ni dans le sur-mesure ni dans la dentelle, et lors des consultations de la base de données, à l’affichage de la liste L, en ce qui concerne les catégories, on ne peut que présenter le sous-ensemble CPp établi je le rappelle, indépendamment des listes.

    Scénario 2 : Le MCD comporte une association entre LISTE et CATEGORIE :

    Alors l’utilisateur a la possibilité de définir le sous-ensemble CPL = {CL, PL} spécifique des paires de catégories et de produits pour la liste L : on fait dans le sur mesure.

    En plus de prendre en compte la 2e situation, les deux derniers MCD que j’ai proposés permettent d’interdire que l’on ait CPL ⊄ CP, ce qui est quand même fondamental.


    Citation Envoyé par Mojitow Voir le message
    si je comprends bien, vos 2 schémas se traduisent par 6 tables dans la base
    Le MCD dans lequel figure une contrainte d’inclusion donnera lieu à 7 tables : CATEGORIE, PRODUIT, APPARTENIR, COMPTE, LISTE, LISTE_CAT, LISTE_PRO. Cela dit, avec ma casquette de DBA j’ai administré des bases de données comportant entre 1000 et 2000 tables, on n’est donc pas à une près...


    Citation Envoyé par Mojitow Voir le message
    le temps d'exécution des requêtes serait plus court si je conçois la base sur le modèle proposé par Patrick ?
    En fait ça ne pourra être que plus long ! Vous serez obligé de construire la jointure des tables CONTENIR et APPARTENIR, et tout ça pour produire l’ensemble CPp défini plus haut, plus volumineux que son sous-ensemble CPL (cf. scénario 2), lequel est directement contenu dans la table LISTE_CAT_PRO du 2e MCD.

     
    (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
    Membre à l'essai
    Homme Profil pro
    Pornstar
    Inscrit en
    Mars 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Pornstar

    Informations forums :
    Inscription : Mars 2018
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    ayant dû mettre entre parenthèses le développement de mon application pour raisons de santé, j'ai désormais la possibilité de m'y remettre et aurais besoin de votre avis sur quelques points.

    J'ai changé certaines règles de gestion qui qui me poussent donc à revoir mon scd, les voici :

    - Un compte (utilisateur) possède autant de listes qu'il veut, et chaque liste appartient à un compte unique.
    Compte - 0,n - ListesCompte - 1,1 - Liste

    - Une liste contient au minimum un produit et tout produit n'est pas forcément présent dans une liste.
    Liste - 1,n - ProduitsListe - 0,n - Produit

    - Un produit fait partie d'une seule catégorie et une catégorie ne contient pas forcément de produit au départ (ceci uniquement vrai pour la catégorie des produits ajoutés manuellement par l'utilisateur, les autres étant préalablement remplies).
    Produit - 1,1 - CatProduit - 0,n - Catégorie

    - Un utilisateur peut enregistrer ses produits favoris.
    Compte - 0,n - Favoris - 0,n - Produit

    - Un utilisateur peut ajouter manuellement des produits de son choix dans la catégorie ProduitsPersos.
    Compte - 0,n - ProduitsPersosCompte - 1,1 - ProduitPerso


    Voici le scd qui en découle :

    Nom : Image1.png
Affichages : 391
Taille : 59,0 Ko



    Je me demande si ma gestion des produits ajoutés manuellement par l'utilisateur est la bonne, qu'en pensez-vous ?

  17. #17
    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 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Bonjour Mojitow,

    Selon votre MCD, PRODUIT_PERSO est une spécialisation de PRODUIT. Par conséquent, indépendamment de leurs utilisateurs, les produits sont regroupés en produits « perso » d’une part et produits « pas perso » d’autre part : quel sens donnez-vous à cela ?

    Quoi qu’il en soit, toujours selon votre MCD, un produit perso donné ne fait référence qu’à un seul compte, ce qui est pour le moins réducteur !

    Le mieux serait que vous nous fournissiez des exemples concrets de ce que vous souhaitez réaliser.

    Je vous souhaite un bon rétablissement.
    (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.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Pornstar
    Inscrit en
    Mars 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Pornstar

    Informations forums :
    Inscription : Mars 2018
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Bonjour fsmrel,

    merci d'intervenir une fois de plus pour m'aider.

    J'ai peut-être mal utilisé la fonctionnalité d'héritage sur le logiciel looping.
    En effet chaque utilisateur lorsqu'il crée sa liste a le choix entre plusieurs catégories dans lesquelles sont préalablement enregistrés des produits. Il dispose aussi de la catégorie "produits persos" dans laquelle il peut créer lui-même les produits qu'il désire (catégorie vide au départ ce qui explique la cardinalité 0,n de Categorie vers Produit).
    Ces produits persos pouvant être farfelus / atypiques au possible (image, nom), j'aimerais qu'ils ne soient sélectionnables que pour l'utilisateur qui les a créés.

    C'est pour cela que je pensais faire hériter ProduitPerso de Produit afin que les produits initiaux soient les mêmes pour chacun, et que chacun ait accès à ses produits "custom" mais pas à ceux des autres par souci d'excentricité possible des uns ou des autres.

    J'espère avoir été assez explicite sur mes intentions, si ce n'est pas le cas dîtes le moi

  19. #19
    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 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Bonsoir Mojitow,

    Je viens seulement de prendre connaissance de votre réponse. Je comprends ce que vous voulez dire. Je reprendrai cela dans la journée.

    En attendant, bon dimanche !
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

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

  20. #20
    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 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Bonjour Mojitow,

    Puisqu’un produit « perso » n’appartient qu’à un seul utilisateur, votre MCD est correct. Le bémol : obligation effectivement de définir la catégorie parasite « produit perso » dont vous faites mention, et la nécessité de la cohabitation dans la base de données (c’est-à-dire dans la table SQL PRODUIT) des produits dont vous avez la maîtrise et de produits parasites, incontrôlés.

    Mais on peut éviter de polluer la table PRODUIT en supprimant l’héritage. En conséquence, il est inutile de créer la catégorie « produit perso », mais il faudra doter PRODUIT_PERSO des attributs que vous jugerez utiles : nomProduit, imageProduit, etc.

    =>

    [COMPTE]---0,N---(ProduitPersoCompte)---1,1---[PRODUIT_PERSO]


    D’où au stade SQL quelque chose comme :

    CREATE TABLE COMPTE
    (
             compteId        INTEGER        NOT NULL,
             comptePseudo    VARCHAR(48)    NOT NULL,
             ...             ...            ...      
          CONSTRAINT COMPTE_PK PRIMARY KEY(compteId)
    );
    
    CREATE TABLE PRODUIT_PERSO
    (
             compteId        INTEGER       NOT NULL,
             produitId       INTEGER       NOT NULL,
             produitNom      VARCHAR(48)   NOT NULL,
             produitImage    VARCHAR(..)   NOT NULL,
          CONSTRAINT PRODUIT_PERSO_PK PRIMARY KEY(produitId),
          CONSTRAINT PRODUIT_PERSO_COMPTE_FK FOREIGN KEY(compteId) 
              REFERENCES COMPTE(compteId)
    ); 
    Bref, on chloroquine et on pratique la distanciation à cause de produits porteurs d'éventuels virus…
    (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.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] débutant, création d'une entrée dans la base de donnée mysql.
    Par fig77 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/07/2016, 20h03
  2. Confidentialité de la structure de la base de donnée mysql
    Par maloy dans le forum Administration
    Réponses: 2
    Dernier message: 23/10/2011, 19h30
  3. probleme construction base de donnes MySql...Help
    Par chakan dans le forum Requêtes
    Réponses: 7
    Dernier message: 21/07/2004, 12h27
  4. connection à base de donnée MYSQL
    Par zouzou_zaza dans le forum Bases de données
    Réponses: 11
    Dernier message: 04/07/2004, 13h31
  5. XML->Base de donnée Mysql
    Par lheureuxaurelie dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 11/03/2004, 00h47

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