广告

谈WordPress插件开发数据库设计模式

一、WordPress的数据库是如何设计的

基本表如下:

wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_terms
wp_term_relationships
wp_term_taxonomy
wp_usermeta
wp_users

不难发现, 很多表都对应一个meta表
下面来讲讲这个meta表是做什么的:

拿wp_posts与wp_postmeta表来举例, wp_posts表是主表, wp_postmeta是’从表’.wp_posts中保存的是post的基本信息, 如post_id, 作者, 创建时间, 状态, url等信息.

但这里疑问就来了, wordpress 是一个开源的系统, 并且拥有一个庞大的插件库, 那么它是怎么做到将每个关于post的信息关联到post上面的呢? 常见方法有2种:

  1. 方法一:使用主从表, 及每个插件都需要创建一个自己的表来关联wp_posts的主键
  2. 方法二:使用EAV模式,即WP目前使用的设计模式–除实体单独一个表以外,其他的信息都作为属性存到另外的一张表里面.这里仅仅用了2张表(当然,EAV还有很多的变种, 常见的是3张表, 并且涉及到属性值类型的时候可以采取更加负责的处理方式)

如WP这般设计数据库, 获取一条Post的信息可简单的使用如下语句

SELECT p.*, pm.* FROM wp_posts p INNER JOIN wp_postmeta pm on p.ID = pm.ID;

当然, 如果我们获取WP基本表里面的信息还轮不到自己写SQL语句, 可以直接使用wp的sdk中的相关函数和类获取数据

二、谈WordPress数据库设计模式的利弊

如上文所述, 将那么多相关联的数据放到meta表里面会有什么问题呢?

  • 脏数据日益增多
  • 索引体积庞大
  • 在批量获取数据的时候Meta只能起条件作用, 不能作为行数据返回. 如果有这个需求, 那么这必然是一个效率阻碍

三、目前插件开发如何利用WP的基本数据库

目前插件开发涉及到数据库结构关系的有如下几种

  • 无需建表, 只是想储存配置信息, 那么直接使用wp_options表即可
  • 必须建表, 开发者需要自己建立一个满足需求的数据结构的表
  • 可建可不建, 部分开发者选择直接使用WP内置的表, 另外的选择自己建

从开发者的角度来讲, 自己创建一点东西总是更有满足感的, 可是综合考虑下来, 从wordpress的用户群及开发成本来考虑, 有些时候直接使用WP内置的表是一个合适的选择. 因为MySQL的读性能还是很不错的.

结语, wordpress在大多数人眼中还只是博客, 没有要求high performance. 只需要减少几个URL请求, 换一个好一点的服务器, 再加上一个网页文件缓存即可有非一般的感觉, 但是这始终是一个人或者几个人的并发压力, 不用考虑IO,内存,CPU的问题, 基本看不出问题. 了解WP的数据库设计模式可以帮助我们更好的开发, 提高开发效率, 减少抉择时间.

参考资料
1.WP官方数据库设计资料:http://codex.wordpress.org/Database_Description
2.常见的数据库设计模式:http://blog.csdn.net/ssejava/article/details/5099226
3.EAV:http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_mode

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>