[java手把手教程][第二季]java後端部落格系統文章系統——No5
停更了一個月後,我們再次開始更新。具體原因只能說是過年事情太多,幼時不知努力,長大了卻又事事纏身。
這一期主要是根據WordPress執行的效果來觀察資料庫,從而分析WordPress的程式設計。
專案github地址:github.com/pc859107393…
我的簡書首頁是:www.jianshu.com/users/86b79…
上一期是:[手把手教程][第二季]java 後端部落格系統文章系統——No4
工具
- IDE為idea16
- JDK環境為1.8
- gradle構建,版本:2.14.1
- Mysql版本為5.5.27
- Tomcat版本為7.0.52
- 流程圖繪製(xmind)
- 建模分析軟體PowerDesigner16.5
- 資料庫工具MySQLWorkBench,版本:6.3.7build
本期目標
- 根據WordPress的工作進行程式設計分析
- 完成文章儲存和草稿儲存相關程式流程分析
根據WordPress文章儲存和草稿儲存分析程式設計
首先我們開啟WordPress登入到控制檯後隨便儲存草稿和文章,然後匯出資料庫中posts表增加內容如下:
{
"RECORDS":[
{
"ID":"329",
"post_author":"1",
"post_date":"02-16-2017 09:57:29",
"post_date_gmt":"02-16-2017 01:57:29",
"post_title":"[java 手把手教程][第二季]java 後端部落格系統文章系統——No4",
"post_excerpt":"",
"post_status":"inherit",
"comment_status":"closed",
"comment_count":"0",
"ping_status":"closed",
"post_password":"",
"post_name":"328-revision-v1",
"to_ping":"",
"pinged":"",
"post_modified":"02-16-2017 09:57:29",
"post_modified_gmt":"02-16-2017 01:57:29",
"post_content_filtered":"",
"post_parent":"328",
"guid":"http://acheng1314.cn/?p=329",
"menu_order":"0",
"post_type":"revision",
"post_mime_type":"",
"comment_count(2)":"0"
},
{
"ID":"328",
"post_author":"1",
"post_date":"02-16-2017 09:58:19",
"post_date_gmt":"02-16-2017 01:58:19",
"post_title":"[java 手把手教程][第二季]java 後端部落格系統文章系統——No4",
"post_excerpt":"",
"post_status":"publish",
"comment_status":"open",
"comment_count":"0",
"ping_status":"open",
"post_password":"",
"post_name":"java-%e6%89%8b%e6%8a%8a%e6%89%8b%e6%95%99%e7%a8%8b%e7%ac%ac%e4%ba%8c%e5%ad%a3java-%e5%90%8e%e7%ab%af%e5%8d%9a%e5%ae%a2%e7%b3%bb%e7%bb%9f%e6%96%87%e7%ab%a0%e7%b3%bb%e7%bb%9f-no4",
"to_ping":"",
"pinged":"",
"post_modified":"02-16-2017 09:58:19",
"post_modified_gmt":"02-16-2017 01:58:19",
"post_content_filtered":"",
"post_parent":"0",
"guid":"http://acheng1314.cn/?p=328",
"menu_order":"0",
"post_type":"post",
"post_mime_type":"",
"comment_count(2)":"0"
},
{
"ID":"327",
"post_author":"1",
"post_date":"02-14-2017 23:20:15",
"post_date_gmt":"02-14-2017 15:20:15",
"post_title":"我的草稿",
"post_excerpt":"",
"post_status":"inherit",
"comment_status":"closed",
"comment_count":"0",
"ping_status":"closed",
"post_password":"",
"post_name":"323-revision-v1",
"to_ping":"",
"pinged":"",
"post_modified":"02-14-2017 23:20:15",
"post_modified_gmt":"02-14-2017 15:20:15",
"post_content_filtered":"",
"post_parent":"323",
"guid":"http://acheng1314.cn/?p=327",
"menu_order":"0",
"post_type":"revision",
"post_mime_type":"",
"comment_count(2)":"0"
},
{
"ID":"326",
"post_author":"1",
"post_date":"02-14-2017 23:20:01",
"post_date_gmt":"02-14-2017 15:20:01",
"post_title":"",
"post_excerpt":"",
"post_status":"inherit",
"comment_status":"closed",
"comment_count":"0",
"ping_status":"closed",
"post_password":"",
"post_name":"323-revision-v1",
"to_ping":"",
"pinged":"",
"post_modified":"02-14-2017 23:20:01",
"post_modified_gmt":"02-14-2017 15:20:01",
"post_content_filtered":"",
"post_parent":"323",
"guid":"http://acheng1314.cn/?p=326",
"menu_order":"0",
"post_type":"revision",
"post_mime_type":"",
"comment_count(2)":"0"
},
{
"ID":"325",
"post_author":"1",
"post_date":"02-10-2017 22:34:41",
"post_date_gmt":"00-00-00 00:00:00",
"post_title":"自動草稿",
"post_excerpt":"",
"post_status":"auto-draft",
"comment_status":"open",
"comment_count":"0",
"ping_status":"open",
"post_password":"",
"post_name":"",
"to_ping":"",
"pinged":"",
"post_modified":"02-10-2017 22:34:41",
"post_modified_gmt":"00-00-00 00:00:00",
"post_content_filtered":"",
"post_parent":"0",
"guid":"http://acheng1314.cn/?p=325",
"menu_order":"0",
"post_type":"post",
"post_mime_type":"",
"comment_count(2)":"0"
},
{
"ID":"323",
"post_author":"1",
"post_date":"02-14-2017 23:20:15",
"post_date_gmt":"00-00-00 00:00:00",
"post_title":"我的草稿",
"post_excerpt":"",
"post_status":"draft",
"comment_status":"open",
"comment_count":"0",
"ping_status":"open",
"post_password":"",
"post_name":"",
"to_ping":"",
"pinged":"",
"post_modified":"02-14-2017 23:20:15",
"post_modified_gmt":"02-14-2017 15:20:15",
"post_content_filtered":"",
"post_parent":"0",
"guid":"http://acheng1314.cn/?p=323",
"menu_order":"0",
"post_type":"post",
"post_mime_type":"",
"comment_count(2)":"0"
}
]
}複製程式碼
在上面的資料中我們已經刪除了文章內容的資料(資料量太大,不方便查閱)。然後我們仔細分析上面的json資料,我們可以得出結論如下:
- 文章:
- ID為329和328的表示文章,且為同一篇文章(編輯完成立即釋出)。
- 不同欄位為:
- ID
- post_date
- post_date_gmt
- post_status
- comment_status
- ping_status
- post_name
- post_modified
- post_modified_gmt
- post_parent
- post_type
通過上面的對比我們大致可以得出這樣一個結論:
- 文章編輯完成釋出後,會留下一個初始版本的記錄和一個正式釋出版本的記錄。
- 正式釋出的文章和文章歷史記錄的主要區別如下:
---->正式釋出
"post_status":"publish",
"comment_status":"open",
"ping_status":"open",
"post_name":"java-%e6%89%8b%e6%8a%8a%e6%89%8b%e6%95%99%e7%a8%8b%e7%ac%ac%e4%ba%8c%e5%ad%a3java-%e5%90%8e%e7%ab%af%e5%8d%9a%e5%ae%a2%e7%b3%bb%e7%bb%9f%e6%96%87%e7%ab%a0%e7%b3%bb%e7%bb%9f-no4",
"post_type":"post",
"post_parent":"0",
---->歷史記錄
"post_status":"inherit",
"comment_status":"closed",
"ping_status":"closed",
"post_name":"328-revision-v1",
"post_type":"revision",
"post_parent":"328",複製程式碼
草稿:
- ID為323、325、326、327的均為草稿,且為同一篇草稿。
- 具體的不同區別也和上面的類似,所以說我們可以自行整理下即可。
小結:
- 文章和草稿都是有完整的版本記錄。
- 文章和草稿的格式類似。
- 草稿分為自動草稿和手動草稿。
- 版本記錄也是完整的記錄,只是一些關鍵的欄位改變了下。
文章分組相關分析
SELECT
`ID`,
`post_title`,
`post_date`,
`post_content`
FROM
`wp_posts`
WHERE
`post_type` = 'post'
AND
`post_status` = 'publish'
ORDER BY
`ID`複製程式碼
上面的語句能夠查詢出來公開的文章,文章ID一目瞭然。
同時我們觀察資料庫可以得出跟文章的歸類相關的資料庫有:
- wp_terms
- wp_term_taxonomy
- wp_term_relationships
但是這麼多表都是文章分類相關的東西,那麼文章分類又分為什麼些呢?按照WordPress的簡單構架支撐大量的資料來看,那麼我們可以肯定文章標籤和目錄分類肯定是在一起的。所以我們先看最根本的wp_terms。
term_id | name | slug | term_group |
---|---|---|---|
1 | java web | java-web | 0 |
2 | C語言學習 | how2use_c | 0 |
3 | Android開發 | makeandroid | 0 |
4 | 綜合總結 | all_log | 0 |
5 | 個人生活 | myself_life | 0 |
6 | post-format-aside | post-format-aside | 0 |
7 | 轉載 | from_others | 0 |
8 | Android Coder | android-coder | 0 |
9 | 友情連結 | %e5%8f%8b%e6%83%85%e9%93%be%e6%8e%a5 | 0 |
10 | JavaWeb | javaweb | 0 |
11 | java web | java-web | 0 |
12 | Spring | spring | 0 |
13 | Mybatis | mybatis | 0 |
14 | java後端 | java%e5%90%8e%e7%ab%af | 0 |
15 | JavaWeb | javaweb | 0 |
16 | MySQL資料庫 | mysql%e6%95%b0%e6%8d%ae%e5%ba%93 | 0 |
17 | 全棧教程 | %e5%85%a8%e6%a0%88%e6%95%99%e7%a8%8b | 0 |
18 | java | java | 0 |
上面這張表是我線上伺服器上面的wp_term表,可能我們暫時不明白什麼意思,不過問題不大。我們接著看wp_term_taxonomy。
term_taxonomy_id | term_id | taxonomy | description | parent | count |
---|---|---|---|---|---|
1 | 1 | category | 0 | 17 | |
2 | 2 | category | 0 | 0 | |
3 | 3 | category | 0 | 20 | |
4 | 4 | category | 0 | 6 | |
5 | 5 | category | 0 | 1 | |
6 | 6 | post_format | 0 | 44 | |
7 | 7 | category | 0 | 8 | |
8 | 8 | link_category | 0 | 2 | |
9 | 9 | nav_menu | 0 | 0 | |
10 | 10 | link_category | 0 | 0 | |
11 | 11 | post_tag | 0 | 2 | |
12 | 12 | post_tag | 0 | 4 | |
13 | 13 | post_tag | 0 | 4 | |
14 | 14 | post_tag | 0 | 3 | |
15 | 15 | post_tag | 0 | 2 | |
16 | 16 | post_tag | 0 | 3 | |
17 | 17 | post_tag | 0 | 3 | |
18 | 18 | post_tag | 0 | 1 |
通過上面這種表我們就可以明白了term_id所對應的name分別是什麼用的,他們分別有文章分組、文章標籤、連結標記等。
但是說這麼多都沒把上面文章的文章分類在哪找到,所以我們接著看wp_term_relationships表裡面的東西。
object_id | term_taxonomy_id | term_order |
---|---|---|
1 | 8 | 0 |
2 | 8 | 0 |
9 | 4 | 0 |
9 | 6 | 0 |
11 | 4 | 0 |
11 | 6 | 0 |
16 | 3 | 0 |
16 | 6 | 0 |
··· | ··· | ··· |
表裡面資料還有很多此處暫時省略。
上面表中的object_id顧名思義就是說物件的ID,說明它不單是文章也還有其他分類的資訊。
我們再看看我們線上的wp_posts(文章)表,裡面的簡略內容如下:
ID | post_title | post_date | post_content |
---|---|---|---|
9 | IT產品文件列表 | 2015-09-22 16:44:48 | 內容省略··· |
11 | 建站伊始,一切從頭再來,本站用wordpress搭建,基於PHP。 | 2015-09-22 16:45:32 | ··· |
其實資料不需要那麼多,我們只需要一丟丟資料簡單對比就能知道結果了。
- 文章ID為9和11的文章的term_taxonomy_id分別為:4、6、4、6
- term_taxonomy_id為4和6的term_id和taxonomy分別為:
term_id | taxonomy |
---|---|
category | post_format |
- 最後我們在wp_terms這個表中可以看到term_id分別為4和6的分別是
term_id | name | slug | term_group |
---|---|---|---|
4 | 綜合總結 | all_log | 0 |
6 | post-format-aside | post-format-aside | 0 |
所以最後我們通過這樣就可以明白分類資訊的大概查詢結構,文章分類的大概查詢如下:
文章id ➡ wp_term_relationships中的object_id對應的term_taxonomy_id ➡ wp_term_taxonomy的ID可以看到分別是什麼分類同時可以查詢到term_id ➡ 最後在wp_term表中根據term_id可以查詢到具體的名稱。
至此分類資訊基本查詢完成。
總結
- 文章和草稿只是一些關鍵資訊的不同
- 文章和草稿都有完整的歷史記錄
- 文章分類在文章關係表中
- 文章關係表包含了文章目錄、文章標籤等
- 文章其他屬性都可以通過先在WordPress上面執行後逆向觀察資料庫窺到一二