Précédent   Forum du club des développeurs et IT Pro > Bases de données > Décisions SGBD > Optimisations
Optimisations Forum de conseils pour les optimisations des performances SGBD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/04/2012, 16h40   #1
Patrice Henrio
Membre du Club
 
Inscription : janvier 2004
Messages : 250
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 250
Points : 63
Points : 63
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.
Patrice Henrio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 17h02   #2
StringBuilder
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 517
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 34
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : février 2010
Messages : 1 517
Points : 2 381
Points : 2 381
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.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 17h04   #3
StringBuilder
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 517
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 34
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : février 2010
Messages : 1 517
Points : 2 381
Points : 2 381
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 !
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 20h05   #4
Patrice Henrio
Membre du Club
 
Inscription : janvier 2004
Messages : 250
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 250
Points : 63
Points : 63
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.
Patrice Henrio est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h27.


 
 
 
 
Partenaires

Hébergement Web