基于MySQL的BBS设计(2)_MySQL
4。用户模块设计
对于底层数据库,调用mysql的C API函数来进行数据库的修改,内部保存一定的状态变量(例如用户名,还是留给上一层完成?),对上一层,则提供用户管理的接口。
Class UserManage { private: char myuserid[20]; // 用户的id,未登陆前为空 time logintime; // 用户登陆时间,并用于计算停留时间 char loginhost[20]; //上站地点。 public: int NewUser( char *userid, char *passwd ); 新建一个用户,判断是否已经有,其他资料暂时为空, firstlogintime,权限等设缺省值。 int UserLogin( char *userid, char *passwd ); 用户登陆,验证密码, int ChangePasswd( char *oldpasswd, char *newpasswd ); 修改密码,要求原密码一致。 int ChangePriData( char *newname, char *newemail, char *newaddr ); 改变基本数据,泥称,email,住址。。。。 int ModifyNumData( int addlogin, int addpost ); 修改文章数,上站次数,等数据。。。。注意调用对象。 int UserLogout(); 用户退出,修改lastlogin,staytime,loginhost等 // 普通查询命令 int QueryCommonData( const char * userid, int& loginnum, char * username, int& postnum, time& lastlogin, char *lasthost ); 查询网友基本信息。 // 特权指令,函数在完成功能前,先判断权限。 int QueryPriData( const char * userid, char *email, char *addr ); 查询基本信息,普通人只能查自己,有特权才能查其他人。 int ModifyUserLevel( BOOL isAdd, unsigned long level ); 修改用户的权限, int ModifyUserId( char *oldid, char *newid ); char *newemail, char *newaddr ); 修改用户的基本数据。 int ModifyUserNumdata( char *userid, int addlogin, int addpost ); 修改用户的文章数等数据。 int ModifyUserPasswd( char *userid, char *newpasswd ); 修改用户的密码。 }
以上各个函数难度不大,都是执行相应的sql语句,访问mysql数据库,是否将一般指令归到特权指令中去呢?权限的检查,是放在这一层还是上一层?
这更多的是看考虑的着重点,是看程序的清晰性还是代码的简练,可能还是看代码吧,毕竟要考虑访问量,另外,上层服务层是否也应该考虑权限检查问题呢?
5。版面模块设计
所谓分类,更多的是为telnet服务端考虑的,在cq66模式下,用户可以按照自己的意愿进行分类,反正最后都是直接以版为基本单位访问的。
对于版面文章的访问,存放的时候以整篇文章为参数,文章的分块由本层完成,如果上层以块为单位传送,则在上层全部传完,组合后,再传参到本层分解;在读取 的时候,本层则以块为单位访问,如果上层要以全文为单位访问,则在上层做合并 工作,本层不管。
至于要不要独立出索引,不影响上层的操作,主要和下层的数据库构造有关,主要考虑可行性,效率需求等。
权限的检查放在哪里进行呢?还是放在上层吧,其实就telnet服务器端,和cq66 的客户端,根本不会给一般用户显示特殊指令的菜单,当然,用户可以直接发送cq66 的指令,服务器方还是要检查的。但应该不用在它下面的功能模块层再检查一次吧 。
Class BoardManage { private: public: // 有关分类的操作 int GetClassNameInfo( int maxclass, char **classid, char ** classname ); 返回分类的信息,中英文名。 int GetBoardName( int maxboards, char *classid, char **boardname ); 返回某分类中的版面信息,一般分类,直接select .. from sboard where boardclass == .... 特殊分类则查相应的表。。。。 // 修改需要版面管理员以上的特权 int NewClass( char * newclassname, int type ); 新建分类,普通分类还是特殊分类, int DeleteClass( char *newclassname ); 删除分类,但不cascade,即本层不负责一致性,由上层负责将 相应的版面的分类信息改为别的。分类改名也是先删再建, int AddClassBoard( const char *classname, char *newboardname ); 将已建好的版加入某分类中,专门针对特殊分类,对一般分类,其 效果和modifyboardinfo一样, int DeleteClassBoard( const char *classname, char *boardname ); 从分类中删除某个版,也是针对特殊分类,对一般分类,效果也 是和modifyboardinfo一样,一个版的分类属性可以为空,即不属 于任何分类。 // 有关版的信息的操作。 int NewBoard( const char *boardid,char *boardname); 新建一个版,建立对应的表。其他参数取默认值。 int DeleteBoard( const char *boardid ); 删除一个版,删除对应的表。 int GetBoardInfo( const char *boardid, char *boardname, int& numposts, char *masters, char *class, long &level ); 取的版面的信息。 int ModifyBoardId( const char *oldid, char *newid ); 改变版的英文id,对应table的名称也要改变, int ModifyBoardInfo( const char *boardid, char *boardname, int numposts, char *masters, char *class, long level ); 修改版面信息,需要特权。 // 有关版面文章的操作。 int AddText( char *boardid, char *title, char *writer, char *text ); 往版面中增加文章,内部将长文章分割成2k的块。 int DeleteText( char *boardid, int num ); 删除文章,只是做一个标记,并不立刻修改对应的table。 int FlushTable( char *boardid ); 刷新版面,删除被删文章的对应的记录。 int MarkText( char *boardid, int num, char mark ); 给文章做标记。 int ModifyTitle( char *boardid, int num, char *newtitle ); 修改文章的标题。 int ModifyText( char *boardid, int num, char *newtext ); 修改文章内容,不是自己的文章需要特权。 int GetTextInfo( const char *boardid, int num, char *title, char *writer, char& mark ); 取得文章的标题信息。 int GetText( const char *boardid, int num, int block, char *text ); 读取文章的内容,以块为单位。 // 文章和作者的查询 // 一次将查询的结果全部返回? int QueryWriter( const char *boardid, char *writer, char **result ); 查询版面上,某作者的文章。 int QueryTitle( const char *boardid, char *title, char **result ); 查询版面上,标题中包含指定内容的文章。 }bitsCN.com
以上就是基于MySQL的BBS设计(2)_MySQL的内容,更多相关内容请关注PHP中文网(www.php.cn)!

InnoDBBufferPool通过缓存数据和索引页来减少磁盘I/O,提升数据库性能。其工作原理包括:1.数据读取:从BufferPool中读取数据;2.数据写入:修改数据后写入BufferPool并定期刷新到磁盘;3.缓存管理:使用LRU算法管理缓存页;4.预读机制:提前加载相邻数据页。通过调整BufferPool大小和使用多个实例,可以优化数据库性能。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。 MySQL以其高性能、可扩展性和跨平台支持着称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL值得学习,因为它是强大的开源数据库管理系统,适用于数据存储、管理和分析。1)MySQL是关系型数据库,使用SQL操作数据,适合结构化数据管理。2)SQL语言是与MySQL交互的关键,支持CRUD操作。3)MySQL的工作原理包括客户端/服务器架构、存储引擎和查询优化器。4)基本用法包括创建数据库和表,高级用法涉及使用JOIN连接表。5)常见错误包括语法错误和权限问题,调试技巧包括检查语法和使用EXPLAIN命令。6)性能优化涉及使用索引、优化SQL语句和定期维护数据库。

MySQL适合初学者学习数据库技能。1.安装MySQL服务器和客户端工具。2.理解基本SQL查询,如SELECT。3.掌握数据操作:创建表、插入、更新、删除数据。4.学习高级技巧:子查询和窗口函数。5.调试和优化:检查语法、使用索引、避免SELECT*,并使用LIMIT。

MySQL通过表结构和SQL查询高效管理结构化数据,并通过外键实现表间关系。1.创建表时定义数据格式和类型。2.使用外键建立表间关系。3.通过索引和查询优化提高性能。4.定期备份和监控数据库确保数据安全和性能优化。

MySQL是一个开源的关系型数据库管理系统,广泛应用于Web开发。它的关键特性包括:1.支持多种存储引擎,如InnoDB和MyISAM,适用于不同场景;2.提供主从复制功能,利于负载均衡和数据备份;3.通过查询优化和索引使用提高查询效率。

SQL用于与MySQL数据库交互,实现数据的增、删、改、查及数据库设计。1)SQL通过SELECT、INSERT、UPDATE、DELETE语句进行数据操作;2)使用CREATE、ALTER、DROP语句进行数据库设计和管理;3)复杂查询和数据分析通过SQL实现,提升业务决策效率。

MySQL的基本操作包括创建数据库、表格,及使用SQL进行数据的CRUD操作。1.创建数据库:CREATEDATABASEmy_first_db;2.创建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入数据:INSERTINTObooks(title,author,published_year)VA


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境