基于.NET平台的分层架构实战(五)——接口的设计与实现
· 基于.NET平台的分层架构实战(四)——实体类的设计与实现
· 基于.NET平台的分层架构实战(三)——架构概要设计
· 基于.NET平台的分层架构实战(一)——综述
在实际的项目中,需求分析和数据库的设计是很重要的一个环节,这个环节会直接影响项目的开发过程和质量。实际中,这个环节不但需要系统分析师、软件工程师等计算机方面的专家,还需要相关领域的领域专家参与才能完成。
但是,在这个文章系列中,所要使用的Demo仅仅是一个例子,而且其业务极为简单,因此,这里并不是真正的需求分析和数据库设计,而是将Demo的需求和数据库罗列至此,使朋友们对Demo有一个大体的了解,方便后续文章中开发过程的理解。
需求分析:
这个项目是一个留言本,其业务极为简单,现将其描述如下。
1.任何访问者可以进行留言,留言完成后,不会立即显示正文,而是要经过管理员验证后才可显示。
2.任何访问者可以对留言发表评论,未通过验证的留言不可以评论。
3.管理员可以对留言进行回复(这个回复不同于评论,是直接显示在正文下面,而且是一个留言只能有一个回复),并可对留言与评论实行删除,以及对留言进行通过验证操作。
4.管理员分为超级管理员和普通管理员。超级管理员只有一个,负责对普通管理员实行添加、删除操作。普通管理员可偶多个,负责对留言的管理,并可以修改自己的登录密码。
这个项目的用例图如下:
图2.1、NGuestBook的用例图
数据库设计:
设计数据表之前,首先进行实体和关系的识别与确定。
通过需求分析,可以观察得出,本项目的实体有:管理员(不包括超级管理员),留言,评论。本项目的关系有:留言与评论间的一对多关系。
进一步,数据库各表的设计如下:
管理员表(TAdmin)
ID int 管理员ID NotNull 主键,自增
Name varchar(20) 登录名 NotNull
Password varchar(50) 登录密码 NotNull 使用MD5加密
留言表(TMessage)
ID int 留言ID NotNull 主键,自增
GuestName varchar(20) 留言者用户名 NotNull
GuestEmail varchar(100) 留言者E-mail Null
Content text 留言内容 NotNull
Time datetime 发表留言时间 NotNull
Reply text 回复 Null
IsPass varchar(10) 是否通过验证 NotNull
评论表(TComment)
ID int 评论ID NotNull 主键,自增
Content text 评论内容 NotNull
Time datetime 发表评论时间 NotNull
MessageID int 所属留言的ID 外键
本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名张洋(包含链接),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系。
评论表中没有主键。管理员表中用户名应该就是主键,你的管理员登录时候用户名就应该不能重复。不是什么都用自增长类型的。
系统是东亚用户为主的话应该考虑使用nvarchar而不是varchar。
如果考虑使用的是ORM的话表名推荐不要加T了,应该是你的老师让你这样做的,2000年以前的程序员到挺习惯加这个。可是加了,操作实体对象很累,毕竟已经有命名空间做限制了。
如果用户有需求提出可以对评论进行评论的,这个设计就OVER了。
需求中2的后半句有疑问,看不到的留言如何进行评论?
首先,说一下楼主辛苦了。
对LZ数据库的设计,个人建议如下:
1.管理员表(TAdmin)里有个假删除的字段(冻结),因为对于管理员来说不能说删除就删除吧!如果哪天需要重新启用了,在添加感觉挺麻烦;对于24楼的建议,偶也有此意,不过,楼主有回复。
2.留言表(TMessage) 一个留言有一个回复可能有他本身的业务需求吧?
3.评论表(TComment) 虽然可以匿名回复,但是,还是建议有个GuestName的字段,这样对于登录的用户还是可以显示用户名的,从而可以实现其互动性的作用。
以上只是个人观点,欢迎讨论。