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 :

Agencement BDD optimisation [MLD]


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Homme Profil pro
    architecte
    Inscrit en
    Avril 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : architecte
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2016
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Agencement BDD optimisation
    Bonjour à tous,

    je suis actuellement en train d'apprendre à utiliser des BDD et je me suis lancé un petit exercice pour améliorer l'optimisation dans la création de table.

    la base contient des animaux qui seront classés par catégories (félin,cheval, chat,..). on remarque ici qu'avec les catégorie félin et chat, un animal peut se trouver dans 2 catégorie à la fois.

    pour savoir comment organiser ma base, je me pose la question de ce que je compte en faire:

    une page web avec le choix d'une lettre de l'alphabet. quand on clique sur une lettre, la page affiche toutes les catégories qui comprenne un animal dont le nom commence par cette lettre et l'animal qui lui correspond.
    je veux également pouvoir ajouter des catégories dans le futur ainsi que pouvoir modifier le nom d'un animal.

    partant de ces éléments, j'imagine faire une table par catégorie intitulé par le nom de la catégorie et comprenant les champs 'id' et 'name'. 'id' étant la clé et 'name' le nom de l'animal rentrant dans cette catégorie. je ne m'occupe pas de la question de la lettre dans la table.
    je pensais ensuite faire une recherche par première lettre de chaque 'name' afin de savoir si je dois l'afficher dans ma page.

    là est donc ma question: est ce que cette façon de faire et optimisée? ne risque-t-elle pas d'être longue si ma base comporte beaucoup d'entrée.

    j'espère avoir été relativement clair Bonne journée !

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 126
    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 126
    Points : 38 509
    Points
    38 509
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    La réponse est non, faire une table par catégorie est une aberration

    Si les règles sont les suivantes
    R01 : un animal appartient à une à plusieurs catégories
    R02 : une catégorie peut concerner zéro à plusieurs animaux

    Alors le modèle conceptuel est
    ANIMAL 1,n --- catégoriser --- 0,n CATEGORIE

    Ce qui donne les tables suivantes
    ANIMAL (AN_id, AN_nom, …)
    CATEGORISER (AN_id, CT_id)
    CATEGORIE (CT_id, CT_code, CT_libelle)

  3. #3
    Membre à l'essai
    Homme Profil pro
    architecte
    Inscrit en
    Avril 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : architecte
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2016
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour et merci pour ton retour.

    Si je comprend bien, tu fais donc une table 'catégoriser' qui joint les deux autres tables. est ce que cette relation peut être faite directement dans la table animal?

    Concernant le point sur le tri alphabétique, cela te semble OK de faire une recherche sur la première lettre des noms dans les tables?

    Cordialement,

  4. #4
    Membre à l'essai
    Homme Profil pro
    architecte
    Inscrit en
    Avril 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : architecte
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2016
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    après réflexion,

    La table catégoriser doit permettre d'indiquer plusieurs catégorie pour un même animal, ce qui n'est pas le cas si on fait le lien directement dans la table animal ?

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 126
    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 126
    Points : 38 509
    Points
    38 509
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par jireu Voir le message
    Bonjour et merci pour ton retour.

    Si je comprend bien, tu fais donc une table 'catégoriser' qui joint les deux autres tables. est ce que cette relation peut être faite directement dans la table animal?

    Concernant le point sur le tri alphabétique, cela te semble OK de faire une recherche sur la première lettre des noms dans les tables?

    Cordialement,
    Relation faite directement ? j'avoue ne pas comprendre la question
    Quoi qu'il en soit, vu qu'un animal peut être dans plusieurs catégories et qu'une catégorie peut concerner plusieurs animaux :
    - il ne doit pas y avoir de clef étrangère "catégorie" dans la table animal
    - il ne doit pas y avoir de clef étrangère "animale" dans la table catégorie
    - il faut une table issue de la relation "catégoriser" qui possède pour PK les deux PK issues de chacune des entité-type de la relation
    soit la PK AN_id + CT_id
    D'une façon générale, quand une relation du MCD a une cardinalité maxi n de chaque coté, il faut procéder ainsi


    Citation Envoyé par jireu Voir le message
    après réflexion,

    La table catégoriser doit permettre d'indiquer plusieurs catégorie pour un même animal, ce qui n'est pas le cas si on fait le lien directement dans la table animal ?
    C'est ça

  6. #6
    Membre à l'essai
    Homme Profil pro
    architecte
    Inscrit en
    Avril 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : architecte
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2016
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup pour ces précisions très utiles. je vais donc partir sur ces bases pour mon projet. je reviendrai sans doute vous voir dans la section PHP / SQL

    Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Meilleur méthode d'écriture en bdd - optimisation
    Par maximenet dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 14/09/2006, 12h15
  2. Réponses: 1
    Dernier message: 07/07/2005, 14h02
  3. Optimisation temps d'accès Bdd des composants ADO
    Par Creenshaw dans le forum Bases de données
    Réponses: 14
    Dernier message: 07/06/2005, 17h09
  4. optimiser BDD pr requete
    Par xopos dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 10/02/2005, 10h06
  5. [VB6] [BDD] Optimisation de l'accès aux données
    Par LadyArwen dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/01/2003, 13h27

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