我有一个场景,我需要暂时将数据插入表中,稍后在批准或确认后,将其永久化。数据将由用户插入,超级用户需要批准或拒绝。
我现在想到的是有两个不同但相同的表(临时表和主表),用户将数据插入到临时表中。超级用户确认后,数据将被移动到主表。但是当数据库包含大量表时,问题就来了,那么这个过程将变得更加复杂。
编辑:这意味着要创建编辑和删除命令。
有没有更简单或更好的方法来做到这一点?
请建议。
我有一个场景,我需要暂时将数据插入表中,稍后在批准或确认后,将其永久化。数据将由用户插入,超级用户需要批准或拒绝。
我现在想到的是有两个不同但相同的表(临时表和主表),用户将数据插入到临时表中。超级用户确认后,数据将被移动到主表。但是当数据库包含大量表时,问题就来了,那么这个过程将变得更加复杂。
编辑:这意味着要创建编辑和删除命令。
有没有更简单或更好的方法来做到这一点?
请建议。
使用版本表(与评论相关):
这里的想法是有一个版本表;当您的用户更改一条信息时,新版本与相关 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
表示已拒绝
您可以向用户显示来自null
and的最新true
版本,向管理员显示所有三个版本,并仅向该站点的其他用户显示那些true
旧评论
您是否可以在表中添加一个名为approved 的字段,然后在没有将approval flag 设置为的情况下隐藏任何内容TRUE
?
它可以默认为FALSE
,只有超级用户才能看到标志设置为的项目FALSE
例如
Name | Age | Approved
-----------------------
Steve | 12 | FALSE
James | 16 | TRUE
John | 11 | FALSE
用户只会看到James
,但 SuperUser 会看到列出的所有三个
或者,使用您的临时表和主表是查看此问题的另一种方式,尽管随着一切变得更大,这可能会导致问题
最简单的方法是在表格中设置一个标志,标记条目已批准或尚未批准。
然后只需更改检索逻辑以仅显示该标志设置为已批准的条目。