zenglcms无论是mysql数据库类型还是sqlite数据库类型,数据库的表结构都是一致的。数据库表是通过common_fun目录下的db_class.php的db类来创建的。数据库的表结构如下:  ...
zenglcms无论是mysql数据库类型还是sqlite数据库类型,数据库的表结构都是一致的。数据库表是通过common_fun目录下的db_class.php的db类来创建的。数据库的表结构如下:
其中zengl_archives表("zengl_"是安装时设置的数据库表前缀)是和附件相关的表,其中包括archive_ID附件记录的主键id,title 附件的名称,path 附件的路径 ,smimgpath 附件的缩略图路径 ,time 附件添加时间的unix时间戳 ,userID 附件所属用户的用户id ,permis 用户权限控制字段 ,该字段里存放的是序列化过的PHP数组,数组里存放着用于控制某用户是否具有编辑,删除附件等权限的信息。
zengl_articles表是存放文章数据的表。包括articleID文章记录的主键id,title文章的标题字段, author文章的作者字段, time文章添加和修改时间的unix时间戳字段,content文章的内容字段,descript文章的描述(简介)字段,smimgpath文章的缩略图路径字段,scansCount文章访问次数字段,sec_ID所属栏目的栏目ID字段,userID所属用户的用户ID字段,permis控制用户操作权限字段。
zengl_comment表则是存放文章的评论数据的表,包括comment_ID评论的主键ID,username发表评论时所填写的昵称,showtime显示时间(因为当某篇评论有回复时,就会更新此字段,然后可以根据此字段进行排序,比按发表时间进行排序更合理),time评论的发表时间字段,content评论的内容字段,articleID评论所属文章的主键ID(任何评论都是针对某篇文章的),uid发表评论的用户主键ID(如果为0则表明是游客),ip_address评论的来源IP,permis控制用户是否有操作管理评论的权限。
zengl_commentreply表用于存放评论的回复信息,包括reply_ID回复的主键ID,username发表回复时所填写的昵称,time回复的发表时间,content具体的回复内容,commentID回复所对应的评论ID,uid发表回复的用户ID(如果为0则表明是游客),ip_address发表回复的来源IP,permis控制用户是否具有管理回复的权限。
zengl_level用于存放用户组信息的表,包括levelID用户组的主键ID,levelname用户组的名称,permission用户组所拥有的权限,权限信息是以序列化的PHP数组的形式存放在表中的。虽然数据库在初始化的时候默认添加了四个组:系统管理员,高级用户,中级用户,初级注册用户,但是在实际的程序中只用到了系统管理员和初级注册用户两个组,另外两个组留作以后扩展。
zengl_section表是用于存放栏目信息的。其中包括sec_ID栏目的主键ID,sec_name栏目的名称,sec_dirname是存放该栏目html静态文件的目录名,sec_parent_ID该栏目所属父栏目的栏目ID,sec_content如果该栏目下面含有子栏目,则将子栏目的栏目ID以逗号连接存储到该字段(栏目ID的先后顺序决定了栏目在菜单中的前后顺序)。sec_weights栏目的权重值(在首页中布置栏目块时,权重值高的排在前面),permis用于控制用户对某栏目的管理权限。
zengl_tags用于存放文章的tag标签数据,其中包括tag_ID标签的主键ID,tag_name标签的名称,time时间字段(暂时没用到),count标签计数器(统计有多少篇文章包含该标签),articles将所有包含此标签的文章ID以逗号连接并存放到该字段。
zengl_user用于存放用户信息的表,其中包括userID用户的主键ID,username用户名,password用户密码(用户密码是实际的密码加上安装时生成的随机的密码掩码,再通过md5进行加密的,所以config.inc.php里的db_pass_suffix随机密码掩码很重要,一旦丢失就无法验证用户的密码了),regtime用户的注册时间的unix时间戳格式,lastlogtime最后登录时间(目前暂未投入使用,其值和注册时间一样),level用户所属的用户组ID,permis用户所具有的权限(当permis为空时,自动继承所属组的权限信息)。
db_class.php中在create_tables方法创建所有的表结构时,是通过sql类的createTable方法依次创建各个表结构的,例如:
..................................... //省略N行代码
if($this->sql == null)
$this->sql = new sql('utf8'); //初始化sql类
$sql = &$this->sql;
if ($sql->db_type == MYSQL) //对MYSQL类型的数据库的处理
{
$sql->createTable('articles',
'articleID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(articleID),
title tinytext,
author varchar(30),
time int,
content mediumtext,
descript mediumtext,
smimgpath mediumtext,
scansCount int,
sec_ID int,
userID int,
permis mediumtext', true); //通过createTable方法创建articles文章表。
if ($sql->err == SQL_SUCCESS)
echo "创建表: $db_tables_prefix".'articles 成功!
';
flush_buffers();
..................................... //省略N行代码
上面介绍了CMS系统的数据库表结构和创建原理,其实一个小型的个人 网 站并不需要像dedecms或destoon那样有上百的数据库表,destoon之所以有上百个表是因为B2B电子商务除了资讯模块外,还有商城,供应 等模块,所以表的结构就比较复杂,对于一般的博客性质的网站,8到10个表结构就足够了。
OK,休息,休息一下,O(∩_∩)O~