<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ep-patent-document PUBLIC "-//EPO//EP PATENT DOCUMENT 1.5//EN" "ep-patent-document-v1-5.dtd">
<ep-patent-document id="EP08835732B1" file="EP08835732NWB1.xml" lang="fr" country="EP" doc-number="2188744" kind="B1" date-publ="20190313" status="n" dtd-version="ep-patent-document-v1-5">
<SDOBI lang="fr"><B000><eptags><B001EP>ATBECHDEDKESFRGBGRITLILUNLSEMCPTIESILTLVFIRO..CY..TRBGCZEEHUPLSK..HRIS..MTNO........................</B001EP><B003EP>*</B003EP><B005EP>J</B005EP><B007EP>BDM Ver 0.1.63 (23 May 2017) -  2100000/0</B007EP></eptags></B000><B100><B110>2188744</B110><B120><B121>FASCICULE DE BREVET EUROPEEN</B121></B120><B130>B1</B130><B140><date>20190313</date></B140><B190>EP</B190></B100><B200><B210>08835732.2</B210><B220><date>20080911</date></B220><B240><B241><date>20100310</date></B241><B242><date>20170629</date></B242></B240><B250>fr</B250><B251EP>fr</B251EP><B260>fr</B260></B200><B300><B310>0757498</B310><B320><date>20070911</date></B320><B330><ctry>FR</ctry></B330></B300><B400><B405><date>20190313</date><bnum>201911</bnum></B405><B430><date>20100526</date><bnum>201021</bnum></B430><B450><date>20190313</date><bnum>201911</bnum></B450><B452EP><date>20181002</date></B452EP></B400><B500><B510EP><classification-ipcr sequence="1"><text>G06F  17/30        20060101AFI20090429BHEP        </text></classification-ipcr></B510EP><B540><B541>de</B541><B542>ANLAGE ZUR VERWALTUNG EINER DATENBANK</B542><B541>en</B541><B542>INSTALLATION FOR MANAGING A DATABASE</B542><B541>fr</B541><B542>INSTALLATION DE GESTION D'UNE BASE DE DONNÉES</B542></B540><B560><B561><text>US-A1- 2004 122 646</text></B561><B561><text>US-A1- 2007 203 892</text></B561><B561><text>US-B1- 6 480 857</text></B561></B560></B500><B700><B720><B721><snm>VOGEL, Marc</snm><adr><str>9, rue de la Feuillaume</str><city>92420 Vaucresson</city><ctry>FR</ctry></adr></B721><B721><snm>VOGEL, Dan</snm><adr><str>9 Rue de la Feuillaume</str><city>92420 Vaucresson</city><ctry>FR</ctry></adr></B721></B720><B730><B731><snm>ENABLON</snm><iid>101638038</iid><irf>BET 10P0264/VH</irf><adr><str>2 Boulevard Georges Clemenceau</str><city>92400 Courbevoie</city><ctry>FR</ctry></adr></B731></B730><B740><B741><snm>Lavoix</snm><iid>101595959</iid><adr><str>2, place d'Estienne d'Orves</str><city>75441 Paris Cedex 09</city><ctry>FR</ctry></adr></B741></B740></B700><B800><B840><ctry>AT</ctry><ctry>BE</ctry><ctry>BG</ctry><ctry>CH</ctry><ctry>CY</ctry><ctry>CZ</ctry><ctry>DE</ctry><ctry>DK</ctry><ctry>EE</ctry><ctry>ES</ctry><ctry>FI</ctry><ctry>FR</ctry><ctry>GB</ctry><ctry>GR</ctry><ctry>HR</ctry><ctry>HU</ctry><ctry>IE</ctry><ctry>IS</ctry><ctry>IT</ctry><ctry>LI</ctry><ctry>LT</ctry><ctry>LU</ctry><ctry>LV</ctry><ctry>MC</ctry><ctry>MT</ctry><ctry>NL</ctry><ctry>NO</ctry><ctry>PL</ctry><ctry>PT</ctry><ctry>RO</ctry><ctry>SE</ctry><ctry>SI</ctry><ctry>SK</ctry><ctry>TR</ctry></B840><B860><B861><dnum><anum>FR2008051627</anum></dnum><date>20080911</date></B861><B862>fr</B862></B860><B870><B871><dnum><pnum>WO2009044087</pnum></dnum><date>20090409</date><bnum>200915</bnum></B871></B870></B800></SDOBI>
<description id="desc" lang="fr"><!-- EPO <DP n="1"> -->
<p id="p0001" num="0001">La présente invention concerne une installation d'interrogation de gestion d'une base de données comportant :
<ol id="ol0001" compact="compact" ol-style="">
<li>a/ une base de données comprenant :
<ul id="ul0001" list-style="none" compact="compact">
<li>a1/ des moyens de filtrage des données contenues dans des champs à partir d'algorithmes internes d'optimisation de la base de données propres à fournir les données recherchées en réponse à une requête définissant le filtre ; et</li>
<li>a2/ au moins une hiérarchie de données de au moins trois niveaux hiérarchiques et</li>
</ul></li>
<li>b/ des moyens d'interrogation propres à fournir au moins une requête définissant un filtre permettant la sélection des données recherchées par mise en oeuvre des moyens de filtrage.</li>
</ol></p>
<p id="p0002" num="0002">De nos jours, les bases de données sont utilisées pour stocker un très grand nombre de données issues de sources multiples. Il est connu que ces données soient stockées dans des tables comportant chacune plusieurs champs, ces tables étant définies par le modèle de données. Des relations sont établies et mémorisées dans la base de données entre les champs des différentes tables.</p>
<p id="p0003" num="0003">Les bases de données relationnelles contrairement aux bases de données multidimensionnelles n'offrent pas d'objets standard pour représenter directement des hiérarchies. Une hiérarchie ou dimension, termes sensiblement équivalents dans le monde des bases de données multidimensionnelles, permet de représenter des dépendances d'éléments sur plusieurs niveaux hiérarchiques. Par exemple, dans une hiérarchie de type géographique, au premier niveau se trouvent les continents, ensuite les pays, puis les villes. Ainsi, la ville Paris se trouve au troisième niveau, les second et premier étant respectivement France et Europe.</p>
<p id="p0004" num="0004">Une telle hiérarchie est couramment représentée sous la forme d'un arbre dont les noeuds fils sont hiérarchiquement à un niveau inférieur aux noeuds parents dont ils dépendent.</p>
<p id="p0005" num="0005">L'intérêt d'introduire le concept de hiérarchie dans une base de données est de pouvoir effectuer des changements d'échelle. Par exemple si la base de données relationnelles contient une liste des ventes d'un produit par ville du monde entier, il peut être intéressant de filtrer, de cette liste, toutes les ventes associées à une région du monde en particulier, par exemple l'Europe.<!-- EPO <DP n="2"> --></p>
<p id="p0006" num="0006">Dans l'état de la technique, plusieurs approches sont connues pour traiter ce sujet de la gestion des hiérarchies. Elles peuvent être résumées comme suit.</p>
<heading id="h0001">*Approche par une base multidimensionnelle</heading>
<p id="p0007" num="0007">Cette première approche consiste à représenter la hiérarchie ainsi que la liste des ventes dans une base de données multidimensionnelles. Cependant, les bases de données multidimensionnelles sont en général complexes à mettre en oeuvre et elles ne présentent pas certaines fonctionnalités qui n'existent que dans le monde des bases de données relationnelles. Cette perte peut devenir un grand inconvénient car il implique un choix structurel fort ayant des conséquences en termes de fonctions, de performances, de coûts, si le besoin de gérer des structures à plusieurs niveaux n'est que ponctuel et ne constitue pas la finalité première du produit.</p>
<p id="p0008" num="0008">Une variante de cette approche consiste à utiliser des connecteurs OLAP ( Online Analytical Processing) qui permettent d'interroger une base de données relationnelles avec des requêtes multidimensionnelles. Les inconvénients sont que les connecteurs OLAP ne sont pas disponibles pour tous les moteurs de base de données relationnelles et que leur performance est réduite du fait qu'ils doivent passer par des étapes de retravail des données pour effectuer des analyses multidimensionnelles.</p>
<heading id="h0002">* Approche bases de données relationnelles avec le modèle de données typiquement utilisé.</heading>
<p id="p0009" num="0009">La deuxième approche consiste à représenter la hiérarchie ainsi que la liste de ventes dans une base de données relationnelles classique. Toutefois, cette dernière ne sert que pour le stockage. Tout le travail de filtrage est réalisé par un algorithme spécialisé par le programme informatique qui traite ces données. Cet algorithme n'est pas mis en oeuvre par le moteur de la base de données. Cette approche présente l'inconvénient de récupérer l'intégralité des données ou de multiplier le nombre de requêtes vers la base de données et donc de réduire les performances. Dans le cas d'une liste de ventes en Europe, il convient de récupérer les données de toutes les villes même celles hors d'Europe pour ensuite filtrer celles qui sont recherchées ou de multiplier le nombre de requêtes comme exposé plus loin.</p>
<p id="p0010" num="0010">Le modèle de données pour les deux tables est alors par exemple le suivant :<!-- EPO <DP n="3"> -->
<tables id="tabl0001" num="0001">
<table frame="all">
<title>Table représentant la hiérarchie</title>
<tgroup cols="3">
<colspec colnum="1" colname="col1" colwidth="51mm"/>
<colspec colnum="2" colname="col2" colwidth="33mm"/>
<colspec colnum="3" colname="col3" colwidth="60mm"/>
<thead>
<row>
<entry align="center" valign="top"><b>Identifiant</b> noeud de la hiérarchie</entry>
<entry align="center" valign="top"><b>Libellé</b></entry>
<entry align="center" valign="top">Identifiant du <b>Parent</b> selon la hiérarchie</entry></row></thead>
<tbody>
<row>
<entry align="center">1</entry>
<entry align="center">Europe</entry>
<entry align="center">0</entry></row>
<row>
<entry align="center">2</entry>
<entry align="center">France</entry>
<entry align="center">1</entry></row>
<row>
<entry align="center">3</entry>
<entry align="center">Allemagne</entry>
<entry align="center">1</entry></row>
<row>
<entry align="center">4</entry>
<entry align="center">Paris</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">5</entry>
<entry align="center">Berlin</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">6</entry>
<entry align="center">Lyon</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">7</entry>
<entry align="center">Amerique du Nord</entry>
<entry align="center">0</entry></row>
<row>
<entry align="center">8</entry>
<entry align="center">Etats Unis</entry>
<entry align="center">7</entry></row>
<row>
<entry align="center">9</entry>
<entry align="center">Washington</entry>
<entry align="center">8</entry></row>
<row>
<entry align="center">10</entry>
<entry align="center">New York</entry>
<entry align="center">8</entry></row></tbody></tgroup>
</table>
</tables>
<tables id="tabl0002" num="0002">
<table frame="all">
<title>Table représentant les ventes</title>
<tgroup cols="2">
<colspec colnum="1" colname="col1" colwidth="63mm"/>
<colspec colnum="2" colname="col2" colwidth="21mm"/>
<thead>
<row>
<entry align="center" valign="top"><b>Identifiant</b> noeud Ville dans la hiérarchie</entry>
<entry align="center" valign="top"><b>Montant</b></entry></row></thead>
<tbody>
<row>
<entry align="center">4 (Paris)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">5 (Berlin)</entry>
<entry align="center">7</entry></row>
<row>
<entry align="center">6 (Lyon)</entry>
<entry align="center">4</entry></row>
<row>
<entry align="center">9 (Washington)</entry>
<entry align="center">8</entry></row>
<row>
<entry align="center">10 (New York)</entry>
<entry align="center">11</entry></row></tbody></tgroup>
</table>
</tables></p>
<p id="p0011" num="0011">La structure de la table représentant la hiérarchie est la structure la plus compacte qu'on puisse utiliser pour représenter une hiérarchie mais elle ne permet pas à la seule base de données, c'est-à-dire en utilisant seulement une requête SQL, de répondre à une question simple telle que « quelles sont les villes en Europe ? ».</p>
<p id="p0012" num="0012">En effet, beaucoup de traitements doivent être réalisés directement dans l'application pour compenser les limites de la base de données. Par exemple, une approche pour répondre à la question ci-dessus consiste en multipliant les requêtes dans la base de données à déterminer à l'avance tous les pays présents en Europe et puis ensuite à déterminer toutes les villes existant en France et en Allemagne (ici Paris, Lyon puis Berlin). Ensuite un premier choix consiste à effectuer plusieurs requêtes du type ("quelles sont les ventes sur Paris ?", "quelles sont les ventes sur<!-- EPO <DP n="4"> --> Lyon ?" et "quelles sont les ventes sur Berlin?") pour extraire les ventes associées à chaque ville. La contrepartie est que les performances peuvent rapidement se dégrader si le nombre de villes se compte en centaines ou en milliers. Ensuite, la complexité du code source en souffrira, notamment en fusionnant les résultats et/ou éventuellement en réordonnant si l'on souhaite avoir les ventes par montants croissants. Pour éviter de multiplier les requêtes on peut également construire une requête unique impliquant des opérateurs « IN » et « OR » utilisés pour filtrer sur toutes les villes qui ont été identifiées précédemment. Cependant, cela présente les inconvénients suivants :
<ul id="ul0002" list-style="none" compact="compact">
<li>* certains moteurs de base de données ont des limites sur le nombre de caractères maximal autorisés pour des requêtes SQL. La requêtes SQL pouvant grandir rapidement ici si le nombre de villes concernées dépasse les milliers.</li>
<li>* certains moteurs de base de données ont des limites quant au nombre d'opérateurs « OR » autorisés dans une requête. Par ailleurs multiplier le nombre d'opérateurs « OR » dégrade les performances.</li>
<li>* certains moteurs de base de données ont des limites quant au nombre d'éléments pouvant être inclus dans une clause « IN». Par ailleurs multiplier le nombre d'éléments dans une clause « IN » dégrade les performances.</li>
<li>* du fait que la requête SQL est générée dynamiquement, il devient impossible d'utiliser les requêtes « SQL à paramètres pré compilées » ou « des procédures stockées » et donc de bénéficier des grands gains de performances associés.</li>
</ul></p>
<p id="p0013" num="0013">Une autre alternative consiste à réaliser une jointure de la table qui contient la hiérarchie avec elle-même et de répéter ces jointures autant de fois que la donnée recherchée est éloignée du sommet de la hiérarchie. Cette alternative présente les inconvénients suivants :
<ul id="ul0003" list-style="bullet" compact="compact">
<li>le nombre de jointures qui peuvent être réalisées dans le cadre d'une même requête est souvent limité par la base de données limitant dès lors le nombre de niveaux maximum d'une hiérarchie</li>
<li>les jointures sont des opérations complexes, les multiplier en grand nombre dégrade les performances</li>
<li>l'écriture de la requête peut se révéler très complexe (multiplication du nombre de jointures) et son traitement très lourd si dans la même requête, les données recherchées ont des niveaux hiérarchiques différents.<!-- EPO <DP n="5"> --></li>
<li>du fait que le nombre de jointure à effectuer n'est pas connu à l'avance car il dépend du niveau hiérarchique de la données recherchée, il n'est pas possible d'utiliser ici aussi les requêtes SQL à « paramètres pré compilé » ou « procédures stockées ».</li>
</ul></p>
<p id="p0014" num="0014">Le document <patcit id="pcit0001" dnum="US6480857B1"><text>US6480857 B1 publié le 12 novembre 2002</text></patcit> décrit une installation de gestion de base de données comportant des moyens pour représenter une table de hiérarchie de données. Dans ce document il n'y a qu'un seul enregistrement pour chacune des données hiérarchisées.</p>
<p id="p0015" num="0015">L'invention a donc pour but de permettre un traitement de données hiérarchisée dans une base de données relationnelles qui ne nécessite pas d'outils logiciels complexes supplémentaires et qui puisse permettre un filtrage rapide et sur des données hiérarchisées et ce en une seule requête SQL.</p>
<p id="p0016" num="0016">A cet effet, l'invention a pour objet une installation du type précité, caractérisée en ce qu'elle comporte des moyens pour représenter une table de hiérarchie comprenant, pour chaque donnée hiérarchisée, l'ensemble des données dont elle est dépendante, quel que soit le nombre de niveaux hiérarchiques les séparant, chacune des données dont elle est dépendante étant contenue dans un enregistrement séparé de la table contenant en outre la donnée hiérarchisée ; et<br/>
en ce que lors d'une interrogation à partir d'une requête portant sur des données hiérarchisées, les moyens de filtrage de la base de données sont adaptés pour fournir une réponse à la requête formulée à partir de la table de hiérarchie sans recours à des outils d'interrogation multidimensionnelle de la base de données extérieurs à la base de données.</p>
<p id="p0017" num="0017">Le problème est ainsi résolu de manière performante en tirant partie des mécanismes d'optimisation du moteur de base de données (indexes, « hash tables », recherche en parallèles, etc...).</p>
<p id="p0018" num="0018">La solution est ainsi apportée en représentant la hiérarchie dans une table de la base de données relationnelles classique dans un format tel que la base de données soit capable elle-même de filtrer les données en utilisant ses propres algorithmes d'optimisation interne et ce sur la base d'une simple requête SQL.</p>
<p id="p0019" num="0019">Suivant des modes particuliers de réalisation, l'installation comporte l'une ou plusieurs des caractéristiques suivantes :
<ul id="ul0004" list-style="dash" compact="compact">
<li>les moyens de filtrage de la base de données comportent des procédures stockées et/ou des requêtes paramétrées,</li>
<li>les moyens de filtrage sont propres à fournir les données recherchées en réponse à une requête faite en langage SQL,<!-- EPO <DP n="6"> --></li>
<li>la base de données est une base de données relationnelle dont au moins une table contient des relations entre les champs des tables différentes,</li>
<li>les moyens de filtrage comportent des moyens d'indexation de la table de hiérarchie,</li>
<li>les moyens de filtrage de la base de données sont adaptés pour fournir une réponse à la requête formulée à partir des seules tables contenues dans la base et de la table de hiérarchie,</li>
<li>la table de hiérarchie comprend, pour chaque enregistrement, un indicateur de degré de parenté représentatif de l'écart entre le niveau hiérarchique de la donnée hiérarchisée et le niveau de la donnée hiérarchisée dont elle est dépendante,</li>
<li>la table de hiérarchie comprend, pour chaque donnée hiérarchisée, un enregistrement, dont l'indicateur de degré de parenté est nul et dans lequel la donnée hiérarchisée et la donnée hiérarchisée dont elle est dépendante sont identiques,</li>
<li>la table de hiérarchie comprend, pour chaque enregistrement, un indicateur de niveau de profondeur hiérarchique représentatif de l'écart entre le niveau hiérarchique de la donnée hiérarchisée et le niveau le plus élevé des données hiérarchisées dont elle est dépendante, et</li>
<li>elle comporte au moins une table qui décrit au moins certaines des données hiérarchisées.</li>
</ul></p>
<p id="p0020" num="0020">L'invention sera mieux comprise à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple et faite en se référant aux dessins, sur lesquels :
<ul id="ul0005" list-style="dash" compact="compact">
<li>la <figref idref="f0001">figure 1</figref> est une vue schématique d'une installation de gestion de base de données selon l'invention ; et</li>
<li>la <figref idref="f0001">figure 2</figref> est une illustration d'un arbre montrant l'organisation d'un exemple de données hiérarchisées.</li>
</ul></p>
<p id="p0021" num="0021">Sur la <figref idref="f0001">figure 1</figref> est illustrée une installation 10 de gestion de base de données relationnelles comportant notamment des données hiérarchisées. Elle comporte une base de données relationnelles 12 comprenant un ensemble de tables 14A, 14B, 14C, par exemple au nombre de trois et un moteur 16 de gestion de base de données.</p>
<p id="p0022" num="0022">Chaque table comporte un ensemble de champs. Certains champs des différentes tables sont reliés entre eux par des relations.<!-- EPO <DP n="7"> --></p>
<p id="p0023" num="0023">Le moteur 16 de gestion de base de données comprend, comme connu en soi, des moyens de filtrage des données contenues dans les champs des tables à partir d'algorithmes internes d'optimisation de la base de données relationnelles propres à fournir les données recherchées en réponse à une requête définissant le filtre. Dans le mode réalisation envisagé, les requêtes sont des requêtes SQL. Le moteur de gestion 16 est formé par exemple d'un serveur mettant en oeuvre un logiciel adapté tel que Microsoft Sql Server, Oracle, MySQL, etc...</p>
<p id="p0024" num="0024">Le moteur de gestion de base de données comporte des procédures stockées et/ou des requêtes paramétrées, c'est-à-dire des requêtes à paramètres déjà pré-compilées dont seuls certains paramètres sont modifiés. Ces procédures stockées et/ou des requêtes paramétrées sont susceptibles d'être effectuées rapidement compte tenu de leur nature.</p>
<p id="p0025" num="0025">L'installation comprend en outre des moyens 18 d'interrogation de la base de données formés de moyens 20 de saisie d'au moins une requête définissant un filtre permettant la sélection des données recherchées.</p>
<p id="p0026" num="0026">Ces moyens d'interrogation 18 sont formés par exemple d'un ordinateur mettant en oeuvre des logiciels applicatifs adaptés et relié au serveur 16. Ce logiciel est par exemple un outil de gestion des ventes, un logiciel de gestion de titres et participations, un logiciel de représentation de hiérarchies de personnes, de produits, etc...</p>
<p id="p0027" num="0027">Les moyens d'interrogation 18 comportent dans le logiciel applicatif des moyens 18A de génération d'une table de hiérarchie 14C ayant une structure spécifique précisée ultérieurement. Cette table de hiérarchie 14C décrit sous un format particulier et redondant les hiérarchies entre les données. Le module logiciel constituant ces moyens d'interrogation est propre à fournir la table de hiérarchie à partir des données hiérarchisées sur lesquelles portent les traitements et à modifier cette table à chaque modification des données hiérarchisées.</p>
<p id="p0028" num="0028">Les moyens d'interrogation 18 comportent en outre un module logiciel d'interrogation de la base 12 à partir de requêtes SQL mises en oeuvre par le moteur 16. Ce module est désigné par requêteur SQL. Ce module est propre à formuler des requêtes au format SQL et à les adresser au serveur 16 pour qu'il extraie de la base de données relationnelles 12 les données recherchées correspondant aux requêtes.<!-- EPO <DP n="8"> --></p>
<p id="p0029" num="0029">Les moyens de saisie 20 constitués par exemple d'un clavier et d'un éditeur de requête permettant la formulation de requêtes SQL suivant un format prédéfini.</p>
<p id="p0030" num="0030">Enfin, les moyens 18 comportent un module 22 de mise à disposition des données recueillies en réponse aux requêtes SQL formulées. Il s'agit par exemple d'un écran d'affichage de l'ordinateur ou de moyens de sauvegarde des données extraites.</p>
<p id="p0031" num="0031">Les tables de la base de données comprennent par exemple une table 14A des ventes comprenant deux champs à savoir un Identifiant représentant un lieu de vente, notamment une ville, et un montant de ventes associé au lieu de vente.</p>
<p id="p0032" num="0032">Cette table 14A est par exemple sous la forme suivante :
<tables id="tabl0003" num="0003">
<table frame="all">
<title>Table des Ventes</title>
<tgroup cols="2">
<colspec colnum="1" colname="col1" colwidth="63mm"/>
<colspec colnum="2" colname="col2" colwidth="18mm"/>
<thead>
<row>
<entry align="center" valign="top"><b>Identifiant</b> noeud Ville dans la hiérarchie</entry>
<entry align="center" valign="top"><b>Montant</b></entry></row></thead>
<tbody>
<row>
<entry align="center">4 (Paris)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">5 (Berlin)</entry>
<entry align="center">7</entry></row>
<row>
<entry align="center">6 (Lyon)</entry>
<entry align="center">4</entry></row>
<row>
<entry align="center">9 (Washington)</entry>
<entry align="center">8</entry></row>
<row>
<entry align="center">10 (New York)</entry>
<entry align="center">11</entry></row></tbody></tgroup>
</table>
</tables></p>
<p id="p0033" num="0033">En outre, une autre table 14B renferme une description des lieux de vente (identifiant, libellé, adresse, habitants) sans tenir de leur position dans la hiérarchie des entités géographiques.</p>
<p id="p0034" num="0034">Ainsi, cette table 14B comporte par exemple, quatre champs formés :
<ul id="ul0006" list-style="dash" compact="compact">
<li>d'un identifiant numérique de chaque lieu de vente</li>
<li>d'un libellé comportant le nom du lieu de vente</li>
<li>d'une adresse du magasin du lieu de vente, et</li>
<li>du nombre d'habitants du lieu de vente.</li>
</ul></p>
<p id="p0035" num="0035">Cette table 14B est par exemple sous la forme suivante.
<tables id="tabl0004" num="0004">
<table frame="all">
<title>Table des <b>Entités</b> de la hiérarchie</title>
<tgroup cols="4">
<colspec colnum="1" colname="col1" colwidth="21mm"/>
<colspec colnum="2" colname="col2" colwidth="30mm"/>
<colspec colnum="3" colname="col3" colwidth="42mm"/>
<colspec colnum="4" colname="col4" colwidth="20mm"/>
<thead>
<row>
<entry align="center" valign="top"><b>Identifiant</b></entry>
<entry align="center" valign="top"><b>Libellé</b></entry>
<entry align="center" valign="top"><b>Adresse</b> Magasin</entry>
<entry align="center" valign="top"><b>Habitants</b></entry></row></thead>
<tbody>
<row>
<entry align="center">1</entry>
<entry align="center">Europe</entry>
<entry align="center">N/A</entry>
<entry align="center">N/A</entry></row><!-- EPO <DP n="9"> -->
<row>
<entry align="center">2</entry>
<entry align="center">France</entry>
<entry align="center">N/A</entry>
<entry align="center">N/A</entry></row>
<row>
<entry align="center">3</entry>
<entry align="center">Allemagne</entry>
<entry align="center">N/A</entry>
<entry align="center">N/A</entry></row>
<row>
<entry align="center">4</entry>
<entry align="center">Paris</entry>
<entry align="center">3 rue des Champs Elysées</entry>
<entry align="center">5 000 000</entry></row>
<row>
<entry align="center">5</entry>
<entry align="center">Berlin</entry>
<entry align="center">5 Wolfenstein Strasse</entry>
<entry align="center">6 000 000</entry></row>
<row>
<entry align="center">6</entry>
<entry align="center">Lyon</entry>
<entry align="center">4 rue des Prés</entry>
<entry align="center">1 000 000</entry></row>
<row>
<entry align="center">7</entry>
<entry align="center">Amerique du Nord</entry>
<entry align="center">N/A</entry>
<entry align="center">N/A</entry></row>
<row>
<entry align="center">8</entry>
<entry align="center">Etats-Unis</entry>
<entry align="center">N/A</entry>
<entry align="center">N/A</entry></row>
<row>
<entry align="center">9</entry>
<entry align="center">Washington</entry>
<entry align="center">2001 Capitol Hill</entry>
<entry align="center">5 000 000</entry></row>
<row>
<entry align="center">10</entry>
<entry align="center">New York</entry>
<entry align="center">42th Street</entry>
<entry align="center">8 000 000</entry></row></tbody></tgroup>
</table>
</tables></p>
<p id="p0036" num="0036">Enfin, une autre table 14 C, représente un arbre tel que décrit ci-dessous : Les données hiérarchisées sont représentées sous la forme d'un arbre tel qu'illustré sur la <figref idref="f0001">figure 2</figref>, dans lequel chaque donnée correspond à un noeud de l'arbre. Les données sont ainsi chacune associées à un niveau hiérarchique qui définit la profondeur d'une donnée par rapport à la racine de l'arbre. Le niveau est indiqué dans la partie droite de l'arbre. Les flèches sont orientées dans le sens des niveaux hiérarchiques croissants par convention du parent vers les fils. Une première donnée de l'arbre est dite dépendante d'une seconde donnée si soit cette deuxième donnée est son père soit si son père est dépendante de cette deuxième donnée. Lorsque deux données sont dépendantes le nombre de niveaux hiérarchiques les séparant représente le degré de parenté.</p>
<p id="p0037" num="0037">Chaque donnée de cet arbre est traduite dans la table 14C de hiérarchie par plusieurs enregistrements, avec un enregistrement pour chaque dépendance qui existe avec une autre donnée de l'arbre.</p>
<p id="p0038" num="0038">En d'autres termes, la table de hiérarchie 14C contient pour chaque noeud de la hiérarchie quels autres noeuds sont ses parents directs ou indirects. Plus précisément, pour toutes les données hiérarchisées, un enregistrement est contenu dans la table pour chaque donnée dont elle est dépendante. Chaque enregistrement contient la donnée hiérarchisée et la donnée dont elle est dépendante.</p>
<p id="p0039" num="0039">La table de hiérarchie 14C contient ainsi de préférence quatre champs correspondants respectivement à :<!-- EPO <DP n="10"> -->
<ul id="ul0007" list-style="dash" compact="compact">
<li>un identifiant du lieu de vente ;</li>
<li>un degré de parenté, c'est-à-dire l'écart entre le niveau hiérarchique de la donnée hiérarchisée et le niveau de la donnée hiérarchisée dont elle est dépendante ;</li>
<li>un identifiant de la donnée hiérarchisée dont la donnée dépend, ceci éventuellement afin de simplifier davantage certains requêtes SQL et d'offrir encore de meilleures performance ; et</li>
<li>un niveau de profondeur hiérarchique "profondeur" représentatif de l'écart entre le niveau hiérarchique de la donnée hiérarchisée, et le niveau le plus élevé des données hiérarchisées dont elle est dépendante.</li>
</ul>
<tables id="tabl0005" num="0005">
<table frame="all">
<title>Table 14 C représentant les relations hiérarchie (<b>Noeuds</b>)</title>
<tgroup cols="4">
<colspec colnum="1" colname="col1" colwidth="41mm"/>
<colspec colnum="2" colname="col2" colwidth="31mm"/>
<colspec colnum="3" colname="col3" colwidth="58mm"/>
<colspec colnum="4" colname="col4" colwidth="23mm"/>
<thead>
<row>
<entry align="center" valign="top"><b>Identifiant</b> du lieu de vente</entry>
<entry align="center" valign="top"><b>Degré</b> de parenté</entry>
<entry align="center" valign="top">Identifiant du <b>Parent</b> selon la hiérarchie</entry>
<entry align="center" valign="top"><b>Profondeur</b></entry></row></thead>
<tbody>
<row>
<entry align="center">1 (Europe)</entry>
<entry align="center">0</entry>
<entry align="center">1 (Europe)</entry>
<entry align="center">1</entry></row>
<row>
<entry align="center">1 (Europe)</entry>
<entry align="center">1</entry>
<entry align="center">0 (Racine)</entry>
<entry align="center">1</entry></row>
<row>
<entry align="center">2 (France)</entry>
<entry align="center">0</entry>
<entry align="center">2 (France)</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">2 (France)</entry>
<entry align="center">1</entry>
<entry align="center">1 (Europe)</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">2 (France)</entry>
<entry align="center">2</entry>
<entry align="center">0 (Racine)</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">3 (Allemagne)</entry>
<entry align="center">0</entry>
<entry align="center">3 (Allemagne)</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">3 (Allemagne)</entry>
<entry align="center">1</entry>
<entry align="center">1 (Europe)</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">3 (Allemagne)</entry>
<entry align="center">2</entry>
<entry align="center">0 (Racine)</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">4 (Paris)</entry>
<entry align="center">0</entry>
<entry align="center">4 (Paris)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">4 (Paris)</entry>
<entry align="center">1</entry>
<entry align="center">2 (France)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">4 (Paris)</entry>
<entry align="center">2</entry>
<entry align="center">1 (Europe)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">4 (Paris)</entry>
<entry align="center">3</entry>
<entry align="center">0 (Racine)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">5 (Berlin)</entry>
<entry align="center">0</entry>
<entry align="center">5 (Berlin)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">5 (Berlin)</entry>
<entry align="center">1</entry>
<entry align="center">3 (Allemagne)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">5 (Berlin)</entry>
<entry align="center">2</entry>
<entry align="center">1 (Europe)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">5 (Berlin)</entry>
<entry align="center">3</entry>
<entry align="center">0 (Racine)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">6 (Lyon)</entry>
<entry align="center">0</entry>
<entry align="center">6 (Lyon)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">6 (Lyon)</entry>
<entry align="center">1</entry>
<entry align="center">2 (France)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">6 (Lyon)</entry>
<entry align="center">2</entry>
<entry align="center">1 (Europe)</entry>
<entry align="center">3</entry></row><!-- EPO <DP n="11"> -->
<row>
<entry align="center">6 (Lyon)</entry>
<entry align="center">3</entry>
<entry align="center">0 (Racine)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">7 (Amérique de Nord)</entry>
<entry align="center">0</entry>
<entry align="center">7 (Amérique de Nord)</entry>
<entry align="center">1</entry></row>
<row>
<entry align="center">7 (Amérique de Nord)</entry>
<entry align="center">1</entry>
<entry align="center">0 (Racine)</entry>
<entry align="center">1</entry></row>
<row>
<entry align="center">8 (Etats Unis)</entry>
<entry align="center">0</entry>
<entry align="center">8 (Etats Unis)</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">8 (Etats Unis)</entry>
<entry align="center">1</entry>
<entry align="center">7 (Amérique de Nord)</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">8 (Etats Unis)</entry>
<entry align="center">2</entry>
<entry align="center">0 (Racine)</entry>
<entry align="center">2</entry></row>
<row>
<entry align="center">9 (Washington)</entry>
<entry align="center">0</entry>
<entry align="center">9 (Washington)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">9 (Washington)</entry>
<entry align="center">1</entry>
<entry align="center">8 (Etats Unis)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">9 (Washington)</entry>
<entry align="center">2</entry>
<entry align="center">7 (Amérique de Nord)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">9 (Washington)</entry>
<entry align="center">3</entry>
<entry align="center">0 (Racine)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">10 (New York)</entry>
<entry align="center">0</entry>
<entry align="center">10 (New York)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">10 (New York)</entry>
<entry align="center">1</entry>
<entry align="center">8 (Etats Unis)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">10 (New York)</entry>
<entry align="center">2</entry>
<entry align="center">7 (Amérique de Nord)</entry>
<entry align="center">3</entry></row>
<row>
<entry align="center">10 (New York)</entry>
<entry align="center">3</entry>
<entry align="center">0 (Racine)</entry>
<entry align="center">3</entry></row></tbody></tgroup>
</table>
</tables></p>
<p id="p0040" num="0040">Le degré de parenté correspond à la distance en terme de génération entre les éléments des colonnes 1 et 3. Les enregistrements avec le degré 0 de parenté sont tels que les colonnes 1 et 3 sont identiques. Dans cet exemple, chaque noeud est ainsi couplé dans cet exemple à jusqu'à trois de ses noeuds parents.</p>
<p id="p0041" num="0041">A partir d'une simple requête SQL, il est possible d'exploiter la hiérarchie entre les données. En effet, une unique requête SQL suffit pour exploiter la hiérarchie puisqu'elle recourt alors au seul moteur de données 16 qui comporte des algorithmes optimisés propres de recherche dans la base de données relationnelles (indexes, « hash tables », recherche en parallèles, etc...). En outre, comme exposé dans les exemples présentés plus loin, la structure de la requêtes SQL ne dépend du nombre de données à extraire, il est également possible de tirer de procédures stockées ou requêtes SQL pré compilées afin d'obtenir des gains de performance supplémentaires.</p>
<p id="p0042" num="0042">On pourrait craindre que dans un tel modèle de données, la table des hiérarchies soit nécessairement de grande taille : le nombre d'enregistrements étant majoré par la valeur n*d avec n le nombre de noeuds et d la profondeur maximale.<!-- EPO <DP n="12"> --> Cependant, cela n'est pas très contraignant compte tenu du gain observé et dans la mesure où le facteur qui fait grossir est « d » et empiriquement dans le cas de la plupart des hiérarchies observées, il dépasse très rarement la valeur de 10 et l'ordre de grandeur de « n » (par exemple nombre de pays) dépasse rarement les milliers. Ainsi une hiérarchie de 1000 données et de profondeurs maximum 10, ne pourra jamais dépasser 10000 enregistrements.</p>
<p id="p0043" num="0043">Il est alors possible simplement de répondre aux questions suivantes à partir de simples requêtes SQL.
<ul id="ul0008" list-style="dash" compact="compact">
<li>quel est le grand-père (Continent) de la ville Paris (Id=4)?<br/>
SELECT Parent FROM Noeuds WHERE Degré=2 AND Identifiant=4<br/>
Cette requête renvoie : Europe</li>
<li>quels sont tous les éléments (Continent+Pays+Villes) contenus en Europe (ld=1) ?<br/>
SELECT Identifiant FROM Noeuds WHERE Parent=1<br/>
Cette requête renvoie : Europe, France, Allemagne, Paris, Berlin, Lyon</li>
<li>quels sont les villes contenues en Europe (Id=1) ?<br/>
SELECT Identifiant FROM Noeuds WHERE Parent=1 AND Degré=2<br/>
La partie « degré=2 » permet de se débarrasser des éléments du type Pays et de ne garder que les Villes<br/>
Cette requête renvoie : Paris, Lyon, Berlin</li>
<li>quelle est la liste des ventes réalisées en Europe (ld=1) ?<br/>
SELECT Ventes.Identifiant, Ventes.Montant FROM Noeuds, Ventes WHERE Ventes.Identifiant=Noeuds.Identifiant AND Noeuds.Parent=1 AND Noeuds.Deg ré=2<br/>
Cette requête renvoie : 4 <b>(=Paris),3</b> et 6 <b>(=Lyon),</b> 4 et 5 <b>(=Berlin), 7</b></li>
<li>quelle est la liste des ventes réalisées en Europe (ld=1) et à NewYork (Id=10) ?<br/>
SELECT Ventes. Identifiant, Ventes.Montant FROM Noeuds, Ventes WHERE Ventes.Identifiant=Noeuds.Identifiant AND Noeuds.Parent IN (1,10) AND Noeuds.Degré=2<br/>
Cette requête illustre qu'il est possible avec grande facilité, c'est-à-dire sans rajouter de jointures supplémentaires ou de complexifier la requête de réaliser en<!-- EPO <DP n="13"> --> même temps des interrogations sur des données situés à des niveaux hiérarchiques différents (ici Europe et New York)</li>
<li>quelle est la somme des ventes réalisées en Europe (ld=1) ?<br/>
SELECT SUM(Ventes.Montant) FROM Noeuds, Ventes WHERE Ventes. Identifiant=Noeuds.ldentifiant AND AND Noeuds.Degré=2<br/>
Du fait de l'utilisation seulement d'une base de données relationnelles, il est possible de réaliser facilement des jointures dans la même requête SQL pour récupérer des valeurs provenant d'autres tables ou pour poser des questions portant sur des critères extérieurs. Il est ainsi possible de répondre aux questions suivantes :</li>
<li>quelle est la liste (avec adresse) des ventes réalisées en Europe (ld=1) ?<br/>
SELECT Entités.Adresse, Ventes. Identifiant, Ventes.Montant FROM Noeuds,Ventes, Entités WHERE Ventes.Identifiant=Noeuds.Identifiant AND Noeuds.P arent=1 AND Noeuds.Degré=2 AND Entités.Identifiant=Noeuds.Identifiant</li>
<li>quelle est la liste (avec adresse) des ventes réalisées dans les villes d'Europe (ld=1) de plus de 3 millions d'habitants ?<br/>
SELECT Entités.Adresse, Ventes. Identifiant, Ventes.Montant FROM Noeuds, Ventes, Entités WHERE Ventes.Identifiant=Noeuds.Identifiant AND AND Noeuds.Degré=2 AND Entités.Identifiant=Noeuds.Identifiant AND Entités.Habitants&gt;=3 000 000</li>
</ul></p>
<p id="p0044" num="0044">Il est à noter que pour permettre d'autres requêtes, il est avantageusement prévu dans la table des Noeuds une colonne "profondeur" qui contrairement à la colonne Degré permet des recherches portant sur la profondeur d'un élément par rapport au haut de la hiérarchie. Cette colonne permet de simplifier les requêtes SQL mais elle n'est pas indispensable car il est possible d'obtenir des résultats similaires par jointure supplémentaire.</p>
<p id="p0045" num="0045">Les autres avantages suivants sont obtenus :
<ul id="ul0009" list-style="dash" compact="compact">
<li>l'approche est utilisable pour toute base de données SQL car elle n'utilise pas de spécificité particulière ;</li>
<li>la requête est réalisée en une seule passe, et le développeur n'a pas à fusionner les résultats de multiples requêtes ;</li>
<li>ce modèle de données permet de gérer un nombre quelconque de niveaux dans une hiérarchie avec des branches de profondeurs différentes ; et<!-- EPO <DP n="14"> --></li>
<li>une optimisation des accès à la base données peut être simplement obtenue grâce à l'ajout d'indexes sur un plusieurs ou champs de la table 14C.</li>
</ul></p>
</description>
<claims id="claims01" lang="fr"><!-- EPO <DP n="15"> -->
<claim id="c-fr-01-0001" num="0001">
<claim-text>Installation (10) de gestion d'une base de données comportant :
<claim-text>a/ une base de données (12) comprenant :
<claim-text>a1/ des moyens (16) de filtrage des données contenues dans des champs à partir d'algorithmes internes d'optimisation de la base de données propres à fournir les données recherchées en réponse à une requête définissant le filtre ; et</claim-text>
<claim-text>a2/ au moins une hiérarchie de données de au moins trois niveaux hiérarchiques ; et</claim-text></claim-text>
<claim-text>b/ des moyens (18) d'interrogation propres à fournir au moins une requête définissant un filtre permettant la sélection des données recherchées par mise en oeuvre des moyens de filtrage (16);</claim-text>
<b>caractérisée en ce qu'</b>elle comporte des moyens pour représenter une table de hiérarchie (14C) comprenant, pour chaque donnée hiérarchisée :
<claim-text>l'ensemble des données dont elle est dépendante, quel que soit le nombre de niveaux hiérarchiques les séparant, chacune des données dont elle est dépendante étant contenue dans un enregistrement séparé de la table, le dit enregistrement contenant en outre la donnée hiérarchisée ; et</claim-text>
<claim-text>un indicateur de degré de parenté représentatif de l'écart entre le niveau hiérarchique de la donnée hiérarchisée et le niveau de chaque donnée hiérarchisée dont elle est dépendante et un indicateur de niveau de profondeur hiérarchique représentatif de l'écart entre le niveau hiérarchique de la donnée hiérarchisée et le niveau le plus élevé des données hiérarchisées dont elle est dépendante,</claim-text>
<claim-text>et <b>en ce que</b>, lors d'une interrogation à partir d'une requête portant sur des données hiérarchisées et définissant un filtre intégrant l'indicateur de degré de parenté et/ou l'indicateur de niveau de profondeur hiérarchique, les moyens (16) de filtrage de la base de données sont adaptés pour fournir une réponse à la requête formulée à partir de la table de hiérarchie (14C) sans recours à des outils d'interrogation multidimensionnelle de la base de données extérieurs à la base de données.</claim-text><!-- EPO <DP n="16"> --></claim-text></claim>
<claim id="c-fr-01-0002" num="0002">
<claim-text>Installation selon la revendication 1, <b>caractérisée en ce que</b> le les moyens (16) de filtrage de la base de données comportent des procédures stockées et/ou des requêtes paramétrées.</claim-text></claim>
<claim id="c-fr-01-0003" num="0003">
<claim-text>Installation selon la revendication 1 ou 2, <b>caractérisée en ce que</b> les moyens de filtrage (16) sont propres à fournir les données recherchées en réponse à une requête faite en langage SQL.</claim-text></claim>
<claim id="c-fr-01-0004" num="0004">
<claim-text>Installation selon l'une quelconque des revendications précédentes, <b>caractérisée en ce que</b> la base de données est une base de données relationnelle dont au moins une table (14A, 14B) contient des relations entre les champs des tables différentes.</claim-text></claim>
<claim id="c-fr-01-0005" num="0005">
<claim-text>Installation selon la revendication 4, <b>caractérisée en ce que</b> les moyens (16) de filtrage comportent des moyens d'indexation de la table de hiérarchie (14C).</claim-text></claim>
<claim id="c-fr-01-0006" num="0006">
<claim-text>Installation l'une quelconque des revendications précédentes, <b>caractérisée en ce que</b> les moyens (16) de filtrage de la base de données sont adaptés pour fournir une réponse à la requête formulée à partir des seules tables (14A, 14B) contenues dans la base et de la table de hiérarchie (14C).</claim-text></claim>
<claim id="c-fr-01-0007" num="0007">
<claim-text>Installation selon la revendication 1, <b>caractérisée en ce que</b> la table de hiérarchie (14C) comprend, pour chaque donnée hiérarchisée, un enregistrement, dont l'indicateur de degré de parenté est nul et dans lequel la donnée hiérarchisée et la donnée hiérarchisée dont elle est dépendante sont identiques.</claim-text></claim>
<claim id="c-fr-01-0008" num="0008">
<claim-text>Installation selon l'une quelconque des revendications précédentes, <b>caractérisée en ce qu'</b>elle comporte au moins une table (14B) qui décrit au moins certaines des données hiérarchisées.</claim-text></claim>
</claims>
<claims id="claims02" lang="de"><!-- EPO <DP n="17"> -->
<claim id="c-de-01-0001" num="0001">
<claim-text>Einrichtung (10) zur Verwaltung einer Datenbank aufweisend:
<claim-text>a/ eine Datenbank (12) aufweisend:
<claim-text>a1/ Mittel (16) zum Filtern von in Feldern enthaltenden Daten ausgehend von internen Algorithmen zum Optimieren der Datenbank, geeignet zum Liefern der recherchierten Daten in Antwort auf eine Anfrage, die den Filter definiert; und</claim-text>
<claim-text>a2/ mindestens eine Hierarchie von Daten mit mindestens drei hierarchischen Ebenen; und</claim-text></claim-text>
<claim-text>b/ Mittel (18) zum Abfragen, geeignet zum Liefern mindestens einer Anfrage, die einen Filter definiert, der die Auswahl der recherchierten Daten durch Ausführung von Filtermitteln (16) ermöglicht;<br/>
dadurch charakterisiert, dass sie Mittel zum Repräsentieren einer Hierarchie-Tabelle (14C) aufweist, die für jedes hierarchisch eingegliederte Datenelement aufweist:
<claim-text>die Menge von Daten, von denen es abhängt, wie auch die Anzahl von Hierarchie-Ebenen sei, die sie trennt, wobei jedes Datenelement der Daten, von dem es abhängt, in einem Datensatz separat von der Tabelle enthalten ist, wobei der Datensatz außerdem das hierarchisch eingegliederte Datenelement enthält; und</claim-text>
<claim-text>einen Indikator des Verwandtschaftsgrads, der den Abstand zwischen der Hierarchie-Ebene des hierarchisch eingegliederten Datenelements und der Ebene jedes hierarchisch eingegliederten Datenelements, von dem es abhängt, repräsentiert, und einen Indikator der hierarchischen Tiefenstufe, der den Abstand zwischen der Hierarchie-Ebene des hierarchisch eingegliederten Datenelements und der höchsten Ebene der hierarchisch eingegliederten Daten, von denen es abhängt, repräsentiert,</claim-text>
<claim-text>und dadurch, dass bei einer Abfrage ausgehend von einer Anfrage, die bezüglich der hierarchisch eingegliederten Daten ist und einen Filter definiert, der den Indikator des Verwandtschaftsgrads und/oder den Indikator der hierarchischen Tiefenstufe integriert, die Mittel (16) zum Filtern der Datenbank eingerichtet sind, eine Antwort auf die Anfrage, die ausgehend von der Hierarchie-Tabelle (14C) ohne Rückgriff auf Werkzeuge zur multidimensionalen Abfrage der Datenbank, die extern bezüglich der Datenbank sind, formuliert ist, zu liefern.</claim-text></claim-text></claim-text></claim>
<claim id="c-de-01-0002" num="0002">
<claim-text>Einrichtung gemäß Anspruch 1, dadurch charakterisiert, dass die Mittel (16) zum Filtern der Datenbank gespeicherte Prozeduren und/oder parametrisierte Anfragen aufweisen.<!-- EPO <DP n="18"> --></claim-text></claim>
<claim id="c-de-01-0003" num="0003">
<claim-text>Einrichtung gemäß Anspruch 1 oder 2, dadurch charakterisiert, dass die Mittel (16) zum Filtern geeignet sind, die recherchierten Daten in Antwort auf eine in SQL-Sprache gemachte Anfrage zu liefern.</claim-text></claim>
<claim id="c-de-01-0004" num="0004">
<claim-text>Einrichtung gemäß einem der vorhergehenden Ansprüche, dadurch charakterisiert, dass die Datenbank eine relationale Datenbank ist, von der mindestens eine Tabelle (14A, 14B) Relationen zwischen den Feldern der verschiedenen Tabellen aufweist.</claim-text></claim>
<claim id="c-de-01-0005" num="0005">
<claim-text>Einrichtung gemäß Anspruch 4, dadurch charakterisiert, dass die Mittel (16) zum Filtern Mittel zum Indizieren der Hierarchie-Tabelle (14C) aufweisen.</claim-text></claim>
<claim id="c-de-01-0006" num="0006">
<claim-text>Einrichtung gemäß einem der vorhergehenden Ansprüche, dadurch charakterisiert, dass die Mittel (16) zum Filtern der Datenbank eingerichtet sind, eine Antwort auf die Anfrage, die ausgehend von den einzigen Tabellen (14A, 14B), die in der Datenbank enthalten sind, und der Hierarchie-Tabelle (14C) formuliert ist, zu liefern.</claim-text></claim>
<claim id="c-de-01-0007" num="0007">
<claim-text>Einrichtung gemäß Anspruch 1, dadurch charakterisiert, dass die Hierarchie-Tabelle (14C) aufweist, für jedes hierarchisch eingegliederte Datenelement, einen Datensatz, für den der Indikator des Verwandtschaftsgrads Null ist und in dem das hierarchisch eingegliederte Datenelement und das hierarchisch eingegliederte Datenelement, von dem es abhängt, identisch sind.</claim-text></claim>
<claim id="c-de-01-0008" num="0008">
<claim-text>Einrichtung gemäß einem der vorhergehenden Ansprüche, dadurch charakterisiert, dass es mindestens eine Tabelle (14B) aufweist, die mindestens bestimmte der hierarchisch eingegliederten Daten beschreibt.</claim-text></claim>
</claims>
<claims id="claims03" lang="en"><!-- EPO <DP n="19"> -->
<claim id="c-en-01-0001" num="0001">
<claim-text>Installation (10) for managing a database having:
<claim-text>a/ a database (12) comprising:
<claim-text>a1/ means (16) for filtering the data contained in fields using internal algorithms for optimising the database which are capable of providing the data sought in response to a query defining the filter; and</claim-text>
<claim-text>a2/ at least one data hierarchy of at least three hierarchical levels; and</claim-text></claim-text>
<claim-text>b/ interrogation means (18) capable of providing at least one query defining a filter permitting the selection of the data sought by using the filtering means (16);<br/>
<b>characterised in that</b> said installation has means for representing a hierarchy table (14C) comprising, for each hierarchised datum:
<claim-text>all of the data on which said hierarchised datum is dependent, regardless of the number of hierarchical levels separating them, each of the data on which said hierarchised datum is dependent being contained in a separate record of the table, said record further containing the hierarchised datum; and</claim-text>
<claim-text>an indicator of the degree of relationship representing the distance between the hierarchical level of said hierarchised datum and the level of each hierarchised datum on which said hierarchised datum is dependent and an indicator of the level of hierarchical depth representing the distance between the said hierarchical level of the hierarchised datum and the highest level of the hierarchised data on which said hierarchised datum is dependent,</claim-text>
<claim-text>and <b>in that</b>, during an interrogation on the basis of a query pertaining to hierarchised data and defining a filter comprising the indicator of the degree of relationship and/or indicator of the level of hierarchical depth, the filtering means (16) of the database are suitable for providing a response to the query formulated on the basis of the hierarchy table (14C) without resorting to tools for the multidimensional interrogation of the database that are external to the database.</claim-text></claim-text><!-- EPO <DP n="20"> --></claim-text></claim>
<claim id="c-en-01-0002" num="0002">
<claim-text>Installation according to claim 1, <b>characterised in that</b> the filtering means (16) of the database comprise stored procedures and/or parameterised queries.</claim-text></claim>
<claim id="c-en-01-0003" num="0003">
<claim-text>Installation according to claim 1 or 2, <b>characterised in that</b> the filtering means (16) are capable of providing the data sought in response to a query executed in SQL language.</claim-text></claim>
<claim id="c-en-01-0004" num="0004">
<claim-text>Installation according to any one of the preceding claims, <b>characterised in that</b> the database is a relational database, at least one table (14A, 14B) of which contains relationships between the fields of the various tables.</claim-text></claim>
<claim id="c-en-01-0005" num="0005">
<claim-text>Installation according to claim 4, <b>characterised in that</b> the filtering means (16) comprise means for indexing the hierarchy table (14C).</claim-text></claim>
<claim id="c-en-01-0006" num="0006">
<claim-text>Installation according to any one of the preceding claims, <b>characterised in that</b> the filtering means (16) of the database are suitable for providing a response to the query formulated on the basis of only the tables (14A, 14B) contained in the database and on the basis of the hierarchy table (14C).</claim-text></claim>
<claim id="c-en-01-0007" num="0007">
<claim-text>Installation according to claim 1, <b>characterised in that</b> the hierarchy table (14C) comprises, for each hierarchised datum, a record, of which the indicator of the degree of relationship is zero and in which the hierarchised datum and the hierarchised datum on which said hierarchised datum is dependent are identical.</claim-text></claim>
<claim id="c-en-01-0008" num="0008">
<claim-text>Installation according to any one of the preceding claims, <b>characterised in that</b> it comprises at least one table (14B) which describes at least some of the hierarchised data.</claim-text></claim>
</claims>
<drawings id="draw" lang="fr"><!-- EPO <DP n="21"> -->
<figure id="f0001" num="1,2"><img id="if0001" file="imgf0001.tif" wi="141" he="212" img-content="drawing" img-format="tif"/></figure>
</drawings>
<ep-reference-list id="ref-list">
<heading id="ref-h0001"><b>RÉFÉRENCES CITÉES DANS LA DESCRIPTION</b></heading>
<p id="ref-p0001" num=""><i>Cette liste de références citées par le demandeur vise uniquement à aider le lecteur et ne fait pas partie du document de brevet européen. Même si le plus grand soin a été accordé à sa conception, des erreurs ou des omissions ne peuvent être exclues et l'OEB décline toute responsabilité à cet égard.</i></p>
<heading id="ref-h0002"><b>Documents brevets cités dans la description</b></heading>
<p id="ref-p0002" num="">
<ul id="ref-ul0001" list-style="bullet">
<li><patcit id="ref-pcit0001" dnum="US6480857B1"><document-id><country>US</country><doc-number>6480857</doc-number><kind>B1</kind><date>20021112</date></document-id></patcit><crossref idref="pcit0001">[0014]</crossref></li>
</ul></p>
</ep-reference-list>
</ep-patent-document>
