|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : août 2010 Messages : 26 ![]() |
Bonjour,
j'ai une table de lignes ayant 4 champs : IdLigne, IdOrdre, X, Y. La clé primaire est composée de IdLigne et IdOrdre. IdOrdre indique l'ordre des points de la ligne car une ligne peut être composé de 2 à 100 points. X et Y indiquent les coordonnées de chaque point de la ligne. Chaque ligne est reliée à une ou plusieurs autres lignes par des coordonnées X et Y identiques (que sur un point extrême de chaque ligne, IdOrdre le plus bas ou le plus haut). Exemple : Ligne A reliée à la Ligne D par le point 1 (IdOrdre mini de la ligne) de la ligne A et le point 23 (IdOrdre maxi de la ligne) de la ligne D et la Ligne A est reliée à la ligne R par leur IdOrdre maxi respectif. Je souhaite créer une table qui fasse le lien entre une table polygone et cette table lignes. J'ai pensé à IdPolygone, IdLigne mais je perd le lien entre l'IdOrdre de la ligne A qui est liée au IdOrdre de la ligne B, etc... Quelle structure de table liant polygone et lignes me conseillez-vous car je souhaite faire apparaîttre dans une requête les coordonnées de tout les points et de toutes les lignes qui composent le polygone X dans l'ordre logique des liaisons entre lignes et points. merci |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Bonjour,
Tout d'abord si vous êtes sous SQL Server 2005 ou suivants, vous pouvez utiliser le type geometry pour faire cela. Sinon vous auriez du créer : - une table de lignes - une table de points - une table lignes_points, qui représente physiquement la relation entre une ligne et un point, un point pouvant appartenir à plusieurs lignes. Cette dernière table a de plus une colonne ordre qui indique la position ordinale du point dans la ligne. A partir de là, je subodore que vos requêtes s'écriront excessivement simplement Ensuite un polygone étant constitué de plusieurs lignes (au moins 3, vérifiez cela avec une contrainte de domaine (CHECK)), il suffit d'avoir une table de polygones, et une table polygone_lignes @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : août 2010 Messages : 26 ![]() |
Elsuket, merci pour ta réponse.
Par contre, je ne vois pas comment je vais afficher via une requête le bon enchainement des points de toutes les lignes puisque certaines lignes seront dans un ordre croissant d'ordre et d'autres dans un ordre décroissant pour fermer le polygone. En effet, une même ligne devra avoir ces points dans un ordre croissant pour le polygone X et un ordre décroissant pour le polygone Y suivant le point qui réalise la jointure avec la ligne précédente du polygone. par avance merci. ps: Je croyais que l'on devait parler de champ d'une table et de colonne pour une requete sql, merci pour la mise au point |
|
|
00
|
|
|
#4 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Bonjour,
Citation:
Mais géométriquement, pour un polygone, les points qui constituent les extrémités de chaque segment n'ont pas d'ordre ... comme les lignes et les colonnes en SQL ! Rappelez-vous qu'à ce titre, si vous êtes sous SQL Server 2005 ou plus, vous pouvez utiliser le type de données geometry (et toutes ses possibilités !) pour stocker des polygones. Citation:
Cela peut sembler subtil, mais ce n'est pas du tout négligeable @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#5 | |
|
Nouveau Membre du Club
![]() Inscription : août 2010 Messages : 26 ![]() |
bonjour,
Citation:
Je me suis certainement mal exprimé. En effet, chaque segment est composé de 2 à x points et l'ordre des points de ce segment est primordial pour l'afficher correctement. Un polygone peut être décrit par : A1-A3-B5-B1-C1-C4 (avec A1 le point n°1 du segment A) et dans ce cas l'enchaînement logique des points sera A1-A2-A3-B5-B4-B3-B2-B1-C1-C2-C3-C4 pour l'afficher correctement. D'où ma question concernant la structure des tables et requête pour que l'ordre des lignes de ma requete soit dans cet ordre logique. La solution que j'ai retenu est la suivante, hormis le type geometry (qui serait le plus adapté, je l'admets) : Une table segments. Une table points. Une table segment-point avec une colonne Ordre pour ne pas perdre l'ordre des points de chaque segment. Jusque là, je suis ton idée qui est une structure relationelle conventionnelle. Par contre, concernant les polygones : Une table Polygones Une table Polygone-point avec une colonne Ordre pour ne pas perdre l'ordre des points qui compose le polygone (cf plus haut). Finalement un polygone sera décrit par les points et non par les segments. Merci encore pour ton aide qui m'a éclairé aussi bien sur la structure de mes tables que sur la différence entre champ/colonne et enregistrement/ligne. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com