0

我有一个场景,我需要暂时将数据插入表中,稍后在批准或确认后,将其永久化。数据将由用户插入,超级用户需要批准或拒绝。

我现在想到的是有两个不同但相同的表(临时表和主表),用户将数据插入到临时表中。超级用户确认后,数据将被移动到主表。但是当数据库包含大量表时,问题就来了,那么这个过程将变得更加复杂。

编辑:这意味着要创建编辑和删除命令。

有没有更简单或更好的方法来做到这一点?

请建议。

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 

人物版本表:

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 

进一步的见解:

您甚至可以拥有三种已批准状态;null表示还没有管理员选择,TRUE表示已接受,FALSE表示已拒绝

您可以向用户显示来自nulland的最新true版本,向管理员显示所有三个版本,并仅向该站点的其他用户显示那些true


旧评论

您是否可以在表中添加一个名为approved 的字段,然后在没有将approval flag 设置为的情况下隐藏任何内容TRUE

它可以默认为FALSE,只有超级用户才能看到标志设置为的项目FALSE

例如

Name  | Age | Approved
-----------------------
Steve | 12  | FALSE
James | 16  | TRUE
John  | 11  | FALSE

用户只会看到James,但 SuperUser 会看到列出的所有三个


或者,使用您的临时表和主表是查看此问题的另一种方式,尽管随着一切变得更大,这可能会导致问题

于 2012-09-06T10:45:52.850 回答
1

最简单的方法是在表格中设置一个标志,标记条目已批准或尚未批准。

然后只需更改检索逻辑以仅显示该标志设置为已批准的条目。

于 2012-09-06T10:45:37.687 回答