Schéma de base de données
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:
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:
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:
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.