+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre habitué
    Inscrit en
    janvier 2004
    Messages
    340
    Détails du profil
    Informations forums :
    Inscription : janvier 2004
    Messages : 340
    Points : 112
    Points
    112

    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 Confirmé Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    1 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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 : 1 988
    Points : 3 093
    Points
    3 093

    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.

  3. #3
    Expert Confirmé Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    1 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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 : 1 988
    Points : 3 093
    Points
    3 093

    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 !

  4. #4
    Membre habitué
    Inscrit en
    janvier 2004
    Messages
    340
    Détails du profil
    Informations forums :
    Inscription : janvier 2004
    Messages : 340
    Points : 112
    Points
    112

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •