Mélange de types de géométrie dans une table PostGIS

24

Je suis confronté au problème suivant. Je dois migrer de la base de données Oracle vers PostgreSQL + PostGIS. Actuellement, toutes les géométries de tous les types sont stockées dans une table et chaque enregistrement contient un champ "couvercle" qui indique les caractéristiques de la même couche.

Quels sont les avantages et les inconvénients de l'utilisation d'une telle méthode? Dois-je diviser les données en plusieurs tables si je n'ai pas besoin d'utiliser la base de données avec un logiciel tiers? Qu'en est-il des performances des requêtes spatiales, les index m'aideront-ils?

drnextgis
la source
De quel type de "types" parlez-vous? S'agit-il de POLYGON, LINE et POINTS? Ou s'agit-il de types tels que "routes", "rivières", etc.?
Pablo
Je veux dire des types de géométries telles que des polygones, des lignes et des points.
drnextgis

Réponses:

24

Si vous n'avez pas besoin de l'assistance d'un tiers et que vous n'avez pas besoin de rechercher par type, les conserver dans le même tableau fonctionne très bien. Alternativement, vous pouvez utiliser un modèle d'héritage comme expliqué dans le chapitre 3 de PostGIS en action.

http://www.postgis.us/chapter_03_edition_1

Du point de vue de l'architecture, PostGIS ne se soucie pas vraiment si dans une requête plusieurs types différents sont utilisés. S'il a bien fonctionné pour vous dans Oracle, ce sera comme s'il n'était pas plus performant dans PostGIS.

Il y a 2 raisons de le diviser (et l'une ou l'autre peut être effectuée plus tard si nécessaire): 1) Empêchez les gens d'insérer différents types que vous ne voulez pas comme les collections de géométrie, les chaînes circulaires et ce qui ne l'est pas (que vous pourriez simplement définir manuellement une contrainte )

2) Si vous avez un milliard de points et 1000 polygones, et que vous effectuez beaucoup de points dans les tests de polygones, la vitesse est bien meilleure si lorsque vous interrogez et effectuez votre jointure - c'est contre un milliard - à 1000 table d'enregistrement par opposition à un record de milliards à milliards de table. Ce serait le cas pour toute base de données spatiales je pense (non spécifique à PostGIS). C'est vrai pour toutes les requêtes relationnelles, je suppose aussi (non spécifique aux requêtes spatiales).

LR1234567
la source
1
Pour le bénéfice des gens qui y reviennent maintenant: dans PostGIS in Actions 2e édition, cela a été déplacé au ch 14.
yeedle
11

Celui-ci me dérange vraiment. Je suppose que c'est parce que j'ai vu trop de fichiers CAO avec des données sur une seule couche, différenciées uniquement par la couleur.

Il s'agit en fait d'un choix entre l'organisation des données par structure ou par attribut .

Compte tenu de ce choix, j'irais toujours pour organiser mes données via la structure de données.

Pour commencer, lors du traitement des données, vous avez un cercle de moins à parcourir (par exemple, sélectionnez a, b, c dans le tableau où id = X au lieu de sélectionner a, b, c dans le tableau où id = X ET couvercle = Y )

Ensuite, considérez pourquoi les bases de données autorisent plusieurs tables - si un format de données offre des structures de données particulières, vous devez penser qu'elles traiteront les données plus efficacement si vous les utilisez.

Mais le gros problème (pour moi) est quand vous voulez déplacer les données vers un autre système. Ensuite, je pense que cela devient un véritable défi, car l'application finale pourrait ne pas utiliser les données de la même manière. J'ai vu tant de gens se décoller dans ce scénario.

Donc - selon mon expérience - vous pourrez utiliser et transférer des données deux fois plus efficacement quand il a un modèle de données décent (plus profond et plus structuré).

Mark Ireland
la source
1
Je suis d'accord avec vous en ce que le scénario de l'OP est sans doute sale (nous ne connaissons pas la trame de fond), mais votre examen est un peu dramatique. Ce n'est pas le bouleversement cataclysmique que vous décrivez. Peu m'importe si c'est pour une utilisation quotidienne ou pour ETL dans un nouveau système / architecture, tout cela peut être simplifié facilement avec quelques vues et quelques index appropriés, et ceux-ci peuvent être écrits en quelques minutes .. .even s'il existe plusieurs lidvaleurs uniques .
elrobis