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

MS SQL Server Discussion :

Conseil sur structure table


Sujet :

MS SQL Server

  1. #1
    Invité
    Invité(e)
    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
    Dernière modification par Invité ; 27/12/2011 à 16h06.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    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

    @++

  3. #3
    Invité
    Invité(e)
    Par défaut
    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

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    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.

    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

    @++

  5. #5
    Invité
    Invité(e)
    Par défaut
    bonjour,


    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.

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

Discussions similaires

  1. Conseil sur une table
    Par nef1912 dans le forum Débuter
    Réponses: 5
    Dernier message: 21/05/2014, 11h35
  2. [MVC4] Conseils sur structure authentification
    Par zax-tfh dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 14/03/2013, 16h06
  3. [MySQL] Conseils sur structure
    Par Superskunk dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/05/2009, 20h35
  4. recherche aide et conseils sur les tables
    Par jj77 dans le forum Langage
    Réponses: 1
    Dernier message: 10/01/2007, 23h24
  5. Conseils sur structure de programme
    Par RR instinct dans le forum Langage
    Réponses: 6
    Dernier message: 21/09/2006, 14h44

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