Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 04/10/2011, 18h27   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2004
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 36
Points : 11
Points : 11
Par défaut [Oracle 10G] Modélisation d'un organigramme

Bonjour,

Ma problématique est la suivante :
- Je dispose d'une table "tache"
- Une tache peut avoir plusieurs pères ou plusieurs fils, ce qui donne le schéma possible suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            ----------------
            |   tache1     |
            ----------------
                   |
    -----------------------------------
    |              |                  |
----------     ----------         ----------
| tache2 |     | tache3 |         | tache4 |
----------     ----------         ----------
    |              |                  |
    |              --------------------
    |                        |
----------              ----------
| tache5 |              | tache6 |
----------              ----------
Comme une tache est constituée de plusieurs attributs, il a été proposé de faire deux tables :
- Une table TACHE contenant la clé primaire TACHEID ainsi que divers attributs
- Une table RELATION contenant le TACHEID_PERE et le TACHEID_FILS

Pour l'exemple schématisé, le contenu de la table RELATION serait :
Code :
1
2
3
4
5
6
7
8
TACHEIDPERE           TACHEIDFILS
-----------           -----------
     1                     2
     1                     3
     1                     4
     2                     5
     3                     6
     4                     6
Le but serait de pouvoir récupérer l'organigramme via une requête hiérarchique (connect by ... prior ...) avec une jointure (tel que décrit ici : http://www.developpez.net/forums/d54...t-by-jointure/)

Est-ce une modélisation pertinente ?
Oracle gère-t-il correctement les organigrammes de ce type ?

D'avance merci.
Doc.Fusion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 19h16   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Au pire, si les jointures vous embêtent on peut toujours les faire avant ou après l'application de la récursivité.

Le cas tel que vous l'avez décrit est plutôt bien géré par Oracle.
Des cas de récursivités plus complexes ne peuvent être bien gérés qu'en 11gR2 avec l'introduction des R-CTE.

Votre cas :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
WITH TACHE AS
(
SELECT 1 AS TACHEID, 'Tache 1' AS TACHENAME FROM dual union ALL
SELECT 2           , 'Tache 2'              FROM dual union ALL
SELECT 3           , 'Tache 3'              FROM dual union ALL
SELECT 4           , 'Tache 4'              FROM dual union ALL
SELECT 5           , 'Tache 5'              FROM dual union ALL
SELECT 6           , 'Tache 6'              FROM dual
)
  ,  RELATION AS
(
SELECT 1 AS TACHEIDPERE, 2 AS TACHEIDFILS FROM dual union ALL
SELECT 1               , 3                FROM dual union ALL
SELECT 1               , 4                FROM dual union ALL
SELECT 2               , 5                FROM dual union ALL
SELECT 3               , 6                FROM dual union ALL
SELECT 4               , 6                FROM dual
)
    SELECT level
         , t1.TACHENAME AS TACHENAMEPERE
         , t2.TACHENAME AS TACHENAMEFILS
      FROM RELATION r
           INNER JOIN tache t1
             ON t1.TACHEID = r.TACHEIDPERE
           INNER JOIN tache t2
             ON t2.TACHEID = r.TACHEIDFILS
start WITH tacheidpere = 1
connect BY tacheidpere = prior tacheidfils;
 
     LEVEL TACHENAMEPERE TACHENAMEFILS
---------- ------------- -------------
         1 Tache 1       Tache 2      
         2 Tache 2       Tache 5      
         1 Tache 1       Tache 3      
         2 Tache 3       Tache 6      
         1 Tache 1       Tache 4      
         2 Tache 4       Tache 6
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 09h48   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2004
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 36
Points : 11
Points : 11
Merci.
Doc.Fusion 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 04h16.


 
 
 
 
Partenaires

Hébergement Web