バージョン テーブルの使用(コメントに関連):
ここでのアイデアは、バージョン テーブルを持つことです。ユーザーが情報の一部を変更すると、新しいバージョンが関連する ID とともにこのテーブルに保存されます。
あとは、PersonID に参加して、承認された最新のバージョンを選択するだけです。
これは、ユーザーが必要なだけ更新を行うことができることを意味しますが、スーパー ユーザーが承認するまで更新は表示されません。また、データが破棄されることはなく (バージョン テーブルに格納されます)、ロールバックを実装する必要がないことも意味します。それはすでにそこにあります!
参照: http://sqlfiddle.com/#!3/cc77f/4
人物表:
ID | Age Etc... (Info That Doesn't Change)
-----------------------
1 | 12
2 | 16
3 | 11
People バージョン テーブル:
VersionID | PersonID | Name | Approved
-----------------------
1 | 1 | Stevz | FALSE
2 | 1 | Steve | TRUE
3 | 2 | James | TRUE
4 | 3 | Jghn | FALSE
5 | 3 | John | TRUE
テーブル SQL の例
CREATE TABLE People
(
id int identity primary key,
age int
);
CREATE TABLE PeopleVersion
(
versionId int identity primary key,
peopleId int,
name varchar(30),
approved varchar(30)
);
クエリの例
SELECT * FROM People p
INNER JOIN PeopleVersion v ON p.id = v.peopleID
WHERE v.approved = 'TRUE'
ORDER BY versionId DESC
さらなる洞察:
承認済みの状態を 3 つ持つこともできます。null
管理者がまだ選択していないことをTRUE
意味し、受け入れられたことをFALSE
意味し、拒否されたことを意味します
null
ユーザーにはとからの最新のものをtrue
表示し、管理者には 3 つすべてを表示し、サイトの他のユーザーには以前のバージョンのみを表示できます。true
古いコメント
承認済みというフィールドをテーブルに追加して、承認フラグが に設定されていないものを非表示にすることはできますTRUE
か?
デフォルトFALSE
で、スーパーユーザーのみがフラグが設定されたアイテムを見ることができますFALSE
例えば
Name | Age | Approved
-----------------------
Steve | 12 | FALSE
James | 16 | TRUE
John | 11 | FALSE
ユーザーには のみが表示James
されますが、スーパーユーザーには 3 つすべてが表示されます。
別の方法として、一時テーブルとメイン テーブルを使用することは、この問題を調べる別の方法ですが、すべてが大きくなると問題が発生する可能性があります。