领导让小菜为公司开发一个网站,功能很简单,就是要在后台能输入2种类型的内容,一种是新闻,一种是产品,前台能够分门别类展示出来。
常规思路,第0.1版,小菜的设计如下:
#新闻 CREATE TABLE news ( id int(10) PRIMARY KEY AUTO_INCREMENT, content text ); #产品 CREATE TABLE product ( id int(10) PRIMARY KEY AUTO_INCREMENT, price decimal(15,4), title text );
很快搞出来了,用得还比较顺。
不久,领导说,“产品信息中得加上规格,另外,公司的人才信息也得进行管理”。“不就是加个字段,加张表吗?”,小菜在新闻表中增加一个“规格”字段,又增加一张人才表,里面一堆人才有关的字段,增删改也不难,很快搞起,领导很满意。
不过,小菜心里还是有阴影,“总是加表加字段的,还要加代码,冗余信息越来越多。。。”。
果然,“小菜,你开发的这个项目很成功啊,隔壁老王公司看上咱们的软件了。怎么样,把它搞成产品”。“老王的需求是什么?”,小菜挠挠头。“需求?他的需求连他自己都不清楚,你搞成活的,他想发布啥就发布啥,开发抓紧点,996”。
。。(此处2个字),“尼玛,高难度哇,连发布什么内容都不知道,就要开搞。。。”。
3天,第0.9版,设计如下。
#主表,存放公共信息 CREATE TABLE posts ( id int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT, content text ); #附表(即元数据表),用于存放扩展信息 CREATE TABLE postmeta ( id int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT, post_id int(10) COMMENT '内容记录号', key text COMMENT '字段名', value text COMMENT '值' );
不再有新闻表,产品表。。。,所有的公共字段纳入“posts”这张主表中,所有的特定字段纳入“postmeta”附表中。
比如,增加一条新闻信息时,在posts表中插入一条记录,“content”字段中就放“新闻内容”,不需要用到附表。
增加一个产品时,在posts表中插入一条记录,其中“content”字段中放“产品说明”,得到插入后的记录号(假设为1000),再在postmeta表中插入一条记录如 (100, ‘价格’, ‘199元’)。
增加。。。,都这么玩。
“高!”,领导拍腿而起。
表的大一统是Wordpress的首次直立行走,是由博客向CMS进化的重要一步。从此,所有的要发布的内容均纳入主表posts和附表postmeta中,使系统具有扩展的无限可能性。
“wordpress的面貌从此焕然一新”。