分析论坛数据库设计&分析

1,数据库设计

论坛数据库设计还是挺有意思的,按照业务逻辑进行拆分的数据库设计。

首先,如果是一个博客就一个post表记可以了。然后考虑到论坛数据量比较大,所以在设计上有优化。

论坛把数据库分成3个数据表,这样在访问不同页面的时候都查询很快。

数据库表参考discuz 数据库设计:

只是挑了些相关字段,没有把所有字段列出了。

--论坛板块表
CREATE TABLE forum (
  fid mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` char(50) NOT NULL DEFAULT ‘‘,
  `status` tinyint(1) NOT NULL DEFAULT ‘0‘,

  threads mediumint(8) unsigned NOT NULL DEFAULT ‘0‘,
  posts mediumint(8) unsigned NOT NULL DEFAULT ‘0‘,
  todayposts mediumint(8) unsigned NOT NULL DEFAULT ‘0‘,

  PRIMARY KEY (fid)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

--论坛帖子
CREATE TABLE `thread` (
  `tid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `fid` mediumint(8) unsigned NOT NULL DEFAULT ‘0‘,

  `author` char(15) NOT NULL DEFAULT ‘‘,
  `authorid` mediumint(8) unsigned NOT NULL DEFAULT ‘0‘,

  `subject` char(80) NOT NULL DEFAULT ‘‘,
  `dateline` int(10) unsigned NOT NULL DEFAULT ‘0‘,

  `views` int(10) unsigned NOT NULL DEFAULT ‘0‘,
  `replies` mediumint(8) unsigned NOT NULL DEFAULT ‘0‘,

  `attachment` tinyint(1) NOT NULL DEFAULT ‘0‘,

  `closed` mediumint(8) unsigned NOT NULL DEFAULT ‘0‘,
  `status` smallint(6) unsigned NOT NULL DEFAULT ‘0‘,

  PRIMARY KEY (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--论坛帖子内容
CREATE TABLE post (
  pid int(10) unsigned NOT NULL AUTO_INCREMENT,
  fid mediumint(8) unsigned NOT NULL DEFAULT ‘0‘,
  tid mediumint(8) unsigned NOT NULL DEFAULT ‘0‘,
  `first` tinyint(1) NOT NULL DEFAULT ‘0‘,

  author varchar(15) NOT NULL DEFAULT ‘‘,
  authorid mediumint(8) unsigned NOT NULL DEFAULT ‘0‘,

  `subject` varchar(80) NOT NULL DEFAULT ‘‘,
  dateline int(10) unsigned NOT NULL DEFAULT ‘0‘,

  message mediumtext NOT NULL,
  useip varchar(15) NOT NULL DEFAULT ‘‘

  PRIMARY KEY (tid,pid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2,具体分析

从页面来分析,按照用户访问路径分析。

首先用户访问论坛主页,这个地方会直接查询forum表。

里面保存了论坛板块信息,主题数量,帖子数量。

比如一个骑行网站论坛:http://www.517318.com/ (随便找的)

考虑到效率,在forum表中存储了一些冗余信息,计数的信息直接记录到了这张表里面。

然后进入主题页面

这里查询了下thread表,thread表也做了数据冗余。

当用户发帖的适合会创建一个thread表,只存标题数量,再创建一个post表,post里具体的内容。

如果是发帖,则thread表和post表都插入数据。

如果是回帖,则只记录post表同时,同时记录thread id。

只有第一个是发帖,其他的都是回帖。

3,总结

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/47343257 未经博主允许不得转载。

论坛数据库设计通过3张表,分开放不同数据,得到3种页面查询速度都很快。

这对于我们的系统设计很有启发,类似的情况还有博客数据库设计。

把博客的标题存成一张表,博客的内容存成一张表,数据分开后,两种情况查询都得到优化。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 04:13:56

分析论坛数据库设计&分析的相关文章

数据库设计案例分析

一.树型关系的数据表 不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类,某些子类又有子类这样的情况.当类别不确定,用户希望可以在任意类别下添加新的子类,或者删除某个类别和其下的所有子类,而且预计以后其数量会逐步增长,此时我们就会考虑用一个数据表来保存这些数据.按照教科书上的教导,第二类程序员大概会设计出类似这样的数据表结构: 类别表_1(Type_table_1) 名称 类型 约束条件 说明 type_id      int        无

对于学生选课和成绩管理系统数据库设计的分析

额数据库是啥呢 数据库是存储在计算机上的有组织可共享的大量数据的集合 那么我们应当解决两个问题 第一怎么存 第二存什么 第三如何取 第四如何更新 那么设计什么样的数据结构跟实现什么样的功能是密切相关的 那么看到标题就可以想到是学生选课和学生成绩管理 那么最基础的肯定要有学生,课程,成绩 这三种数据对象 如果有大量的数据实例我们都可以分到这几种数据对象里 那么首先我们要分析学生与课程的关系是选与被选.. 那么这里就有一个基础的问题了通过学生一个实例我们怎么知道他选了哪些课程呢 图论里我们知道如果一

数据仓库数据库设计方法---关系模型和多维模型比较分析

数据仓库中广泛采用的数据库设计模型有两种:关系型和多维型.普遍认为在数据仓库的设计方法中关系模型是“Inmon”方法而多维模型是“Kimball”方法. 先来看下关系模型,关系型数据以一种称为“标准化”的形式存在.数据标准化是指数据库设计会使数据分解成非常低的粒度级,标准化数据以一种孤立模式 存在,这种情况下对数据表里的数据关系要求很严格.一般遵循3NF范式.采用关系型设计的数据库一般具有较强的灵活性和多功能性(可以支持数据的多种视 图). 再来看下多维模型,多维模型一般有星型模式.雪花模式.混

SQL Serever学习17——数据库的分析和设计

数据库的分析和设计 设计数据库确定一个合适的数据模型,满足3个要求: 符合用户需求,包含用户所需的所有数据 能被数据库管理系统实现,如sqlserver,oracle,db2 具有比较高质量,容易理解,使用方便,便于维护,效率高 设计步骤分为6步: 需求分析,与用户沟通,达成统一意见 概念结构设计,创建E-R图 逻辑结构设计,从E-R图转为关系模型,1对多,多对多,建立数据模型,数据库三范式 物理结构设计,确定数据类型,是否可空,确定主键,外键,索引 数据库实施 数据库运行维护 数据库的三范式:

关于论坛数据库的设计(分表分库等-转)

关于论坛数据库的设计 文章分类:数据库 一个简单的论坛系统 1:包含下列信息: 2:每天论坛访问量300万左右,更新帖子10万左右. 请给出数据库表结构设计,并结合范式简要说明设计思路. 一. 发帖主题和回复信息存放在一张表,并在这个表中增加user_name字段 对数据库的操作而言,检索数据的性能基本不会对数据造成很大的影响(精确查找的情况下),而对表与表之间的连接却会产生巨大的影响, 特别在有巨量数据的表之间:因此对问题的定位基本可以确定:在显示和检索数据时,尽量减少数据库的连接以及表与表之

深入浅出分析MySQL索引设计背后的数据结构

在我们公司的DB规范中,明确规定: 1.建表语句必须明确指定主键 2.无特殊情况,主键必须单调递增 对于这项规定,很多研发小伙伴不理解.本文就来深入简出地分析MySQL索引设计背后的数据结构和算法,从而可以帮你释疑如下问题: 1.为什么innodb表需要主键? 2.为什么建议innodb表主键是单调递增? 3.为什么不建议innodb表主键设置过长? B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.B通常

社交网数据库技术分析(转)

Normal 0 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 原文:http://blog.csdn.net/ding_yiming/article/details/5603067 社交网 现在,传统的互联网正在迈向一个一个全新的时代 ---- 社交服务网时代( Social Networking Service ),从“人与机器”的时代迈向“人与人”的时代.互联网社交服务网站的发展验证了“六度分隔理论”( Si

阿里巴巴下一代云分析型数据库AnalyticDB入选Forrester Wave? 云数仓评估报告

摘要: 近期, 全球权威IT咨询机构Forrester发布"The Forrester WaveTM: CloudData Warehouse Q4 2018"研究报告,阿里巴巴分析型数据库(AnalyticDB)成功入选 !AnalyticDB作为阿里巴巴自主研发的PB级实时云数据仓库,全面兼容MySQL协议以及SQL:2003 语法标准,可以毫秒级针对万亿级数据进行即时的多维分析透视和业务探索,帮客户将整个数据分析和价值化从传统的离线分析带到下一代的在线实时分析模式. 前言近期,

PostgreSQL数据库内核分析 笔记(这本书没有怎么很好的看,主要就是一些数据结构、概念和流程的文字介绍)

PostgreSQL数据库内核分析 跳转至: 导航. 搜索 目录 1系统概述 2体系结构 3存储管理 4索引 5查询编译 6查询执行 7事务处理与并发控制 8数据库安全 9附录A 用Eclipse开发和调试 系统概述 初始化数据库:./initdb --no-locale -D ../data ./pg_ctl start -D ../data 数据库命令:initdb createuser dropuser createdb dropdb pg_dump pg_restore pg_ctl v