基于mysql的bbs设计(二)

  •   2009-08-01/08:10
  • 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
      // 是必然的。删除也是先做个标记。

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

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多