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

MySQL Discussion :

Architecture base de donnée et vitesse des requêtes


Sujet :

MySQL

  1. #1
    Membre à l'essai Avatar de Sinbad93
    Homme Profil pro
    Apprenti Dev
    Inscrit en
    Octobre 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti Dev

    Informations forums :
    Inscription : Octobre 2020
    Messages : 23
    Points : 20
    Points
    20
    Par défaut Architecture base de donnée et vitesse des requêtes
    Bonjour,
    J'ai une base donnée avec une table qui contient les informations d'un produit, ce produit peut se situer dans l'entrepôt A ou B.
    Côte utilisateur je choisis mon entrepôt avant d'afficher les produits. Côté Admin je veux avoir un visu total des produits ou pouvoir scinder par entrepôt.
    Ma question concerne l'agencement des tables pour la performance des requêtes.
    Je ne sais pas si il est préférable de :
    Mettre tous les produits dans la même table avec un ENUM pour déterminer l'entrepôt et donc des requêtes WHERE Entrepot = A ou B pour afficher mes produit
    OU
    Faire un table par entrepôt ce qui permet de diviser par deux le nombre de lignes de produits et donc des requêtes SELECT * plus rapide que Where
    Dans ce cas l'admin doit requêter 2 table différentes pour avoir tout ses produits
    Question :
    Est ce que 2: SELECT * sans Where valent mieux qu'un SELECT qu'avec un WHERE ? et dans quelle mesure car il faut voir qu'une architecture avec un ENUM est moins chronophage à coder et à gérer que deux tables séparés.

    Merci de votre attention, je suis un développeur junior et je souhaite avoir les bonnes pratiques pour que mes requêtes soient toujours performantes quelque soit le volume.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Si tu pars sur une table "produit" par entrepôt, tu vas vite galérer quand tu vas ajouter des entrepôts... Si tu veux tout voir, il faudra faire des unions en cascade, et modifier la requête à chaque ajout d'un entrepôt.
    Pour ma part, je partirai sur 3 tables:
    1. Une table Produit
    2. Une table Entrepôt
    3. Une table croisée entre les deux (Produit_Entrepôt)

    La table Produit_Entrepôt possède, en plus des clés primaire des tables Produit et Entrepôt (avec une contrainte d'unicité sur le couple), des données comme par exemple le stock, la dernière date d'entrée...

    Ainsi tu peux ajouter autant d'entrepôts que nécessaire, mettre un même produit dans deux entrepôts...

    Tatayo.

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

    Le découpage en tables, au moins dans un premier temps, ne doit pas être le résultat de considérations techniques (les perfs, la façon de construire les requêtes ou autres), mais seulement de la réalité des règles de gestion.
    Si un même produit peut être dans plusieurs entrepôts alors il faut à minima deux tables.
    Mais, le plus souvent, on gère également la localisation des produits dans les entrepôts, ne serait-ce que pour ne pas avoir à chercher dans tout l'entrepot où est stocké le produit et également pour ne pas chercher à ranger un produit dans un endroit de l'entrepôt déjà occupé.
    Pour ce faire, la plupart des logiciels de gestion de stock prévoient une gestion par entrepot, magasin, emplacement.

    Ainsi on aura un modèle conceptuel du type :
    [PRODUIT] 0,n --- stocker --- 0,1 [EMPLACEMENT] 1,1(R) --- localiser --- 1,n [MAGASIN] 1,1(R) --- situer --- 1,n[ENTREPOT]

    Ce qui donne 4 tables
    L'identification relative notée x,y(R) permettra justement d'optimiser les recherches

  4. #4
    Membre à l'essai Avatar de Sinbad93
    Homme Profil pro
    Apprenti Dev
    Inscrit en
    Octobre 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti Dev

    Informations forums :
    Inscription : Octobre 2020
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Merci pour votre aide à tous les deux,
    c'est très clair, même si le sujet de la vitesse n'est pas abordé,
    les conseils au niveau de l'architecture sont précieux.
    Bon code à tous !

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    En particulier les types non atomique comme ENUM ou ARRAY, ne devraient JAMAIS être utilisés. Ce sont des types non relationnels impossible à indexer !
    Leur usage doit être réservé aux routines (Procédure stockées, Fonction UDF...) mais jamais à la construction des tables.

    Enfin, les performances se gèrent par les actions de DBA au niveau physique et non au niveau de la conception du modèle qui doit être normalisé (voir : https://fsmrel.developpez.com/basesr...normalisation/)

    Un modèle parfaitement normalisé est facile à rendre performant par l'ajout d'index.

    Un modèle dénormalisé est difficile à rendre performant, voire impossible (exemple : tables obèses, utilisation de types non atomiques comme ARRAY ou ENUM...).

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

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 11/10/2010, 18h29
  2. Réponses: 5
    Dernier message: 25/04/2007, 11h34
  3. Quelle Base de Données pour gérer des documents multimédia ?
    Par Doudy dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 21/01/2007, 20h52
  4. Réponses: 3
    Dernier message: 13/08/2006, 10h50
  5. base de données de gestion des employés
    Par sam_212 dans le forum Access
    Réponses: 4
    Dernier message: 02/08/2006, 14h34

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