大话wordpress之数据库设计

WordPress中单站点时,只有11张表,表关系相对简单,重点是理解 wp_posts、wp_taxonomy、wp_terms、wp_term_relationships 这4张表之间的关系。

wp

 

  • wp_posts: 用于保存所有 post(如文章、页面、菜单项、版本记录、多媒体、及所有自定义的 post)数据。
  • wp_postmeta: 用于保存 post 元数据,如自定义字段。
  • wp_comments: 用于保存评论。
  • wp_commentmeta: 用于保存评论元数据。
  • wp_users:用于保存用户信息,如email、密码等。
  • wp_usermeta:用于保存用户元数据,如姓、名、昵称、级别等。
  • wp_options: 用于保存站点相关的设计, 如插件选项、哪些激活插件、当前使用的是哪个主题、…
  • wp_terms: 用于保存类目词条。
  • wp_term_relationships:wp_posts 与 wp_term_taxnomy 的关系表。
  • wp_term_taxonomy:用于表示 wp_terms 与 taxonomy(内存表) 之间的关系。
  • wp_links: 此表已废弃。

 

wp_database_uml

 

什么叫元数据(metadata)?

举例说明,考虑用户都会有用户名、email这些字段,所以设计 wp_users这张表包含这些字段。

但是,某天来了用户A,他有支付宝的一堆信息,怎么把这些信息也保存在用户信息中呢?最简单的办法是扩展 wp_users 的字段,于是加上支付宝账号、余额等一堆字段;某天又来了用户B,他有微信的一堆信息,于是又改表结构,增加微信号、微信昵称等一堆字段。但这就存在数据冗余,因为A本没有微信信息,这些字段对A而言纯属多余。所以加字段这个方法太死,行不通。

另外一种方法是,增加一张表 wp_usermeta,主要设3个字段user_id,meta_key,meta_value。

来了用户A, 先在主表 wp_users 中插入一条记录,得到用户A的id(假设100),然后在wp_usermeta 表中插入2条记录:
(100、 ‘支付宝账号’、’mayun@taobao’)
(100、 ‘支付宝姓名’、’mayun’)

来了用户B, 先在主表 wp_users 中插入一条记录,得到用户B的id(假设200),然后在wp_usermeta 表中插入2条记录:
(200、 ‘微信号’、’weixin’)
(200、 ‘微信昵称’、’xiaoma’)

这种字段为 “记录号-属性-值” (或称 EAV,entity-attribute-value)的表就叫元数据表(或称meta表),表中的数据就叫元数据。wp_postmeta、wp_commentmeta、wp_usermeta 表中记录结构都是 “记录号-属性-值”, 它们都是元数据表。

总之,记住 “记录号-属性-值”这种表结构,它在数据库设计实践中非常有用,它的优势是灵活,缺点是数据库查询效率低,有数据冗余。

 

 

发表评论

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