ユーザーの状態を記録し、保持している変更の記録に基づいて履歴をレポートできるようにしたいと考えています。私はこれを SQL (PostgreSQL を使用) で実行しようとしていますが、次のようなユーザーの変更を記録するための提案された構造があります。
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
);
これは、データに基づいて、私が提案したテーブル構造です。
ステータス フィールドの「a」はアクティブなユーザーを表し、「s」は停止中のユーザーを表します。
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');
したがって、このユーザーは 1 月 1 日に停止され、2 月 1 日に再びアクティブになりました。
2008 年 1 月 15 日に停止された顧客のリストを取得したい場合、userid 1 が表示されるはずです。2008 年 2 月 15 日に停止された顧客リストを受け取った場合、userid 1 は表示されません。
1) これは、この種のクエリに対してこのデータを構造化するための最良の方法ですか?
2) この構造または提案された変更された構造のいずれかでデータを照会して、単純に日付 (1 月 15 日など) を取得し、SQL のみでその日付にアクティブなステータスを持っていた顧客のリストを見つけるにはどうすればよいですか? これはSQLの仕事ですか?