| ASP.NET 开发实例之博客系统(一) |
| 昊天 |
|
《软件报》2008年17期 邮发代号:61-74
篇首语
在当今主流的动态网页开发技术中,作为后来者的ASP.NET,凭借.Net平台的强大支撑和开发工具Visual Studio的辅助,在短短几年时间里,成为了动态网页开发技术中的超级明星。于是,很多在校学生以及非专业的开发人员都将ASP.NET作为自己学习动态网页开发技术的首选。与专业的开发人员相比,这部分人由于平时缺乏实战机会,在学习掌握ASP.Net的过程中,基本上停留在简单模块开发的水平,对于ASP.NET各项技术的综合应用以及应用程序整体性开发都不甚了解。考虑到这部分读者的需要,从本期开始,本报将组织一系列ASP.NET的开发实例文章,从设计到实现,全方位介绍ASP.NET的综合应用。也欢迎广大读者来信点播你希望了解的ASP.NET开发实例。
第一篇 数据库设计
一、 数据库应用程序的选择
在确定应用程序的功能之后,紧接着需要考虑的就是数据库应用程序的选择问题。可能有些朋友对于这个问题不是很理解,觉得数据库应用程序有什么好选的,哪个好用就用哪个呗。其实不然,举例来说:假设现在开发的博客系统仅限于一个办公室或者一个寝室的人使用,该选择哪个数据库应用程序呢?
因为用户数不大,所以选择Access还是SQL Server都没问题。也就是说咋看之下,的确没什么好选择的。但是,如果往深层次想就没这么简单了。
a) 在ASP.NET中,如果要操作Access数据库,我们需要用到System.Data.Oledb命名空间下的数据对象,如果是SQL Server数据库,使用的则是System.Data.SqlClient命名空间。由于System.Data.Oledb命名空间下的数据对象是针对多种数据源设计的,而System.Data.SqlClient则只适用于SQL Server,并针对SQL Server做了进一步的优化,仅仅从这个层面我们就可以发现两者在性能上的差异。
b) 同样是SQL Server,也存在7.0、2000、2005等多个版本,在这些版本之间又该如何选择呢?首先需要考虑的是投资,也就是说如果已经花钱买了某个版本的SQL Server,那么在不需要某个版本的特定功能时,则应该在现有版本的SQL Server上开发应用程序;如果现在没有购买SQL Server,也不准备购买,那么就只能在SQL Server 2000和SQL Server 2005之间选择了,因为这两个版本的SQL Server都提供了免费的版本,但是由于SQL Server 2000的免费版没有提供相应的图形化选择工具,考虑到开发的便利,这时就应该选择SQL Server 2005。另外,如果开发好的系统最终是要托管到第三方的,那么就需要考虑托管方当前提供的数据库应用程序的版本和托管的费用。要是什么都不考虑,从技术先进性的角度选,自然是最新版本的SQL Server 2005了。
c) 除了上面提到的这些,其他还包括大家熟知的数据库应用程序的功能、性能、安全性等多项内容,这些内容相信大家都已经非常了解了,即使不了解也可以在网上搜到,这里就不赘述了。
总之,在选择数据库应用程序时,千万不要掉以轻心,尽量从多个角度去看待这个问题,不然很有可能在设计开发阶段没什么问题,一旦开始部署,什么稀奇古怪的问题都出来了。那时候再来解决,花费的时间和精力就大了。
本文将要开发的博客系统虽然没什么限制,但是考虑到可能有读者会在此基础上开发出实际使用的产品,再加上本系列文章的重点还是具体的技术实现,最终选择的是SQL Server 2005。
注:文中提到的几点仅仅给大家提供了一种思路,大家在应用时还是需要对照自己的实际情况,按上述思路做一个系统全面的分析。
二、 数据库结构设计
依照博客系统的功能分析,我们可以将博客系统数据库中的所有数据表分成以下几类:用户数据表、博客记录表、系统配置表。
a) 用户数据表
一个典型的博客系统通常会将用户分成几种级别。如普通用户、高级用户、付费用户、系统管理员,然后根据用户级别的不同,赋予用户不同的功能,如空间大小的限制差异或者是否开放某项特殊的功能。根据这种特点,设计好的用户数据表会包括以下内容:
Users表:记录用户的基本信息,包括登录名、密码、昵称、Email等信息;
UserSetting表:记录每个用户的配置参数。如博客名称、每页显示的记录数等内容;
Roles表:存储角色信息,即用户级别;
UserInRoles表:记录用户关联的角色信息;
在上面几张表中,需要特别说明的是UserInRoles表和UserSetting表的设计原则。
UserInRoles表只有两个字段:UserID和RoleID,分别表示用户ID和角色ID,分别与Users表和Roles表建立外键关系。由于某个用户可以属于多个角色,而某个角色可以适用于多个用户,UserInRoles实际上表示的是一种多对多的关系。在建立主键时,需要考虑上述特点,因此需要以UserID和RoleID字段的组合作为主键。即一个用户不可能和同一个角色建立两次相同的关联。
UserSetting表则代表另外一种情况。从简单实现角度考虑,UserSetting表的结构应该跟需要设置的参数数量相对应,即假设有十个设置参数,那么UserSetting表的结构应该是11个字段:UserID和十个跟参数对应的字段。这种设计在功能上没有任何问题,但是如果今后需要调整参数的数量,那么每次都需要对数据表的结构进行修改,而这样的方式显示是比较危险的。因此,本文在处理同样的问题时,对UserSetting表的设计采用了另外一种方法。
UserSetting表只有三个字段:UserID、SettingName和SettingValue。其中,UserID记录用户的唯一标识、SettingName记录配置参数的名称、SettingValue记录和名称对应的值。也就是说,仍然是上面这种情况,在UserSetting表中就会存在十条记录,虽然记录数增加了,但是更便于以后扩展。这种方式在数据库设计中是比较常见的,也就是说以空间换取了实现上的灵活性。
b) 博客记录表
作为博客系统的主要数据集合,博客记录表包括:BlogItems、Categories、BlogTags和BlogCategory、BlogComment、UserLinks张数据表。其中各个数据表的作用及关系如下:
BlogItems表:记录用户的博客文章数据;
Categories表:记录博客文章的分类信息;
BlogTags表:记录博客文章的Tag标记信息;
BlogCategory表:记录每篇文章管理的分类;
BlogCommnet表:记录博客文章的评论信息;
UserLinks表:记录用户博客上的自定义友情链接;
在上述数据表中,BlogCategory、BlogComment和BlogTags均包含了指向BlogItems表中BlogItemID的外键,而BlogCategory的设计与之前的UserInRoles表的结构类似。
上述数据表的设计,在结构上没有特别之处,不过在字段设计上需要考虑到是否允许用户对博客文章发表评论,是否需要对博客文章的评论信息进行审核等多种情况,由于这些情况均与记录数据发生关系,因此在BlogIems表和BlogComment表中会包含和此项功能相关的标记字段,一般,这类字段均采用Bit数据类型。
c) 系统配置表
和用户配置信息类似,博客系统同样需要记录大量的配置信息,包括网站的标题、版权声明、SMTP服务器地址等信息,因此需要一张系统级的设置表SystemSetting。这张数据表的结构和UserSetting类似,只是省略了一个UserID字段。
注:完整的数据库脚本,请参考本文附带的SQL文件。
三、 写在最后
按照正常的开发流程,在开始数据库设计前需要对系统进行需求整理和功能分析,考虑到本系列文章主要着眼于ASP.NET技术的综合应用,加上博客系统的需求和功能比较清晰完整,最终省略了这部分内容。对于涉及功能分析思路和整理需求相关的技巧,在后续介绍功能模块的文章中笔者会适当的加以介绍。下一期文章,首先跟大家分享的是博客系统的用户管理模块。
|
|
文章检索
编程>热门文章
|