数据库,作为一个论坛的核心部分,有必要首先重点分析一下,Asp.Net Forums2.0的数据库是设计的非常棒的,从中我们也可以学到不少东西,大家可以在安装目录下的docs目录内找到Data Model.vsd,表结构和表间关系一目了然。如图:
大家可以看到Asp.Net Forums2.0的表命名基本都是以“forums_”开头,这样很容易和其他系统的表分辨开来。
其中一些数据量大的表分离成多个,例如:将帖子的相关信息和用户资料都变成了两个表:保存帖子信息的表forums_Posts,从中单独提取出来了(forums_Threads表),用来专门保存主题相关信息;还有用户信息也由两个表来保存forums_Users和forums_UserProfile,这样
可以适当提高了检索效率
在字段设置方面:一般枚举变量所在字段都是用的smallint,布尔值用bit,只有三种情况的枚举用tinyint,基本都是ntext,nvarchar,很少用varchar
注意forums_UserProfile表中有一个字段:StringNameValues(varbinary
7500),因为用户资料表不像其他表,字段变化比较大,例如我们需要在原来基础上想加上用户的QQ信息,如果按照常规方法,那么我们需要增加一个字段,而现在利用StringNameValues(varbinary
7500)字段,我们可以把所有符合以下条件的属性全部放到这个字段中,这样不管我们需要给用户资料增加什么属性,都不需要去更改表结构:
1. 不需要用来被检索和作为检索条件的信息
2. 不需要直接在数据库中看到的信息
3. 内容不太大的信息
具体实现的方法在后面会有详细的叙述!
接下来将对每个表和字段的作用作一个详细的说明:
表名:[forums_Users]
描述:保存所有用户信息 |
| 字段名 |
描述 |
| UserID |
用户ID,唯一标志一条用户纪录 |
| UserName |
用户名 |
| Password |
密码 |
| PasswordFormat |
密码加密方式 |
| Salt |
盐,一串随机数,辅助加密用 |
| PasswordQuestion |
密码问题 |
| PasswordAnswer |
密码答案 |
| Email |
真实信箱地址,用来接收密码及论坛相关邮件,不对外公开 |
| DateCreated |
注册日期 |
| LastLogin |
最后一次登陆时间 |
| LastActivity |
最后一次活动时间——有别于LastLogin,因为有的用户选择了记住密码,所以不需要登陆 |
| LastAction |
最后一次动作是什么,例如:发表帖子、浏览帖子、查看某人资料 |
| UserAccountStatus |
当前用户状态,例如:帐号未审核,帐号被禁用 |
| IsAnonymous |
是否匿名帐户,因为有的板块可以设置为匿名用户可以发帖,所以有一个帐号专门用作匿名帐号。 |
| ForceLogin |
是否禁止登陆,管理员可以设置不让某个用户登录。 |
| AppUserToken |
|
(时间关系,这部分内容慢慢完善,预计一天几个表,一两个星期就都完了)