Bonjour,

je suis face à un problème que je n'arrive pas à résoudre malgré de l'aide de plusieurs personnes s'y connaissant en base de données.

Voici le sujet.

Je souhaite réaliser une application pour suivre les activités de personnes.
Pour ce faire je dispose de plusieurs tables : Projet, release, catégorie, item, data, rapport et user. J'ai omis quelques tables annexes sans importance pour notre problème.

Ces tables sont liées comme suit :

Un projet est unique et peut contenir plusieurs releases.
Une release est contenue par un seul projet.

Une catégorie peut appartenir soit à une release et par conséquent à un projet, soit à un projet mais sans appartenir à une release, soit à rien.

Un item appartient à une ou plusieurs catégorie.
Une catégorie contient plusieurs items.
Dans l'ensemble toutes les catégories et les items associés sont créés dans la base par l'admin et ne seront utilisés qu'en consultation.
Voici un exemple concret :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Requirement management -> Product analysis
Requirement management -> Gathering requirements
Un point difficile est une catégorie que l'on peut créer, que l'on nomera feature et qui contient toujours les 5 même éléments. Lorsque l'on créer une feature il faut lui associer ces items.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Feat1 -> analysis
Feat1 -> implementation
...
Feat2 -> analysis
Feat2 -> implementation
...
Ces items sont liés à des data.
Une ligne data pointe vers un seul item et un item peut être pointé par plusieurs data. Les data changent chaque semaine et sont rentrées par l'utilisateur qui les possède.

Le rapport est une sorte de conteneur qui pointe vers des items et des data pointent vers lui.
Il y a un rapport par semaine par utilisateur. Ce rapport pointe vers plusieurs items et plusieurs data pointent vers lui. Le double pointage me permet d'afficher les items qui contiennent des data et ceux qui n'en contiennent pas.
Le rapport pointe également vers un user.

L'objectif principal de l'application et de présenter une sorte de fiche à l'utilisateur pour la semaine en cours. Elle lui présente les projet, release, catégories, items, data le concernant.

Voici un exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Project SaoPolo
  Release SaoPolo 1.1
    Catégorie1
      Item1
      Item2   Data associée à cet item, pour cette release et ce projet
    Categorie4      //l'utilisateur n'a pas d'item pour les catégories 2 et 3      
      Item7  Data
  Release SaoPolo 1.2    // nouvelle release pour le même projet
   Catégorie1
      Item1
      Item5   Data associée à cet item, pour cette release et ce projet
    Categorie2      //dans cette release il a des items dans la catégorie 2      
      Item5  Data
Support Porject SaoPolo    //catégorie ne pointant pas vers une release mais vers le projet lui même
  Catégorie12
    Item24
    Item26
Absences  //Categorie ne pointant vers aucun projet et aucune release, elle est personnelle à l'utilisateur
  Item32   Data

Pour le moment j'ai gérer mes relation n-n avec des tables de mapping. Mais lorsque je veux récupérer les données pour un utilisateur sur une semaine précise je ne récupère pas les données voulues.
Si un utilisateur possède des item sur 2 releases différentes je récupère les items indifféremment des releases

Faut-il que j'utilise des relations ternaires? Je ne sais pas si Doctrine les gère?

Merci d'avance si vous vous penchez sur mon problème parce que je commence à être à court d'idée.