2010-11-16 55 views
1

如果你有一個表存儲問題的答案,例如使用一個名爲諸如Parent的額外列。所以如果一個問題在父代中沒有價值,那麼這是一個問題,如果問題確實存在,那麼它的答案就是如此,那麼您將如何爲此進行版本控制呢?一個簡單的數據庫版本控制

+0

聽起來像一個分層的評論線程。 「版本控制」是什麼意思?你想看看過去的某個時刻「樹」是什麼樣子的? – 2010-11-16 02:03:20

+0

如果有人發佈回覆,他們會改變回復,然後他們想回到他們以前的回答......這類事情。 – jonnnnnnnnnie 2010-11-16 02:08:32

+1

這個設計聽起來有點拗口。我可能會建議一個單獨的問題和答案表? – JohnFx 2010-11-16 02:32:20

回答

0

有關如何保留過去的文本修訂的完善示例,您可以查看MediaWiki database layout。這是MediaWiki軟件所使用的數據庫佈局,許多維基(特別是維基百科)運行該軟件。具體而言,page,revisiontext表是跟蹤歷史變化所涉及的主要表格。

0

有一個表的問題,和一個單獨的一個答案:

這裏的SQLite中

一個例子中的問題表應包含問題的文本和id字段加入上:

sqlite3 
sqlite> CREATE TABLE questions(id, question); 
sqlite> INSERT INTO questions VALUES(1,"What is your name"); 
sqlite> INSERT INTO questions VALUES(2,"Phone Number"); 
sqlite> INSERT INTO questions VALUES(3,"name of dog") 
sqlite> SELECT * FROM questions; 
1|What is your name 
2|Phone Number 

答案應該包含修訂號或日期,答案的文本,表明哪個用戶被問及問題的字段(如果有必要),以及問題的答案。

sqlite> CREATE TABLE answers(question,userid,revision,answer); 
sqlite> INSERT INTO answers VALUES(1,100,1,"Alex"); 
sqlite> INSERT INTO answers VALUES(2,100,1,"1234"); 
sqlite> INSERT INTO answers VALUES(2,100,2,"5678"); 
sqlite> SELECT * from answers; 
1|100|1|Alex 
2|100|1|1234 
2|100|2|5678 

現在對兩個數據庫查詢,確保:只有選擇了最近的修訂包括(GROUP和MAX),以及懸而未決的問題(LEFT JOIN)

sqlite> SELECT questions.question, answers.answer, userid, max(revision) 
       FROM questions LEFT JOIN answers ON questions.id = answers.question 
       GROUP BY questions.id, userid; 
What is your name|Alex|100|1 
Phone Number|5678|100|2 
name of dog||| 

您可以創建一些其他查詢來列出給定問題/用戶的過去答案,並列出用戶未回答的問題。