Bonjour,

Afin de trouver une bonne idée pour modéliser une base par rapport au besoin du projet, je fais appel à vos différences expériences.

Le contexte du projet est le suivant, chaque mois je reçois un fichier contenant les informations du contrat son montant notamment. Il est nécessaire d'historiser ce fichier afin d'offrir une vision photo ( voir les informations du contrat transmise dans le fichier de janvier 2011 par exemple).
Par contre, ce contrat possède une date de prise d'effet antérieur, égal ou postérieur à la date de photo qui peut changer dans le temps (donc dans les photos successive). Les utilisateurs veulent pouvoir analyser le contrat en date d'effet : revenant à parcourir toutes les photos pour trouver la bonne photo avec la date d'effet souhaité.

pour ce point , je pensais mettre un attribut au niveau de la table pour qualifier la date d'effet. Aboutissant à une table suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
create table  fact (
           date_photo  date,
           date_effet  date,
           statut_effet  integer,
           numero_contrat  integer,
           montant  decimal(13,2)
       )
: répondant à l’algorithme suivant : à la réception d'un fichier les données seront intégrés avec un statut_effet =1 (indiquant que cette ligne est celle en vigueur pour cette date d'effet), puis toutes les autres lignes (autre date_photo) où le couple (date_effet,numero_contrat), venant d'être intégré dans la dernière photo, est présent le statut_effet sera mis à 0


Et là où cela se complique est que les utilisateurs voudraient analyser les contrats à une date d'effet donnée tout en indiquant une date de photo max à prendre ( afin d'occulter des photos intégrées). Avec ma gestion précédente, cela revient à chercher pour chaque couple (numero_contrat, date_effet__recherché) la date de photo max . Pour le moment je ne voyais que la solution d'avoir une vue logique répondant au sql suivant , dans le but de faire une jointure entre cette vue et ma table de fait ( sur le numero_contrat, date_effet et date_photo)

sql de la vue :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
select max(date_photo) , date_effet, numero_contrat
                       from  fact
                        where date_effet = ? la date d'effet souhaitée ?
                                     and 
                                     date_photo <= ? date photo max souhaitée ?
                      group by date_effet, numero_contrat
ce qui me gène avec cette solution est que je n'aurais aucun index au niveau de la vue, donc je risque d'avoir des pertes de performances lors de la jointure avec la table de fait .


Auriez vous mieux à me proposer

merci pour votre aide