2010-12-16 3 views
2

Existe-t-il une base de données hiérarchique ou une émulation open-source sur le SGBDR existant? Je recherche un DMBS (ou un plugin au SGBDR existant) qui peut stocker des données hiérarchiques et permet d'effectuer des requêtes sur des données hiérarchiques (quelque chose comme "SELECT LEVEL ... CONNECT BY ...", "SELECT PARENT .. ." par exemple). Je sais qu'il existe un certain soutien dans Oracle, mais existe-t-il une solution plus complexe?recherche de SGBD avec structure hiérarchique

Répondre

3

Il n'existe pas de plugin standardisé pour cela. J'ai regardé plus d'une fois. Cependant, il existe un certain nombre d'options. Voir de ma question précédente sur le même sujet:

What are the options for storing hierarchical data in a relational database?

En bref, si vous utilisez une table avec ID et ParentID (alias liste contiguïté) que vous utilisez Common Table Expressions avec la plupart des bases de données (CONNECT BY Oracle étant l'une des exceptions les plus notables). OTO, quelque chose comme un chemin matérialisé ou des ensembles imbriqués peut être un meilleur ajustement pour votre situation - par exemple la capacité de trouver facilement "lignage" où avec la liste d'adjacence c'est une opération coûteuse.

Habituellement, ce qui finit par arriver avec un système qui a besoin de beaucoup travailler avec des données hiérarchiques, par exemple un CMS, c'est qu'il implémente plus d'une de ces solutions. L'hypothèse est largement compensée par les écritures.

+0

meilleure réponse jusqu'à présent –

+0

Alors qu'un problème qui revient souvent pas assez, il y a une façon nettement supérieure de le faire. – orangepips

0

données relationnelles ne prend pas en charge directement les hiérarchies de la manière dont une structure intrinsèquement hiérarchique comme XML fait. Vous devez utiliser un modèle de données tel que des ensembles imbriqués ou une auto-jointure directe pour modéliser la hiérarchie.

Selon le type de système dont vous disposez, Common Table Expressions vous permet d'exécuter des requêtes hiérarchiques sur les données. Les CTE sont supportés par les versions SQL Server depuis 2005, les versions récentes de DB/2 et PostgreSQL - et probablement d'autres systèmes. Les CTE sont un peu plus compliqués que CONNECT BY, mais ils fonctionnent sur une grande variété de plateaux.

Questions connexes