Redmine 中几个重要的 MySQL table
Redmine 系统大部分的数据都是保存在数据库中的,为了了解Redmine系统的整体结构,有必要搞清楚这些数据是怎么保存的,表的结构是什么样的,里面有哪些内容。今天就研究一下这方面的内容,主要以code review相关的内容为主。
首先介绍几个常用MySQL操作命令:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引。 CREATE: 建立新的数据库或数据表。 DELETE: 删除表的记录。 DROP: 删除数据表或数据库。 INDEX: 建立或删除索引。 INSERT: 增加表的记录。 SELECT: 显示/搜索表的记录。 UPDATE: 修改表中已存在的记录。
这些命令使用起来比较简单,具体用法可以查看相关的资料。
使用查询命令可以发现使用code review之后redmine一共使用了51个表。其中比较重要的如下几个:
1、projects
mysql> select id, name description, created_on, updated_on, identifier from projects; +----+----------------+---------------------+---------------------+------------+ | id | description | created_on | updated_on | identifier | +----+----------------+---------------------+---------------------+------------+ | 1 | taobao project | 2011-08-25 14:44:47 | 2011-08-25 14:44:47 | taobao | +----+----------------+---------------------+---------------------+------------+
记录创建的工程,内容不多,主要的有项目名称,创建时间,标识符等。
2、changesets
mysql> select id, repository_id, revision, committer, committed_on, comments, commit_date from changesets limit 4; +----+---------------+----------+-----------+---------------------+----------------------+-------------+ | id | repository_id | revision | committer | committed_on | comments | commit_date | +----+---------------+----------+-----------+---------------------+----------------------+-------------+ | 1 | 1 | 1 | svncenter | 2011-08-10 14:30:10 | add folder by System | 2011-08-10 | | 2 | 1 | 2 | svncenter | 2011-08-10 14:30:10 | add folder by System | 2011-08-10 | | 3 | 1 | 3 | svncenter | 2011-08-10 14:30:11 | add folder by System | 2011-08-10 | | 4 | 1 | 4 | svncenter | 2011-08-10 14:30:11 | add folder by System | 2011-08-10 | +----+---------------+----------+-----------+---------------------+----------------------+-------------+
保存代码每一次修改的记录,其中repository_id代表属于那个工程的代码库,revision是版本号,每次修改都回增加一个版本号,committer是修改人,committed_on代表修改时间,comments是修改内容的注释,commit_date是创建日期。
3、changes
mysql> select * from changes limit 4; +----+--------------+--------+-----------------+-----------+---------------+----------+--------+ | id | changeset_id | action | path | from_path | from_revision | revision | branch | +----+--------------+--------+-----------------+-----------+---------------+----------+--------+ | 1 | 1 | A | /trunk | NULL | NULL | NULL | NULL | | 2 | 2 | A | /trunk/tmstable | NULL | NULL | NULL | NULL | | 3 | 3 | A | /branches | NULL | NULL | NULL | NULL | | 4 | 4 | A | /tags | NULL | NULL | NULL | NULL | +----+--------------+--------+-----------------+-----------+---------------+----------+--------+
详细记录changesets中的每一个变化,changeset_id对应之前changesets中的变化版本,每一个版本可能会对应多个changes,action是变化的操作,有三种,A代表新增文件或文件夹,D代表删除文件或文件夹,M代表修改文件或文件夹,path代表文件的路劲,from_path代表来源文件的路径,只在M是有效,from_revision和revision代表修改前后的版本,一般为NULL。
4、repositories
mysql> select id, project_id, url, type, path_encoding from repositories; +----+------------+------------------------------------------+------------+---------------+ | id | project_id | url | type | path_encoding | +----+------------+------------------------------------------+------------+---------------+ | 1 | 1 | http://svn.app.taobao.net/repos/tmstable | Subversion | NULL | +----+------------+------------------------------------------+------------+---------------+
版本库保存编辑的SVN版本路径。
Redmine中编辑的主要代码就保存在这几个数据库中,通过查询这些数据库表,可以得到我们要评审的代码表。