Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2011, 15h52   #1
Nouveau Membre du Club
 
Inscription : août 2010
Messages : 26
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 26
Points : 28
Points : 28
Par défaut Conseil sur structure table

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
galoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 16h26   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 670
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 670
Points : 8 732
Points : 8 732
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
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 16h53   #3
Nouveau Membre du Club
 
Inscription : août 2010
Messages : 26
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 26
Points : 28
Points : 28
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
galoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 01h23   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 670
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 670
Points : 8 732
Points : 8 732
Bonjour,

Citation:
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.
Dans ce cas, votre polygone doit avoir un attribut qui indique dans quel ordre les points doivent être joints.

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:
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
J'explique la différence plus en détails ici.
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
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 08h14   #5
Nouveau Membre du Club
 
Inscription : août 2010
Messages : 26
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 26
Points : 28
Points : 28
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 !

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.
galoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h03.


 
 
 
 
Partenaires

Hébergement Web