0

データを一時的にテーブルに挿入し、後で承認または確認時に永続的にする必要があるシナリオがあります。データはユーザーによって挿入され、承認または拒否はスーパーユーザーによって行われる必要があります。

私が今考えているのは、2つの異なるが同一のテーブル(一時テーブルとメインテーブル)があり、ユーザーがデータを一時テーブルに挿入することです。スーパーユーザーの確認後、データはメインテーブルに移動されます。ただし、データベースに非常に多くのテーブルが含まれていると、このプロセスがより複雑になるという問題が発生します。

EDIT:これは、CREATE EDIT&DELETEコマンドを意味します。

これを行うためのより簡単またはより良いアプローチはありますか?

提案してください。

4

2 に答える 2

2

バージョン テーブルの使用(コメントに関連):

ここでのアイデアは、バージョン テーブルを持つことです。ユーザーが情報の一部を変更すると、新しいバージョンが関連する 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 つすべてが表示されます。


別の方法として、一時テーブルとメイン テーブルを使用することは、この問題を調べる別の方法ですが、すべてが大きくなると問題が発生する可能性があります。

于 2012-09-06T10:45:52.850 に答える
1

最も簡単な方法は、エントリが承認済みか未承認かを示すテーブル内のフラグです。

次に、取得ロジックを変更して、そのフラグが承認済みに設定されているエントリのみを表示します。

于 2012-09-06T10:45:37.687 に答える