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

Optimisations SGBD Discussion :

Dénormalisation ou pas ?


Sujet :

Optimisations SGBD

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 464
    Points : 332
    Points
    332
    Par défaut Dénormalisation ou pas ?
    Un doute me vient quant à la pertinence du forum pour cette question ! Désolé si je ne suis pas dans le bon forum (j'avais l'impression que cela rentrait dans l'optimisation ... mais bon, je peux me tromper)

    J'ai bien conscience à la lecture de plusieurs discussions d'ouvrir une bouteille à l'encre où les avis sont aussi tranchés que définitifs. Cependant j'ose tout débutant que je suis aborder ici le sujet.
    Je dispose d'une table limes (id, id_premier_point,id_dernier_point) et d'une table points (id, long, lat)
    Pour retrouver les points composants un limes je récupère tous les points dont l'id est compris entre id_premier_point et id_dernier_point.
    Les points sont effectivement entrés dans la table par lots de points consécutifs. Cela m'économise énormément de lignes : à l'heure actuelle 4000 limes et 50000 points. Par contre la table points n'est pas normalisée au sens qu'il est plus pratique de répéter un point dans une suite que de créer un limes comportant un seul point.
    L'autre façon de procéder serait de créer une table d'associations limes_points comportant id_limes, id_points, rang, la clé primaire étant le couple id_limes, rang. Mais la table comporte alors 300000 lignes et va aller en augmentant considérablement à chaque ajout de limes.
    Bien sûr l'avantage de la deuxième méthode est la récupération des points du limes (outre la normalisation de la table points), ainsi que la récupération des limes ayant un point commun.
    Qu'en pensez-vous ?
    C'est en respectant les autres que l'on se fait respecter.

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 152
    Points : 7 402
    Points
    7 402
    Billets dans le blog
    1
    Par défaut
    Un point peut-il être référencé par deux limes ?

    J'ai l'impression que non.

    Donc la solution la plus simple serait, à mon avis : ajouter "id_lime" à la table "points".

    Ensuite, même si c'est pas bien normalisé, tu peux déduire le "rang" du point par ordre croissant de points.id pour un même id_lime.
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 152
    Points : 7 402
    Points
    7 402
    Billets dans le blog
    1
    Par défaut
    PS : A noter aussi que la plupart des SGBD modernes proposent des types "gemoetry". Il y a notamment "polygon", qui me semble bien être un synonyme de "lime", que je ne connais pas.

    L'intérêt de ces types, c'est que tu as des fonctions permettant de faire des calculs geometriques dessus : intersection, etc.
    => Et surtout, tous les points du polygone sont stockés dans unique champ !
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 464
    Points : 332
    Points
    332
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Un point peut-il être référencé par deux limes ?

    J'ai l'impression que non.

    Donc la solution la plus simple serait, à mon avis : ajouter "id_lime" à la table "points".

    Ensuite, même si c'est pas bien normalisé, tu peux déduire le "rang" du point par ordre croissant de points.id pour un même id_lime.
    Je réponds au deux interventions en même temps : un point peut être référencé par plusieurs limes. Donc on ne peut simplement rajouter id-limes à la table points.
    Un limes est une succession de points en général pas fermé (à la différence du polygone). C'est un terme issu du monde romain où un limes est un morceau de frontière de l'empire.
    J'utilise H2 pour une raison d'exploitation : la plupart des utilisateurs de mon logiciel n'ont en général pas de SGBD installé sur leur machine et en tout état de cause même si certains en ont un d'installer, ils n'ont pas tous le même d'où l'intérêt d'un SGBD léger, écrit en java et installable d'une manière transparente avec le logiciel.
    La base est pour le moment locale avec un utilisateur en même temps qui ne fait que de la lecture. La maintenance de la base est assurée par une seule personne et consiste essentiellement à rajouter des données dont il faut vérifier la cohérence avec celle pré-existante.
    H2 n'intègre pas le concept de geometry.
    C'est en respectant les autres que l'on se fait respecter.

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

Discussions similaires

  1. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  2. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15
  3. Réponses: 1
    Dernier message: 23/06/2002, 00h15
  4. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15

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