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