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 :

Une ou plusieurs tables? [MCD]


Sujet :

Schéma

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 50
    Points : 29
    Points
    29
    Par défaut Une ou plusieurs tables?
    Bonjour,
    je suis plutôt débutant dans la gestion des bases de données.
    Ma question pourra donc paraitre simple mais je n'ai pas trouvé de réponses satisfaisantes.

    Je dois constituer une base de données avec des mesures de capteurs (température, vitesse...). Chaque capteur est enregistrer au moins 1* par 5 minutes => ~100 000 enregistrements /an / capteur. On peut compter qu'à termes il y aura plusieurs dizaines de capteur => plusieurs millions d'entrées par an

    Pour le moment j'ai réalisé une table dont la structure est la suivante:
    ID (identifiant avec auto increment)
    Datetime (le moment de l'enregistrement)
    Valeur (La valeur, ce sont tous des nombres avec une seule décimale et toujours inférieure à 100)
    Capteur (un identifiant unique incorporant le capteur)

    Je voulais savoir si la logique était la bonne ou s'il était préférable de créer une table par capteur pour améliorer les performances de recherches ultérieures. Ou toute autre alternative qui vous semble mieux convenir à ce cas de figure

    Merci pour votre aide.

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

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

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

    Si les caractéristiques des capteurs sont intéressantes, il faut une table des capteurs et une table des mesures, sinon vous êtes contraints de répéter les caractéristiques d'un même capteur autant de fois qu'il fait une mesure. Or, c'est exactement ce qu'il ne faut pas faire.
    Si au contraire les caractéristiques des capteurs sont sans intérêt, pourquoi stocker un identifiant du capteur, est-ce une donnée qui vous est communiquée par un tiers ?

    Voici un autre sujet qui concerne les capteurs et mesures et qui pourra peut être vous aider :
    https://www.developpez.net/forums/d1...ions-capteurs/

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    L'identifiant unique du capteur sert d'une part à faire une recherche sur le capteur mais également à utiliser une autre table avec les caractéristiques des capteurs pour éviter de les enregistrer à chaque fois.
    La question que je me pose c'est qu'après plusieurs mois/années, la table va contenir plusieurs millions d'enregistrements et je me demande si c'est opportun de n'avoir qu'une seule table... car les recherches me semblent (mais je me trompe peut-être) plus longue à réaliser.

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

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Une seule table est préférable, mais il faut prévoir un archivage voire une suppression des données obsolètes et utiliser le partitionnement si le volume devient très conséquent (des dizaines de millions de lignes et +)

    Ne créez surtout pas une table par capteur : si vous voulez analyser par exemple toutes les mesures du mois tous capteurs confondus, il faudra faire autant de jointures qu'il y a de capteurs très mauvaise idée
    Autre exemple : vous voulez rechercher tous les capteurs achetés il y a plus de 10 ans pour planifier leur remplacement, là aussi vous allez faire une jointure (ou union ou autant de requêtes) qu'il y a de capteurs ? Pas bien non plus

    Consulter une table de plusieurs centaines de millions de lignes ne pose aucun problème de performances si la requête est bien construite et qu'il existe des index filtrants

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Je comprends le problème de tables séparées si des jointures (ou assimilé) étaient nécessaires (même si je dois avouer que je ne planifie absolument pas ce type de requête).
    Si vous me dites que plusieurs millions d'enregistrements ne posent pas problème, alors je pense conserver ma solution... qui semble convenir

    Quand vous parlez de requête bien construite... Dans mon cas le but est de faire un select sur un capteur dans une plage de date, est-ce cohérent? A mon sens ce sont les index filtrants mais ne connaissant pas la terminologie je préfère m'en assurer

    Encore merci.

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

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Filtrant signifie que le nombre de lignes récupérées par la requête au moyen de l'index est une proportion très faible de la population totale de la table.

    Si les requêtes ne doivent concerner qu'un seul capteur pour une plage de dates et qu'il y a un grand nombre de capteurs alors il faudra créer un index ayant pour 1re colonne le n° de capteur puis la date de la mesure.

    Si les requêtes concernent tous les capteurs pour une période, ou qu'il y a très peu de capteurs, alors il faut un index sur la date de mesure seule

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Naïvement, je pensais que lorsque je faisais une recherche sur une colonne je filtrai mais apparemment pas au moyen d'un index...

    Auriez vous :
    - un conseil à me donner dans la gestion des index au vu de la table présentée et des recherches que je compte faire: sélection d'un ou plusieurs capteurs durant une période donnée pour afficher les données sur un graphique?
    - une référence pouvant aider le néophyte que je suis dans le gestion d'index et l'optimisation de cette table

    Je vous remercie.

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

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Yellow-Sky Voir le message
    Naïvement, je pensais que lorsque je faisais une recherche sur une colonne je filtrai mais apparemment pas au moyen d'un index...
    Ca dépend : c'est le cas si au moins un index existe pour les critères de filtrage et que ces critères sont dits "sargable" (Search Argument Able)
    Sont "sargable" les critères utilisés avec des opérateurs tels que =, <, >, between...
    Ne sont pas "sargable" les critères utilisés avec des opérateurs tels que like '%xxx%', !=, les critères dont le type ou la taille sont différents de ceux de la colonne recherchée, les fonctions appliquées sur la colonne...

    Les index sont des éléments du modèle physique de données, ils sont donc liés au choix du SGBD.
    Les conseils donnés plus haut sont valables quel que soit le SGBD, mais pas les modalités de mise en oeuvre.

    Pour des réponses détaillées, il faut donc se rendre dans le forum consacré aux différents SGBD dont la racine se trouve ici :
    https://www.developpez.net/forums/f4/bases-donnees/

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Merci pour les détails.
    En l’occurrence un champs int et Datetime seraient sargables donc cela semble bon.
    Je clôture et vais suivre votre conseil.

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

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Yellow-Sky Voir le message
    En l’occurrence un champs int et Datetime seraient sargables donc cela semble bon.
    Attention :

    Soit, par exemple une colonne TAB1.COL1 de type integer

    Les prédicats suivants sont "sargable" :
    where TAB1.COL1 = 10.
    where TAB1.COL1 > 15.
    where TAB1.COL1 between 22 and 30.

    Mais ces prédicats ne le sont pas
    where decimal(TAB1.COL1) = 10 <-- utilisation d'une fonction sur la colonne : aucun index éligible.
    where TAB1.COL1 != 10 <-- opérateur "différent de" non sargable

    Le type de la colonne seul ne suffit pas à vérifier si le prédicat est sargable

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Merci pour les précisions.

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

Discussions similaires

  1. Choix entre une ou plusieurs tables
    Par moumoune65 dans le forum Optimisations
    Réponses: 2
    Dernier message: 30/12/2008, 14h39
  2. Recheche sur une ou plusieurs tables
    Par majothi dans le forum VBA Access
    Réponses: 6
    Dernier message: 19/09/2008, 16h13
  3. [nhibernate] mapper une classe à plusieurs tables
    Par maa dans le forum NHibernate
    Réponses: 6
    Dernier message: 02/07/2007, 18h06
  4. [Conception] Une ou plusieurs tables
    Par spawns dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/08/2006, 11h23
  5. [débutant] 1 ordre select sur une OU plusieurs tables
    Par goony dans le forum Langage SQL
    Réponses: 10
    Dernier message: 18/08/2005, 10h57

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