Spiga

基于.NET平台的分层架构实战(二)——需求分析与数据库设计

2008-06-17 09:05 by T2噬菌体, 10183 visits, 收藏, 编辑

在实际的项目中,需求分析和数据库的设计是很重要的一个环节,这个环节会直接影响项目的开发过程和质量。实际中,这个环节不但需要系统分析师、软件工程师等计算机方面的专家,还需要相关领域的领域专家参与才能完成。

但是,在这个文章系列中,所要使用的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    外键
作者:T2噬菌体
出处:http://leoo2sk.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Creative Commons License

本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名张洋(包含链接),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

Add your comment

37 条回复

  1. #1楼 luguode12345678[未注册用户]2008-06-17 09:31
    看到UML图了 真亲切。。。

    现在的公司 PD UML都不用

    哎。。。
     回复 引用   
  2. #2楼 Spring.Cheung      2008-06-17 09:49
    用例图画的很精确,值得表扬
     回复 引用 查看   
  3. #3楼 zhengxionghua[未注册用户]2008-06-17 12:55
    用Nfx类库建立三层应用
    http://forum.entlib.net.cn/showtopic-1363.aspx
     回复 引用   
  4. #4楼 fdfdfsdf[未注册用户]2008-06-17 13:07
    LZ的数据库设计的不咋地,
    第一.不规范,
    第二,属于一般的结构设计,应付不了大数据量,
    估计LZ的大学的数据结构课程一定没有学好
     回复 引用   
  5. #5楼 笨笨的考拉熊      2008-06-17 13:22
    --引用--------------------------------------------------
    fdfdfsdf: LZ的数据库设计的不咋地,
    第一.不规范,
    第二,属于一般的结构设计,应付不了大数据量,
    估计LZ的大学的数据结构课程一定没有学好
    --------------------------------------------------------

    不规范:怎么不规范?
    应负不了大数据量:你写一个能应付大数据量的例子看看。
    数据结构没学好:有些人动不动就所谓门门都精通,好像哪里都会,就是没看写出过什么有用的东西。

    写一万条挑毛病的留言,也不如在新手区发一篇基本语法的文章,对他人更有帮助。
    一些人也只能通过鸡蛋里挑骨头地贬低别人来证明自己的了!
     回复 引用 查看   
  6. #6楼 good man      2008-06-17 13:26
    LZ用的是不是StartUML你那里有文档不啊
    Email:caodm@cim-t.cn
    给我发一份UML的资料,谢谢了哟
    支持
     回复 引用 查看   
  7. #7楼 水言木      2008-06-17 14:10
    @笨笨的考拉熊
    同意。CSDN上这样的人更多...
     回复 引用 查看   
  8. #8楼 KenFor[未注册用户]2008-06-17 14:12
    评论表中没有主键。管理员表中用户名应该就是主键,你的管理员登录时候用户名就应该不能重复。不是什么都用自增长类型的。
    系统是东亚用户为主的话应该考虑使用nvarchar而不是varchar。
    如果考虑使用的是ORM的话表名推荐不要加T了,应该是你的老师让你这样做的,2000年以前的程序员到挺习惯加这个。可是加了,操作实体对象很累,毕竟已经有命名空间做限制了。
    如果用户有需求提出可以对评论进行评论的,这个设计就OVER了。

    需求中2的后半句有疑问,看不到的留言如何进行评论?
     回复 引用   
  9. #9楼 KenFor[未注册用户]2008-06-17 14:20
    看到楼上的汗啊。认真分析下楼主的设计。是有问题的。评论表没有主键,删除的功能要实现还是很有难度的。大家心平气和的说嘛。有问题指出来,不要骂人。
     回复 引用   
  10. #10楼 德仔--脚踏实地 用心努力      2008-06-17 14:55
    有很多问题,不过关,需求太简单了吧。。。
     回复 引用 查看   
  11. #11楼[楼主] T2噬菌体      2008-06-17 15:26
    @All

    多谢各位给我指出的不足,呵呵。仔细看了一下,评论表没有主键确实是疏忽了,如果没有主键删除单条评论比较难实现。已经改正,呵呵。

    @fdfdfsdf

    看了你的意见,有些不解,还请您能具体说一下。首先我这个数据库设计应该是规范的,至少符合第三范式。再者,关于应付大量数据,以为这个Demo很小,数据库结构很简单,所以我没有能看出问题在哪,不知能否指正。最后,数据结构这门课我学得还可以吧,高中自学了一遍,大学学了一遍,考研时又学了一遍,而且我不明白数据结构和设计这个数据库有什么直接关系,还望明确指出,谢谢!

    @good man
    我这里是有StarUML,但是没有文档……

    @KenFor
    那个表明加T的习惯不是老师告诉我的,是我做项目过程中形成的习惯,呵呵,这里应该不会影响ORM,我毕业设计的Demo——BBS系统也是这么做的。

    @德仔--脚踏实地 用心努力
    这个需求确实简单,以为这个项目本来就这么简单,这个文章系列主要讨论分层架构的基本方法,而不是把重点放在Demo本身,呵呵。
     回复 引用 查看   
  12. #12楼 编织套管[未注册用户]2008-06-17 20:47
    班级纪念册怎样设计。
     回复 引用   
  13. #13楼 zhengxionghua[未注册用户]2008-06-17 23:13
    达到抛砖引玉的效果就好, 不要什么东西都简单的拿来主义
     回复 引用   
  14. #14楼 wreer[未注册用户]2008-06-19 10:25
    "我不明白数据结构和设计数据库有什么直接关系"? 天啦
     回复 引用   
  15. #15楼 艺林      2008-06-19 11:51
    超级管理员和普通管理员之间应该有继承关系
     回复 引用 查看   
  16. #16楼[楼主] T2噬菌体      2008-06-19 15:28
    --引用--------------------------------------------------
    艺林: 超级管理员和普通管理员之间应该有继承关系
    --------------------------------------------------------

    这里不需要超级管理员实体……
     回复 引用 查看   
  17. #17楼 起云      2008-07-03 16:44
    我觉得应该再加一张“访问者”表
     回复 引用 查看   
  18. #18楼[楼主] T2噬菌体      2008-07-03 17:12
    --引用--------------------------------------------------
    起云: 我觉得应该再加一张“访问者”表
    --------------------------------------------------------

    这个视具体业务需求而定
     回复 引用 查看   
  19. #19楼 成长的强强      2008-07-21 15:00
    别个只是个小例子,用得着大家指责吗。
    郁闷,这里的重点是说说架构,没说讨论数据库设计撒,遇到得你们中有些人哟。。。
     回复 引用 查看   
  20. #20楼 咔咔      2008-07-25 08:50
    没有详细讲下架构这东西!
     回复 引用 查看   
  21. #21楼 黄某人[未注册用户]2008-08-26 13:57
    那个未注册用户的傻bi能不能发表一些有用的东西?如果不能,别在这儿装孙子!
     回复 引用   
  22. #22楼 孟黎明      2008-11-03 03:16
    仔细的拜读过你的毕业设计,对其中的观点,论断非常赞同,看得出来楼主对设计模式、分层、MVC、Ioc、ORM等很多理念理解的很透彻,值得钦佩,加油↖(^ω^)↗!!
     回复 引用 查看   
  23. #23楼[楼主] T2噬菌体      2008-11-03 10:01
    @孟黎明
    拜读可不敢当啊……呵呵
     回复 引用 查看   
  24. #24楼 deymmtd[未注册用户]2008-11-08 11:00
    管理员表(TAdmin)是不是在加个字段来判级别呀
     回复 引用   
  25. #25楼 deymmtd[未注册用户]2008-11-08 11:03
    管理员表(TAdmin)是不是在加个字段来判级别呀,你是怎么来判断是高级管理员,还是普通管理员呀
     回复 引用   
  26. #26楼[楼主] T2噬菌体      2008-11-08 11:21
    @deymmtd
    超级管理员不需要持久化到数据库中。全局只有一个,其信息直接存于配置文件中。
     回复 引用 查看   
  27. #27楼 wzjun1118[未注册用户]2009-03-12 09:34
    我看了很多人的留言 对那些来泼冷水的人 想说些:你们有这么多经验 这么厉害的 怎么不写点东西出来给大家看看 别来这唧唧歪歪!!!!
     回复 引用   
  28. #28楼 Jaryleely      2009-03-17 14:38
    楼主写的很好,简洁明了,辛苦了。。。俺精神上支持你!
     回复 引用 查看   
  29. #29楼 支持T2噬菌体[未注册用户]2009-03-26 21:10
    赞同wzjun1118的观点,支持T2噬菌体
     回复 引用   
  30. #30楼 夢龙      2009-06-02 13:50
    --引用--------------------------------------------------
    wzjun1118: 我看了很多人的留言 对那些来泼冷水的人 想说些:你们有这么多经验 这么厉害的 怎么不写点东西出来给大家看看 别来这唧唧歪歪!!!!
    --------------------------------------------------------

    说得很好.兄弟..那些鸟人太装了..
     回复 引用 查看   
  31. #31楼 金戈铁马      2009-06-11 21:15
    我认为应该加一个超级管理员表来增加和删除管理员。
     回复 引用 查看   
  32. #32楼[楼主] EricZhang(T2噬菌体)      2009-06-11 22:19
    @金戈铁马
    业务问题,不是本文重点。
     回复 引用 查看   
  33. #33楼 金鱼      2009-08-30 10:29
    首先,说一下楼主辛苦了。
    对LZ数据库的设计,个人建议如下:
    1.管理员表(TAdmin)里有个假删除的字段(冻结),因为对于管理员来说不能说删除就删除吧!如果哪天需要重新启用了,在添加感觉挺麻烦;对于24楼的建议,偶也有此意,不过,楼主有回复。
    2.留言表(TMessage) 一个留言有一个回复可能有他本身的业务需求吧?
    3.评论表(TComment) 虽然可以匿名回复,但是,还是建议有个GuestName的字段,这样对于登录的用户还是可以显示用户名的,从而可以实现其互动性的作用。
    以上只是个人观点,欢迎讨论。

     回复 引用 查看   
  34. #34楼 我已不写程序很多年[未注册用户]2009-09-11 09:11
    @金鱼
    这个系列主要讨论分成架构 并非重心放在业务逻辑的处理下
    这只是个配合分层架构的 demo
     回复 引用   
  35. #35楼 peeboo[未注册用户]2009-09-26 20:11
    楼主你好,我今天无意看了你的毕业设计,真是佩服的不得了,特别是对分层结构的详细说明,我现在都整理成文档作为参考了,在google搜索.NET架构的时候才无意看到你的文章的,这些文章对我非常有帮助,学习了,非常感谢,好运!
     回复 引用   
  36. #36楼 帕特里克      2010-02-08 10:58
    项目需求和项目的数据库一起设计
     回复 引用 查看   
  37. #37楼 witat      2012-01-17 15:46
    其实我有点没大看懂,这个用例是系统用例呢,还是业务用例?
     回复 引用 查看   
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1223489 SnmW1VAtujc=