Je souhaite enregistrer les états des utilisateurs, puis pouvoir générer des rapports historiques en fonction de l'enregistrement des modifications que nous avons conservées. J'essaye de faire ceci en SQL (using PostgreSQL) et j'ai une structure proposée pour enregistrer des changements d'utilisateur comme le suivant.Machine à états SQL - création de rapports sur les données historiques basées sur le changeset
CREATE TABLE users (
userid SERIAL NOT NULL PRIMARY KEY,
name VARCHAR(40),
status CHAR NOT NULL
);
CREATE TABLE status_log (
logid SERIAL,
userid INTEGER NOT NULL REFERENCES users(userid),
status CHAR NOT NULL,
logcreated TIMESTAMP
);
C'est ma structure de table proposée, basée sur les données.
Pour le champ d'état « a » représente un utilisateur actif et l « » représente un utilisateur suspendu,
INSERT INTO status_log (userid, status, logcreated) VALUES (1, 's', '2008-01-01');
INSERT INTO status_log (userid, status, logcreated) VALUES (1, 'a', '2008-02-01');
Ainsi, cet utilisateur a été suspendu le 1er janvier et de nouveau actif le 1er Février.
Si je voulais obtenir une liste de clients suspendue le 15 janvier 2008, l'ID utilisateur 1 devrait apparaître. Si je reçois une liste de clients suspendus le 15 février 2008, l'ID utilisateur 1 ne devrait pas apparaître.
1) Est-ce la meilleure façon de structurer ces données pour ce type de requête?
2) Comment puis-je interroger les données dans cette structure ou dans la structure modifiée que vous proposez afin de pouvoir simplement avoir une date (par exemple le 15 janvier) et trouver une liste de clients actifs à cette date? SQL seulement? Est-ce un travail pour SQL?
oui, il prend en charge les requêtes analytiques -> http://www.postgresql.org/docs/8.4/static/tutorial-window.html – filiprem