基于mysql的bbs设计(二)

3。数据库设计
  关键还是mysql的效率问题,合理分配mysql的内存,特别是table cache的
大小。另外,当系统突然掉电呢?mysql是否robust?
  table的名字设计,采用一位前缀表明类型,全部用小写表示(?),例如:
系统的数据库,以s为前导,如用户表:suser(sUSER 呢?),具体如下:
  s :系统表,suser,sclass
  m :用户信件表,msysop,mdrangon
  w :用户消息表,wsysop,wdrangon
  a :版面索引表,alinux,acampus
  b :版面文章表,blinux,bcampus
  c :特殊分类版面表,cnewboard
  i :精华区索引表,ilinux,ilinux01,icampus,icampus04
  j :精华区文章表,jlinux,jcampus,

另外,是使用字串还是数字作为标识呢?例如,一个叫sysop的帐号,其
id是1,他的信的表是msysop还是m00001呢?同样,一个叫campus的版,对应的
代码是5,则这个版的文章的表名是bcampus还是b00005呢?可能用字串会容易
理解,查错吧。

用户信息表:suser
  usernum int unique, // 唯一标识符,最多30000个帐号,会不会太少了?
  userid char[20] primary key, // 排序的关键字,id,全小写。
  passwd char[20], // 密码,存放加密后的密文。
  realid char[20], // 实际id,大小写混合。
  username  char[24], // 用户的泥称
  userlevel  longint,  // 64种权限?
  numlogins  int,
  numposts  int,
  firstlogin time,
  lastlogin  time,
  staytime  time,    /* 总共停留时间 */
  lasthost  char[32],
  email    varchar[100],
  address   varchar[100],
  // 还需要其他数据吗?是否需要留出一定的保留值,以后alter table来
  // 增加新的字段时,效率如何?

版面分类表:sclass
  classnum  int unique, // 分类标识
  classid   char[20],  // 分类的英文id:computer
  classname  varchar[100],// 分类的中文描述:电脑世界
  classtable char[20],  // 特殊分类对应的版面表
  // 一般来说,每个版面只属于一个分类,对于特殊分类,例如拳头版块,
  // 新版面,可以用专门的表来描述

版面表:sboard
  boardnum  int unique,   // 版面的标识(需要吗?)
  boardid   char[20],    // 版面的英文名
  boardname  varchar[100],  // 版面的中文名
  boardclass char[20],    // 版面所属分类
  boardsysop varchar[100],  // 斑竹名单
  boardposts int,      // 版面的文章数
  boardlevel int,      // 版面的读写权限
  indextable char[20],    // 版面对应的索引表的名称:aboardid?
  texttable  char[20],    // 版面对应的文章表名称:  bboardid?
  // 最后两项有没有必要出现,是否可以作为必然对应关系,还是允许
  // 出现更大的灵活性?另外版面的大小写问题是否可以直接默认
  // 只开头字母大写,

特殊分类版面表:snewboard, sstarboard
  boardid   char[20],  // 版面的id
  // 这样的表有必要吗?

版面索引表:acampus,alinux,afootball。。。。。。
  id   int,      // 文章序数,要手动调整????
  mark  char[1],    // 文章标记,m,g,b,d。。。。
  title  varchar[100],  // 文章标题
  writer char[20],    // 文章作者id
  posttime time,     // 发表时间
  textnum  longint,   // 对应的编号???不调整

版面文章表
  textnum   longint,  // 文章编号?
  textword  text,    // 文章内容?
  // 有必要将索引和文章内容分开吗?从效率上看,况且lazy flush
  // 是必然的。删除也是先做个标记。

// 用户中的版面文章是否未读的数据比较繁,是否应该再建一堆的表
  // 才能实现呢?
  // 投票功能暂不考虑。。。。

(0)

相关推荐

  • 基于mysql的bbs设计(二)

    3.数据库设计   关键还是mysql的效率问题,合理分配mysql的内存,特别是table cache的 大小.另外,当系统突然掉电呢?mysql是否robust?   table的名字设计,采用一位前缀表明类型,全部用小写表示(?),例如: 系统的数据库,以s为前导,如用户表:suser(sUSER 呢?),具体如下:   s :系统表,suser,sclass   m :用户信件表,msysop,mdrangon   w :用户消息表,wsysop,wdrangon   a :版面索引表,

  • 基于mysql的bbs设计(一)

    1.系统架构:   采用模块化思想,分为3层:   a.数据存储层:使用mysql来存放bbs的所有数据,包括用户信息,     文章数据,用户信件,用户消息,系统数据(?),关键问题:     数据库的规划,是否用文件来辅助.   b.系统功能层:完成bbs的基本功能,由多个并列模块组成,向下     调用mysql的函数访问数据库,向上,接受处理请求,将处理的     结果返回上层,根据请求类型,返回成败结果和其他数据.而且     模块高度灵活,可以方便的修改增加.包括:     ** 用

  • 基于mysql的bbs设计(三)

    4.用户模块设计   对于底层数据库,调用mysql的C API函数来进行数据库的修改,内部保存 一定的状态变量(例如用户名,还是留给上一层完成?),对上一层,则提供 用户管理的接口.   Class UserManage {   private:     char  myuserid[20]; // 用户的id,未登陆前为空     time  logintime; // 用户登陆时间,并用于计算停留时间     char  loginhost[20]; //上站地点. public:    

  • 基于mysql的bbs设计(四)

    5.版面模块设计   所谓分类,更多的是为telnet服务端考虑的,在cq66模式下,用户可以按 照自己的意愿进行分类,反正最后都是直接以版为基本单位访问的.   对于版面文章的访问,存放的时候以整篇文章为参数,文章的分块由本层 完成,如果上层以块为单位传送,则在上层全部传完,组合后,再传参到本层 分解:在读取 的时候,本层则以块为单位访问,如果上层要以全文为单位访问 ,则在上层做合并 工作,本层不管.   至于要不要独立出索引,不影响上层的操作,主要和下层的数据库构造有 关, 主要考虑可行性,

  • 基于mysql的bbs设计(五)

    6.bbsd和cq66服务器端改造   bbsd中,关于用户的模块应该比较好改,只要将写.PASSWD文件的操作换为 操作数据库的UserManage类的成员函数即可,但可能要先判断什么数据更改, 要调用哪个函数.并发操作的一致性,则由数据库的加锁功能保证,mysql应该 支持这种的锁吧.文章方面可能比较麻烦,也是将原来对文件的操作转换成操作 数据库的BoardManage类的成员函数即可.   cq66模式应该比较好改动,可能就是原来取文章的协议要变化一下.取文章 标题的时候,同时也将文章的长

  • MySQL 可扩展设计的基本原则

    前言 随着信息量的飞速增加,硬件设备的发展已经慢慢的无法跟上应用系统对处理能力的要求了.此时,我们如何来解决系统对性能的要求? 只有一个办法,那就是通过改造系统的架构体系,提升系统的扩展能力,通过组合多个低处理能力的硬件设备来达到一个高处理能力的系统,也就是说,我们必须进行可扩展设计. 一.什么是可扩展性 在讨论可扩展性之前,可能很多朋有会问:常听人说起某某网站某某系统在可扩展性方面设计的如何如何好,架构如何如何出色,到底什么是扩展?怎样算是可扩展?什么又是可扩展性呢?其实也就是大家常听到的 S

  • Mysql使用简单教程(二)

    接上文Linux系统下Mysql使用简单教程(一) 字段参数以"(字段名1 数据类型1,字段名2 数据类型2,......)"的形式构建. 关于mysql常用的数据类型,一下是比较常用的几种,想查阅比较详细的资料可以自寻去网上搜寻. ------------------------------------------------------- 类型 说明 CHAR 1~255个字符的定长串,它的长度必须在创建时指定,否则MySQL假定为CHAR(1) VARCHAR 可变长度,最多不超

  • 浅谈mysql的索引设计原则以及常见索引的区别

    索引定义:是一个单独的,存储在磁盘上的数据库结构,其包含着对数据表里所有记录的引用指针. 数据库索引的设计原则: 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引. 那么索引设计原则又是怎样的? 1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录. 例如,学生表中学号是具有唯一性的字段.为该字段建立唯一性索引可以很快的确定某个学生的信息. 如果使用姓名的话,可能存在同名现象,从而降低查询速度. 2.为经常需要排序.分组和联合操

  • 详解MySQL性能优化(二)

    接着上一篇学习:http://www.jb51.net/article/70528.htm 七.MySQL数据库Schema设计的性能优化 高效的模型设计 适度冗余-让Query尽两减少Join 大字段垂直分拆-summary表优化 大表水平分拆-基于类型的分拆优化 统计表-准实时优化 合适的数据类型 时间存储格式总类并不是太多,我们常用的主要就是DATETIME,DATE和TIMESTAMP这三种了.从存储空间来看TIMESTAMP最少,四个字节,而其他两种数据类型都是八个字节,多了一倍.而T

  • c++ 基于opencv 识别、定位二维码

    前言 因工作需要,需要定位图片中的二维码:我遂查阅了相关资料,也学习了opencv开源库.通过一番努力,终于很好的实现了二维码定位.本文将讲解如何使用opencv定位二维码. 定位二维码不仅仅是为了识别二维码:还可以通过二维码对图像进行水平纠正以及相邻区域定位.定位二维码,不仅需要图像处理相关知识,还需要分析二维码的特性,本文先从二维码的特性讲起. 1 二维码特性 二维码在设计之初就考虑到了识别问题,所以二维码有一些特征是非常明显的. 二维码有三个"回""字形图案,这一点非常

随机推荐