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中編輯的主要代碼就儲存在這幾個資料庫中,通過查詢這些資料庫表,可以得到我們要評審的代碼錶。