Précédent   Forum des professionnels en informatique > Bases de données > Décisions SGBD > Autres
Autres Autres sujets sur les SGBD
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 03/11/2006, 09h23   #1
Membre du Club
 
Inscription : mai 2002
Messages : 56
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 56
Points : 65
Points : 65
Envoyer un message via ICQ à PierreY
Par défaut Versionning des données d'une base

Salut,

Est-ce qu'il existe un "design pattern" répondant au problème du versionning des données dans une base de données ? Je veux pouvoir tracer toutes les versions de toutes les données d'une base de données. Et pouvoir, avec les requêtes judicieuses retrouver les données de la base à n'importe quelle version (comme avec SVN ou CVS).

Merci d'avance,

--
Pierre Y.
PierreY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 11h52   #2
Nouveau Membre du Club
 
Développeur Java
Inscription : septembre 2006
Messages : 37
Détails du profil
Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : septembre 2006
Messages : 37
Points : 29
Points : 29
Cette histoire de versionning m'intéresse

Je me permet d'exposer mon problème ici, qui semble s'en rapprocher.

Mes utilisateurs doivent saisir des formulaires, qui constituent un document.
Ce document peut être mis à jour, et il faut conserver un historique de toutes les modifs faites sur ce document (ce document, concrètement, c'est un enregistrement dans une table).

La première idée qui m'est venu est d'ajouter un champ "codeMAJ" au document, et de dupliquer l'intégralité des champs qui n'ont pas été modifiés. C'est très facile à mettre en place mais peu économe (49 champs dupliqués pour 1 champ mis à jour, le mot "LOURD" n'est pas à prendre à la légère ... arhem :p). Cependant, on retrouve bien les différentes révisions du document, telles qu'elles étaient au moment de leur saisie.

L'autre idée qui m'est venu (mais qui me semble dangereuse), est d'ajouter une table de ce style là:

SCH.MAJDOC(#*idDoc, #idMAJ, nomChamp, typeChamp, valeurChamp).
- valeurChamp étant un type "large" (String me suffirait, mais Object marche à 100%)
- typeChamp étant une chaîne définissant le type ("VARCHAR", "INTEGER", "DATE", etc.) de valeurChamp
- nomChamp, le nom du champ mis à jour dans le document.

Que pensez-vous de cette méthode ? Elle devient rentable si le nombre d'enregistrements dans la table d'origine est conséquent, mais je n'arrive pas à cerner ce qu'implique sa mise en oeuvre.

Ici il s'agit plutôt d'un versioning d'enregistrements, mais je suis également ouvert à suggestions
xss.xas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 12h04   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 793
Points : 17 793
en dehors des deux solutions classiques évoqués il en existe une 3e qui consite à rajouter dans toutes les tables une colonne TIMESTAMP avec la date/heure d'obsolèscence de la version de ligne. Pour l'unique ligne valide dans le présent, cette datheure doit être une valeur dans un futur très éloigné, par exemple '9999-01-01'.

Pour la manipulation des tuples, rien de plus simple...
Ajoutez à chaque table une vue avec le filtre suivant :
CREATE VIEW V_ACTUAL_DATA
AS
SELECT <toutes les colonnes sauf celle d'horodatage>
FROM <ma_table>
WHERE maColonneHorodatage > CURRENT_TIMESTAMP

Bien entendu il faudra rajouter des triggers pour gérer les DELETE ET UPDATE.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 15h48   #4
Rédacteur/Modérateur
 
Avatar de lunatix
 
Homme julien
Architecte technique
Inscription : novembre 2002
Messages : 1 865
Détails du profil
Informations personnelles :
Nom : Homme julien
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte technique

Informations forums :
Inscription : novembre 2002
Messages : 1 865
Points : 2 685
Points : 2 685
Envoyer un message via ICQ à lunatix Envoyer un message via AIM à lunatix Envoyer un message via MSN à lunatix
a mon avis, ca dépends aussi de la charge de ton application et du nombre d'enregistrement et de versions qu'il y aura dedans.

A partir d'une certaine charge, tu es obligé de ne garder que la version courante, et d'archiver les vieilles versions dans une autre table, qui sera moins utilisée. (Bien sur, ca depends aussi de l'utilisation, si a chaque ouverture de formulaire on consulte aussi l'historique, ca sert a rien )
__________________
Blog blog = new MyBlog();
lunatix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 23h58   #5
Membre du Club
 
Inscription : septembre 2005
Messages : 73
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : septembre 2005
Messages : 73
Points : 54
Points : 54
Hello,

Les fonctionnalités de versionning d'une SGBDO intègrent nativement la partie timestamp.

Lors de la création d'un objet, il suffit de spécifier que cet objet sera versionné.
Le langage OQL permet via des crochets de spécifier sur quel version de l'objet travailler. La version ou le timestamp permettent ainsi d'interroger la base historiquement.
GyLes 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 23h11.


 
 
 
 
Partenaires

Hébergement Web