简单的数据库版本控制

时间:2010-11-16 01:59:02

标签: sql version-control

如果您有一个存储问题答案的表格,例如使用一个名为Parent的额外列。因此,如果一个问题在父级中没有值,那么这是一个问题,如果是,那么它是一个回复,那么你将如何对此进行版本控制呢?

2 个答案:

答案 0 :(得分:0)

对于如何保留过去修订文本的完善示例,您可以查看MediaWiki database layout。这是MediaWiki软件使用的数据库布局,许多维基百科(特别是维基百科)运行该软件。具体而言,pagerevisiontext表是跟踪历史变化所涉及的主要表格。

答案 1 :(得分: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

答案应包含修订号或日期,答案文本,表示询问哪个用户问题的字段(如有必要),以及答案的问题ID。

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|||

您可以创建一些其他查询,以列出给定问题/用户的过去答案,并列出用户未回答的问题。