我有一个场景,我需要将数据临时插入表中,稍后在批准或确认后,将其永久化。数据将由用户插入,并且需要 super 用户批准或拒绝。
我现在想到的是有两个不同但相同的表(临时表和主表),用户将数据插入到临时表中。 super 用户确认后,数据将移至主表。但问题是,当数据库包含大量表时,这个过程就会变得更加复杂。
编辑:这意味着CREATE EDIT & DELETE命令。
有没有更简单或更好的方法来做到这一点?
请提出建议。
最佳答案
使用版本表(与评论相关):
这里的想法是有一个版本表;当您的用户更改一条信息时,新版本将与相关 ID 一起存储在此表中。
然后您需要做的就是加入 PersonID 并选择最新接受的版本。
这意味着用户可以根据需要进行任意数量的更新,但在 super 用户接受它们之前它们不会显示,这也意味着数据永远不会被破坏(存储在版本表中)并且他们不需要实现回滚,因为它已经存在!
查看: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
中的最新版本,向管理员显示所有这三个版本,并仅向网站的其他用户显示 版本正确
旧评论
您可以在表中添加一个名为“approved”的字段,然后隐藏任何内容,而不将“approval”标志设置为“TRUE”吗?
它可以默认为FALSE
,并且只有 super 用户才能看到该标志设置为FALSE
的项目
例如
Name | Age | Approved
-----------------------
Steve | 12 | FALSE
James | 16 | TRUE
John | 11 | FALSE
用户只会看到 James
,但 super 用户会看到列出的所有三个
使用临时表和主表是解决此问题的另一种方式,尽管随着一切变得更大,这可能会导致问题
关于mysql - 临时表和主表 - mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12298309/