临时表和主表 - mysql

时间:2012-09-06 10:43:37

标签: mysql

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

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

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

有没有更简单或更好的方法呢?

请建议。

2 个答案:

答案 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表示已被拒绝

您可以向用户显示nulltrue中的最新用户,向管理员显示全部三个,并向该网站的其他用户显示仅true

的版本

旧评论

您是否可以在表中添加一个名为approved的字段,然后在未将审批标志设置为TRUE的情况下隐藏任何内容?

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

E.g。

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

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


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

答案 1 :(得分:1)

最简单的方法是在表格中标记标记已批准或尚未批准的条目。

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