2012-09-06 71 views
0

我有一個場景,我需要暫時將數據插入表中,稍後再批准或確認,使其成爲永久的。數據將被用戶插入,並且需要由超級用戶進行批准或拒絕。臨時表和主表 - mysql

我現在想的是有兩個不同但相同的表(臨時和主要),用戶將數據插入臨時表。超級用戶確認後,數據將被移至主表。但是,如果數據庫包含非常大量的表,那麼這個過程將變得更加複雜。

編輯:這意味着到創建或編輯&刪除命令。

有沒有更簡單或更好的方法來做到這一點?

請建議。

回答

2

使用版本表(相關評論):

這裏的想法是有一個版本表;當用戶更改一條信息時,新版本將與相關的ID一起存儲在此表中。

然後,您只需加入PersonID並選擇最近接受的版本即可。

這意味着用戶可以使盡可能多的更新,因爲他們想要的,但他們將不會顯示,直到超級用戶接受他們,這也意味着數據永遠不會被破壞(存儲在版本表),他們並不需要實現回滾,因爲它已經在那裏了!

http://sqlfiddle.com/#!3/cc77f/4

人民表:

ID | Age Etc... (Info That Doesn't Change) 
----------------------- 
1 | 12 
2 | 16 
3 | 11 

People版本表:

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


舊評論

你可以只添加一個字段名爲批准表然後隱藏沒有批准標誌設置爲TRUE的任何內容?

它可能默認爲FALSE,只有超級用戶將能夠看到設置爲FALSE

例如標誌項目

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

用戶將只能看到James,但超級用戶會看到所有三家上市


或者使用臨時和主表是看這個問題的另一種方式,儘管這可能會導致問題,因爲一切都變得更大

+0

但我也希望用戶所做的更改也應該可見。如果管理員拒絕更改,它應該恢復。這是通過更新,刪除和插入命令完成的。 –

+0

那我可以推薦一個版本表(上面加了) –

1

最簡單的方法是在表內的標誌標識批准或尚未批准的項目。

然後,只需將檢索邏輯更改爲僅顯示該標誌設置爲批准的條目。